[svn:parrot] r49232 - in branches/html_cleanup: . compilers/data_json compilers/imcc compilers/opsc/src/Ops compilers/pct compilers/pct/src/PAST compilers/pct/src/PCT compilers/pct/src/POST compilers/pge compilers/tge config/auto config/auto/sizes config/auto/zlib config/gen/config_h config/gen/makefiles config/init/hints config/inter docs docs/book/draft docs/book/pct docs/book/pir docs/dev docs/pdds docs/pmc docs/project editor examples/benchmarks examples/compilers examples/config/file examples/embed examples/io examples/japh examples/json examples/languages/abc examples/languages/squaak examples/namespace examples/pge examples/tools ext/nqp-rx ext/nqp-rx/src/stage0 include/parrot include/parrot/oplib lib/Parrot lib/Parrot/Configure/Options lib/Parrot/Configure/Options/Conf lib/Parrot/Configure/Step lib/Parrot/Harness lib/Parrot/Pmc2c ports/cygwin ports/debian runtime/parrot/include runtime/parrot/languages runtime/parrot/library runtime/parrot/library/Archive run time/parrot/library/Math runtime/parrot/library/Test runtime/parrot/library/Test/Builder runtime/parrot/library/URI src src/call src/dynoplibs src/dynpmc src/gc src/interp src/io src/nci src/ops src/packfile src/pmc src/runcore src/string src/string/charset src/string/encoding t t/codingstd t/compilers/imcc/syn t/compilers/pct t/compilers/tge t/dynoplibs t/dynpmc t/examples t/library t/native_pbc t/oo t/op t/op/testlib t/pmc t/src t/steps/auto t/steps/init/hints t/steps/inter t/tools tools/build tools/dev tools/release

mikehh at svn.parrot.org mikehh at svn.parrot.org
Wed Sep 22 03:36:01 UTC 2010


Author: mikehh
Date: Wed Sep 22 03:35:47 2010
New Revision: 49232
URL: https://trac.parrot.org/parrot/changeset/49232

Log:
[html_cleanup] merge with trunk at r49200

Added:
   branches/html_cleanup/examples/benchmarks/boolean.pir
      - copied unchanged from r49200, trunk/examples/benchmarks/boolean.pir
   branches/html_cleanup/include/parrot/imageio.h
      - copied unchanged from r49200, trunk/include/parrot/imageio.h
   branches/html_cleanup/src/gc/string_gc.c
      - copied unchanged from r49200, trunk/src/gc/string_gc.c
   branches/html_cleanup/src/pmc/imageiofreeze.pmc
      - copied unchanged from r49200, trunk/src/pmc/imageiofreeze.pmc
   branches/html_cleanup/src/pmc/imageiothaw.pmc
      - copied unchanged from r49200, trunk/src/pmc/imageiothaw.pmc
   branches/html_cleanup/src/pmc/nativepccmethod.pmc
      - copied unchanged from r49200, trunk/src/pmc/nativepccmethod.pmc
   branches/html_cleanup/src/string/encoding/ascii.c
      - copied unchanged from r49200, trunk/src/string/encoding/ascii.c
   branches/html_cleanup/src/string/encoding/binary.c
      - copied unchanged from r49200, trunk/src/string/encoding/binary.c
   branches/html_cleanup/src/string/encoding/latin1.c
      - copied unchanged from r49200, trunk/src/string/encoding/latin1.c
   branches/html_cleanup/src/string/encoding/shared.c
      - copied unchanged from r49200, trunk/src/string/encoding/shared.c
   branches/html_cleanup/src/string/encoding/shared.h
      - copied unchanged from r49200, trunk/src/string/encoding/shared.h
   branches/html_cleanup/src/string/encoding/tables.c
      - copied unchanged from r49200, trunk/src/string/encoding/tables.c
   branches/html_cleanup/src/string/encoding/tables.h
      - copied unchanged from r49200, trunk/src/string/encoding/tables.h
   branches/html_cleanup/t/op/testlib/   (props changed)
      - copied from r49200, trunk/t/op/testlib/
Replaced:
   branches/html_cleanup/t/op/testlib/test_strings.pir
      - copied unchanged from r49200, trunk/t/op/testlib/test_strings.pir
Deleted:
   branches/html_cleanup/config/inter/charset.pm
   branches/html_cleanup/config/inter/encoding.pm
   branches/html_cleanup/examples/japh/
   branches/html_cleanup/include/parrot/charset.h
   branches/html_cleanup/src/string/charset.c
   branches/html_cleanup/src/string/charset/ascii.h
   branches/html_cleanup/src/string/charset/binary.h
   branches/html_cleanup/src/string/charset/iso-8859-1.h
   branches/html_cleanup/src/string/charset/tables.c
   branches/html_cleanup/src/string/charset/tables.h
   branches/html_cleanup/src/string/charset/unicode.h
   branches/html_cleanup/src/string/encoding/fixed_8.h
   branches/html_cleanup/src/string/encoding/ucs2.h
   branches/html_cleanup/src/string/encoding/ucs4.h
   branches/html_cleanup/src/string/encoding/utf16.h
   branches/html_cleanup/src/string/encoding/utf8.h
   branches/html_cleanup/t/examples/japh.t
   branches/html_cleanup/t/steps/inter/charset-01.t
   branches/html_cleanup/t/steps/inter/encoding-01.t
Modified:
   branches/html_cleanup/   (props changed)
   branches/html_cleanup/CREDITS
   branches/html_cleanup/ChangeLog
   branches/html_cleanup/Configure.pl
   branches/html_cleanup/DEPRECATED.pod
   branches/html_cleanup/MANIFEST
   branches/html_cleanup/MANIFEST.SKIP
   branches/html_cleanup/MANIFEST.generated
   branches/html_cleanup/NEWS
   branches/html_cleanup/PBC_COMPAT
   branches/html_cleanup/README
   branches/html_cleanup/VERSION
   branches/html_cleanup/compilers/data_json/Rules.mak   (props changed)
   branches/html_cleanup/compilers/imcc/Rules.in   (contents, props changed)
   branches/html_cleanup/compilers/imcc/cfg.c
   branches/html_cleanup/compilers/imcc/debug.c
   branches/html_cleanup/compilers/imcc/imc.h
   branches/html_cleanup/compilers/imcc/imcc.l
   branches/html_cleanup/compilers/imcc/imcc.y
   branches/html_cleanup/compilers/imcc/imclexer.c
   branches/html_cleanup/compilers/imcc/imcparser.c
   branches/html_cleanup/compilers/imcc/imcparser.h
   branches/html_cleanup/compilers/imcc/instructions.c
   branches/html_cleanup/compilers/imcc/instructions.h
   branches/html_cleanup/compilers/imcc/optimizer.c
   branches/html_cleanup/compilers/imcc/parser_util.c
   branches/html_cleanup/compilers/imcc/pbc.c
   branches/html_cleanup/compilers/imcc/pcc.c
   branches/html_cleanup/compilers/imcc/reg_alloc.c
   branches/html_cleanup/compilers/imcc/symreg.c
   branches/html_cleanup/compilers/imcc/symreg.h
   branches/html_cleanup/compilers/opsc/src/Ops/Emitter.pm
   branches/html_cleanup/compilers/pct/Rules.mak   (props changed)
   branches/html_cleanup/compilers/pct/src/PAST/Compiler.pir
   branches/html_cleanup/compilers/pct/src/PCT/HLLCompiler.pir
   branches/html_cleanup/compilers/pct/src/POST/Compiler.pir
   branches/html_cleanup/compilers/pge/Rules.mak   (props changed)
   branches/html_cleanup/compilers/tge/Rules.mak   (props changed)
   branches/html_cleanup/config/auto/gcc.pm
   branches/html_cleanup/config/auto/msvc.pm
   branches/html_cleanup/config/auto/pcre.pm
   branches/html_cleanup/config/auto/readline.pm
   branches/html_cleanup/config/auto/sizes/intval_maxmin_c.in   (props changed)
   branches/html_cleanup/config/auto/zlib/   (props changed)
   branches/html_cleanup/config/gen/config_h/config_h.in
   branches/html_cleanup/config/gen/makefiles/root.in
   branches/html_cleanup/config/init/hints/mswin32.pm
   branches/html_cleanup/config/inter/progs.pm
   branches/html_cleanup/docs/book/draft/README   (props changed)
   branches/html_cleanup/docs/book/draft/appa_glossary.pod   (props changed)
   branches/html_cleanup/docs/book/draft/appb_patch_submission.pod   (props changed)
   branches/html_cleanup/docs/book/draft/appc_command_line_options.pod   (props changed)
   branches/html_cleanup/docs/book/draft/appd_build_options.pod   (props changed)
   branches/html_cleanup/docs/book/draft/appe_source_code.pod   (props changed)
   branches/html_cleanup/docs/book/draft/ch01_introduction.pod   (props changed)
   branches/html_cleanup/docs/book/draft/ch02_getting_started.pod   (props changed)
   branches/html_cleanup/docs/book/draft/ch07_dynpmcs.pod   (props changed)
   branches/html_cleanup/docs/book/draft/ch08_dynops.pod   (props changed)
   branches/html_cleanup/docs/book/draft/ch10_opcode_reference.pod   (props changed)
   branches/html_cleanup/docs/book/draft/ch11_directive_reference.pod   (props changed)
   branches/html_cleanup/docs/book/draft/ch12_operator_reference.pod   (props changed)
   branches/html_cleanup/docs/book/draft/chXX_hlls.pod   (props changed)
   branches/html_cleanup/docs/book/draft/chXX_library.pod   (props changed)
   branches/html_cleanup/docs/book/draft/chXX_testing_and_debugging.pod   (props changed)
   branches/html_cleanup/docs/book/pct/ch01_introduction.pod   (props changed)
   branches/html_cleanup/docs/book/pct/ch02_getting_started.pod   (props changed)
   branches/html_cleanup/docs/book/pct/ch03_compiler_tools.pod   (props changed)
   branches/html_cleanup/docs/book/pct/ch04_pge.pod   (contents, props changed)
   branches/html_cleanup/docs/book/pct/ch05_nqp.pod   (props changed)
   branches/html_cleanup/docs/book/pir/ch04_variables.pod
   branches/html_cleanup/docs/dev/c_functions.pod   (props changed)
   branches/html_cleanup/docs/embed.pod
   branches/html_cleanup/docs/parrothist.pod
   branches/html_cleanup/docs/pdds/pdd17_pmc.pod
   branches/html_cleanup/docs/pdds/pdd19_pir.pod
   branches/html_cleanup/docs/pdds/pdd23_exceptions.pod
   branches/html_cleanup/docs/pdds/pdd28_strings.pod
   branches/html_cleanup/docs/pdds/pdd30_install.pod   (props changed)
   branches/html_cleanup/docs/pmc/subs.pod
   branches/html_cleanup/docs/project/release_manager_guide.pod
   branches/html_cleanup/docs/tests.pod
   branches/html_cleanup/docs/vtables.pod
   branches/html_cleanup/editor/pir-mode.el
   branches/html_cleanup/examples/compilers/japhc.c
   branches/html_cleanup/examples/config/file/configcompiler
   branches/html_cleanup/examples/config/file/configwithfatalstep
   branches/html_cleanup/examples/embed/cotorra.c   (props changed)
   branches/html_cleanup/examples/io/httpd.pir
   branches/html_cleanup/examples/io/post.pir
   branches/html_cleanup/examples/json/postalcodes.pir
   branches/html_cleanup/examples/languages/abc/   (props changed)
   branches/html_cleanup/examples/languages/squaak/   (props changed)
   branches/html_cleanup/examples/namespace/namespace_dump.pir
   branches/html_cleanup/examples/pge/demo.pir   (props changed)
   branches/html_cleanup/examples/tools/pgegrep   (props changed)
   branches/html_cleanup/ext/nqp-rx/Rules.mak   (props changed)
   branches/html_cleanup/ext/nqp-rx/src/stage0/HLL-s0.pir
   branches/html_cleanup/ext/nqp-rx/src/stage0/NQP-s0.pir
   branches/html_cleanup/ext/nqp-rx/src/stage0/P6Regex-s0.pir
   branches/html_cleanup/ext/nqp-rx/src/stage0/Regex-s0.pir
   branches/html_cleanup/ext/nqp-rx/src/stage0/nqp-setting.nqp
   branches/html_cleanup/include/parrot/call.h   (contents, props changed)
   branches/html_cleanup/include/parrot/context.h
   branches/html_cleanup/include/parrot/debugger.h
   branches/html_cleanup/include/parrot/encoding.h
   branches/html_cleanup/include/parrot/gc_api.h   (contents, props changed)
   branches/html_cleanup/include/parrot/hash.h
   branches/html_cleanup/include/parrot/interpreter.h
   branches/html_cleanup/include/parrot/library.h
   branches/html_cleanup/include/parrot/longopt.h
   branches/html_cleanup/include/parrot/misc.h
   branches/html_cleanup/include/parrot/nci.h
   branches/html_cleanup/include/parrot/op.h
   branches/html_cleanup/include/parrot/oplib.h
   branches/html_cleanup/include/parrot/oplib/core_ops.h
   branches/html_cleanup/include/parrot/packfile.h
   branches/html_cleanup/include/parrot/parrot.h
   branches/html_cleanup/include/parrot/pobj.h
   branches/html_cleanup/include/parrot/runcore_api.h   (contents, props changed)
   branches/html_cleanup/include/parrot/runcore_profiling.h   (props changed)
   branches/html_cleanup/include/parrot/runcore_trace.h   (props changed)
   branches/html_cleanup/include/parrot/string.h
   branches/html_cleanup/include/parrot/string_funcs.h
   branches/html_cleanup/include/parrot/sub.h
   branches/html_cleanup/lib/Parrot/Configure/Options/Conf.pm
   branches/html_cleanup/lib/Parrot/Configure/Options/Conf/Shared.pm
   branches/html_cleanup/lib/Parrot/Configure/Step/List.pm
   branches/html_cleanup/lib/Parrot/Configure/Step/Test.pm   (props changed)
   branches/html_cleanup/lib/Parrot/H2inc.pm   (props changed)
   branches/html_cleanup/lib/Parrot/Harness/Smoke.pm
   branches/html_cleanup/lib/Parrot/Headerizer.pm
   branches/html_cleanup/lib/Parrot/Manifest.pm
   branches/html_cleanup/lib/Parrot/Pmc2c/PMC.pm
   branches/html_cleanup/lib/Parrot/Pmc2c/PMCEmitter.pm
   branches/html_cleanup/lib/Parrot/Test.pm
   branches/html_cleanup/ports/cygwin/parrot-1.0.0-1.cygport   (props changed)
   branches/html_cleanup/ports/debian/libparrot-dev.install.in   (props changed)
   branches/html_cleanup/ports/debian/libparrot.install.in   (props changed)
   branches/html_cleanup/ports/debian/parrot-doc.install.in   (props changed)
   branches/html_cleanup/ports/debian/parrot.install.in   (props changed)
   branches/html_cleanup/runtime/parrot/include/test_more.pir
   branches/html_cleanup/runtime/parrot/languages/   (props changed)
   branches/html_cleanup/runtime/parrot/library/Archive/Zip.pir
   branches/html_cleanup/runtime/parrot/library/Math/Rand.pir   (props changed)
   branches/html_cleanup/runtime/parrot/library/P6object.pir
   branches/html_cleanup/runtime/parrot/library/Rules.mak   (props changed)
   branches/html_cleanup/runtime/parrot/library/Test/Builder.pir
   branches/html_cleanup/runtime/parrot/library/Test/Builder/TestPlan.pir
   branches/html_cleanup/runtime/parrot/library/Test/More.pir
   branches/html_cleanup/runtime/parrot/library/URI/Escape.pir
   branches/html_cleanup/runtime/parrot/library/distutils.pir
   branches/html_cleanup/runtime/parrot/library/osutils.pir
   branches/html_cleanup/runtime/parrot/library/pcre.pir
   branches/html_cleanup/src/call/args.c
   branches/html_cleanup/src/call/context_accessors.c
   branches/html_cleanup/src/call/ops.c   (props changed)
   branches/html_cleanup/src/call/pcc.c   (contents, props changed)
   branches/html_cleanup/src/datatypes.c
   branches/html_cleanup/src/debug.c
   branches/html_cleanup/src/dynext.c
   branches/html_cleanup/src/dynoplibs/sys.ops
   branches/html_cleanup/src/dynpmc/Defines.in
   branches/html_cleanup/src/dynpmc/Rules.in
   branches/html_cleanup/src/dynpmc/gziphandle.pmc
   branches/html_cleanup/src/embed.c
   branches/html_cleanup/src/exceptions.c
   branches/html_cleanup/src/gc/alloc_memory.c   (props changed)
   branches/html_cleanup/src/gc/alloc_resources.c   (contents, props changed)
   branches/html_cleanup/src/gc/api.c   (props changed)
   branches/html_cleanup/src/gc/gc_ms.c
   branches/html_cleanup/src/gc/gc_private.h
   branches/html_cleanup/src/gc/malloc.c   (props changed)
   branches/html_cleanup/src/gc/malloc_trace.c   (props changed)
   branches/html_cleanup/src/gc/mark_sweep.c   (contents, props changed)
   branches/html_cleanup/src/gc/system.c   (contents, props changed)
   branches/html_cleanup/src/global_setup.c
   branches/html_cleanup/src/hash.c
   branches/html_cleanup/src/hll.c
   branches/html_cleanup/src/interp/inter_cb.c   (props changed)
   branches/html_cleanup/src/interp/inter_create.c   (contents, props changed)
   branches/html_cleanup/src/interp/inter_misc.c   (contents, props changed)
   branches/html_cleanup/src/io/api.c
   branches/html_cleanup/src/io/buffer.c
   branches/html_cleanup/src/io/filehandle.c
   branches/html_cleanup/src/io/socket_unix.c
   branches/html_cleanup/src/io/socket_win32.c
   branches/html_cleanup/src/io/utf8.c
   branches/html_cleanup/src/library.c
   branches/html_cleanup/src/longopt.c
   branches/html_cleanup/src/main.c
   branches/html_cleanup/src/misc.c
   branches/html_cleanup/src/multidispatch.c
   branches/html_cleanup/src/namespace.c
   branches/html_cleanup/src/nci/core_thunks.c
   branches/html_cleanup/src/nci/extra_thunks.c
   branches/html_cleanup/src/oo.c
   branches/html_cleanup/src/ops/cmp.ops
   branches/html_cleanup/src/ops/core_ops.c
   branches/html_cleanup/src/ops/experimental.ops
   branches/html_cleanup/src/ops/object.ops
   branches/html_cleanup/src/ops/pmc.ops
   branches/html_cleanup/src/ops/string.ops
   branches/html_cleanup/src/ops/sys.ops
   branches/html_cleanup/src/packdump.c
   branches/html_cleanup/src/packfile/   (props changed)
   branches/html_cleanup/src/packfile.c
   branches/html_cleanup/src/packfile/pf_items.c
   branches/html_cleanup/src/packout.c
   branches/html_cleanup/src/parrot_debugger.c
   branches/html_cleanup/src/pbc_dump.c
   branches/html_cleanup/src/pbc_merge.c
   branches/html_cleanup/src/pmc/addrregistry.pmc
   branches/html_cleanup/src/pmc/boolean.pmc
   branches/html_cleanup/src/pmc/bytebuffer.pmc
   branches/html_cleanup/src/pmc/callcontext.pmc
   branches/html_cleanup/src/pmc/class.pmc
   branches/html_cleanup/src/pmc/complex.pmc
   branches/html_cleanup/src/pmc/continuation.pmc
   branches/html_cleanup/src/pmc/default.pmc
   branches/html_cleanup/src/pmc/eval.pmc
   branches/html_cleanup/src/pmc/filehandle.pmc
   branches/html_cleanup/src/pmc/fixedbooleanarray.pmc
   branches/html_cleanup/src/pmc/float.pmc
   branches/html_cleanup/src/pmc/hash.pmc
   branches/html_cleanup/src/pmc/hashiterator.pmc
   branches/html_cleanup/src/pmc/integer.pmc
   branches/html_cleanup/src/pmc/lexpad.pmc
   branches/html_cleanup/src/pmc/namespace.pmc
   branches/html_cleanup/src/pmc/nci.pmc
   branches/html_cleanup/src/pmc/object.pmc
   branches/html_cleanup/src/pmc/oplib.pmc
   branches/html_cleanup/src/pmc/packfile.pmc
   branches/html_cleanup/src/pmc/packfileannotations.pmc
   branches/html_cleanup/src/pmc/packfilefixupentry.pmc
   branches/html_cleanup/src/pmc/resizablestringarray.pmc
   branches/html_cleanup/src/pmc/scalar.pmc
   branches/html_cleanup/src/pmc/string.pmc
   branches/html_cleanup/src/pmc/stringbuilder.pmc
   branches/html_cleanup/src/pmc/stringhandle.pmc
   branches/html_cleanup/src/pmc/stringiterator.pmc
   branches/html_cleanup/src/pmc/sub.pmc
   branches/html_cleanup/src/pmc/undef.pmc
   branches/html_cleanup/src/pmc/unmanagedstruct.pmc
   branches/html_cleanup/src/pmc_freeze.c
   branches/html_cleanup/src/runcore/cores.c   (props changed)
   branches/html_cleanup/src/runcore/main.c   (contents, props changed)
   branches/html_cleanup/src/runcore/profiling.c   (props changed)
   branches/html_cleanup/src/runcore/trace.c   (props changed)
   branches/html_cleanup/src/spf_render.c
   branches/html_cleanup/src/spf_vtable.c
   branches/html_cleanup/src/string/api.c
   branches/html_cleanup/src/string/encoding.c
   branches/html_cleanup/src/string/encoding/ucs2.c
   branches/html_cleanup/src/string/encoding/ucs4.c
   branches/html_cleanup/src/string/encoding/utf16.c
   branches/html_cleanup/src/string/encoding/utf8.c
   branches/html_cleanup/src/string/primitives.c
   branches/html_cleanup/src/sub.c
   branches/html_cleanup/src/thread.c
   branches/html_cleanup/src/vtable.tbl
   branches/html_cleanup/t/codingstd/pmc_docs.t   (props changed)
   branches/html_cleanup/t/compilers/imcc/syn/const.t
   branches/html_cleanup/t/compilers/pct/pct_hllcompiler.t
   branches/html_cleanup/t/compilers/tge/NoneGrammar.tg   (props changed)
   branches/html_cleanup/t/dynoplibs/sysinfo.t
   branches/html_cleanup/t/dynpmc/gziphandle.t
   branches/html_cleanup/t/dynpmc/rational.t
   branches/html_cleanup/t/examples/pgegrep.t   (props changed)
   branches/html_cleanup/t/harness.pir
   branches/html_cleanup/t/library/archive_zip.t
   branches/html_cleanup/t/library/osutils.t
   branches/html_cleanup/t/native_pbc/integer_4.pbc
   branches/html_cleanup/t/native_pbc/number_4.pbc
   branches/html_cleanup/t/native_pbc/string_4.pbc
   branches/html_cleanup/t/oo/objects.t   (contents, props changed)
   branches/html_cleanup/t/oo/root_new.t   (props changed)
   branches/html_cleanup/t/op/calling.t
   branches/html_cleanup/t/op/exceptions.t
   branches/html_cleanup/t/op/integer.t
   branches/html_cleanup/t/op/string.t
   branches/html_cleanup/t/op/string_cs.t
   branches/html_cleanup/t/op/stringu.t
   branches/html_cleanup/t/pmc/bigint.t
   branches/html_cleanup/t/pmc/bytebuffer.t
   branches/html_cleanup/t/pmc/complex.t
   branches/html_cleanup/t/pmc/exception-old.t
   branches/html_cleanup/t/pmc/exception.t
   branches/html_cleanup/t/pmc/filehandle.t
   branches/html_cleanup/t/pmc/hash.t
   branches/html_cleanup/t/pmc/hashiterator.t
   branches/html_cleanup/t/pmc/hashiteratorkey.t
   branches/html_cleanup/t/pmc/imageio.t
   branches/html_cleanup/t/pmc/io.t
   branches/html_cleanup/t/pmc/lexinfo.t
   branches/html_cleanup/t/pmc/namespace-old.t   (props changed)
   branches/html_cleanup/t/pmc/object-meths.t
   branches/html_cleanup/t/pmc/orderedhashiterator.t
   branches/html_cleanup/t/pmc/packfile.t
   branches/html_cleanup/t/pmc/parrotinterpreter.t
   branches/html_cleanup/t/pmc/string.t
   branches/html_cleanup/t/pmc/stringbuilder.t
   branches/html_cleanup/t/pmc/stringhandle.t
   branches/html_cleanup/t/pmc/stringiterator.t
   branches/html_cleanup/t/src/embed.t   (props changed)
   branches/html_cleanup/t/src/extend.t
   branches/html_cleanup/t/src/warnings.t
   branches/html_cleanup/t/steps/auto/readline-01.t
   branches/html_cleanup/t/steps/init/hints/linux-01.t   (props changed)
   branches/html_cleanup/t/tools/parrot_debugger.t
   branches/html_cleanup/tools/build/README   (props changed)
   branches/html_cleanup/tools/build/h2inc.pl   (props changed)
   branches/html_cleanup/tools/build/parrot_config_c.pl
   branches/html_cleanup/tools/dev/README   (props changed)
   branches/html_cleanup/tools/dev/addopstags.pl   (props changed)
   branches/html_cleanup/tools/dev/dump_pbc.pl   (props changed)
   branches/html_cleanup/tools/dev/fetch_languages.pl   (contents, props changed)
   branches/html_cleanup/tools/dev/gen_charset_tables.pl
   branches/html_cleanup/tools/dev/headerizer.pl   (contents, props changed)
   branches/html_cleanup/tools/dev/mk_gitignore.pl   (props changed)
   branches/html_cleanup/tools/dev/nci_thunk_gen.pir
   branches/html_cleanup/tools/dev/ncidef2pasm.pl   (props changed)
   branches/html_cleanup/tools/dev/parrot-config.pir   (props changed)
   branches/html_cleanup/tools/dev/pbc_to_exe.pir
   branches/html_cleanup/tools/dev/perlcritic-cage.conf   (props changed)
   branches/html_cleanup/tools/dev/perlcritic.conf   (props changed)
   branches/html_cleanup/tools/dev/perltidy.conf   (props changed)
   branches/html_cleanup/tools/dev/update_copyright.pl   (props changed)
   branches/html_cleanup/tools/release/crow.pir   (props changed)
   branches/html_cleanup/tools/release/gen_release_info.pl   (props changed)
   branches/html_cleanup/tools/release/inc_ver.pir   (props changed)
   branches/html_cleanup/tools/release/release.json   (contents, props changed)
   branches/html_cleanup/tools/release/templates.json   (props changed)

Modified: branches/html_cleanup/CREDITS
==============================================================================
--- branches/html_cleanup/CREDITS	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/CREDITS	Wed Sep 22 03:35:47 2010	(r49232)
@@ -402,7 +402,7 @@
 
 N: Gerd Pokorra
 E: pokorra at uni-siegen.de
-D: Release manager for 1.9.0, 2.3.0 and 2.5.0
+D: Release manager for 1.9.0, 2.3.0, 2.5.0 and 2.8.0
 
 N: Goplat
 D: Win98 and other fixes.
@@ -644,7 +644,7 @@
 
 N: Luben Karavelov
 U: luben
-E: luben at unixsol.org
+E: karavelov at spnet.net
 
 N: Luca Barbato
 D: fix to make installable

Modified: branches/html_cleanup/ChangeLog
==============================================================================
--- branches/html_cleanup/ChangeLog	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/ChangeLog	Wed Sep 22 03:35:47 2010	(r49232)
@@ -1,8 +1,12 @@
 #1 $Id$
 
+2010.09.21     Gerd
+	* Released 2.8.0
+	See NEWS for more.
+
 2010.08.17     mikehh
-    * Released 2.7.0
-    See NEWS for more.
+	* Released 2.7.0
+	See NEWS for more.
 
 2010.07.10     coke
 	* Released 2.6.0
@@ -3865,9 +3869,9 @@
 2002-01-04 16:09  dan
 
 	* classes/: genclass.pl, perlarray.pmc, perlint.pmc, perlnum.pmc,
-	perlstring.pmc, perlundef.pmc:	- genclass.pl attempts to put $Id$
+	perlstring.pmc, perlundef.pmc:	- genclass.pl attempts to put the Id mark
 	into generated files
-	   but the $Id$ string gets mangled when it's committed.
+	   but the Id mark string gets mangled when it's committed.
 	   This patch fixes the existing .pmc files and fixes genclass.pl.
 
 	 - Makes capitalization in .pmc header match actual filenames

Modified: branches/html_cleanup/Configure.pl
==============================================================================
--- branches/html_cleanup/Configure.pl	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/Configure.pl	Wed Sep 22 03:35:47 2010	(r49232)
@@ -604,8 +604,6 @@
     init::optimize
     inter::shlibs
     inter::libparrot
-    inter::charset
-    inter::encoding
     inter::types
     auto::ops
     auto::alignptrs

Modified: branches/html_cleanup/DEPRECATED.pod
==============================================================================
--- branches/html_cleanup/DEPRECATED.pod	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/DEPRECATED.pod	Wed Sep 22 03:35:47 2010	(r49232)
@@ -71,13 +71,6 @@
 
 L<https://trac.parrot.org/parrot/ticket/103>
 
-=item NCI without signature ("raw" pointers) [eligible in 2.4]
-
-No equivalent functionality is promised. You shouldn't be using this. Here be
-segfaults.
-
-L<https://trac.parrot.org/parrot/ticket/1549>
-
 =item UnManagedStruct handling nested structure [eligible in 2.4]
 
 UnManagedStruct will be simplified to only support flat structures. This means
@@ -139,13 +132,10 @@
 These can be replaced by C<get_bool> and intval ops unless you're using them for
 things that aren't really logical ops (don't do that!).
 
-L<https://trac.parrot.org/parrot/ticket/1655>
-
-=item Method is_tty in PMCs derived from Handle [eligible in 2.7]
+Logical vtables are removed in r49012, and logical ops on PMCs are converted to
+use C<get_bool> internally. Rakudo seems to depend on logical ops on PMCs.
 
-Use isatty instead.
-
-L<https://trac.parrot.org/parrot/ticket/1689>
+L<https://trac.parrot.org/parrot/ticket/1655>
 
 =item Method getpid on ParrotInterpreter [experimental]
 
@@ -153,12 +143,35 @@
 
 L<https://trac.parrot.org/parrot/ticket/1564>
 
+=item Behavior of Parrot::Pmc2c::PMC::add_method() [eligible in 2.10]
+
+Duplicated vtable functions currently generate only a warning; after deadline,
+they will cause a C<die> and failure to build Parrot or any HLL
+using this method.
+
+L<http://trac.parrot.org/parrot/ticket/1785>
+
 =back
 
 =head1 Opcodes
 
 =over 4
 
+=item charset, charsetname, find_charset, trans_charset [eligible in 2.10]
+
+L<https://trac.parrot.org/parrot/ticket/1778>
+
+These opcodes will be removed. The corresponding encoding opcodes should be
+used instead.
+
+=item fixed_8 encoding [eligible in 2.10]
+
+L<https://trac.parrot.org/parrot/ticket/1778>
+
+The 'fixed_8' encoding is going away. Use 'ascii' instead. If you want to test
+for a fixed_8 encoding, you have to compare the encoding to 'ascii',
+'iso-8859-1' and 'binary' separately.
+
 =item open and close opcodes will be removed [eligible in 2.7]
 
 L<https://trac.parrot.org/parrot/ticket/1697>
@@ -383,12 +396,6 @@
 
 L<https://trac.parrot.org/parrot/ticket/1628>
 
-=item Parrot_get_runtime_prefix [eligible in 2.7]
-
-Use Parrot_get_runtime_path instead.
-
-L<https://trac.parrot.org/parrot/ticket/1191>
-
 =item Parrot_getpid [experimental]
 
 Get process id, experimental.

Modified: branches/html_cleanup/MANIFEST
==============================================================================
--- branches/html_cleanup/MANIFEST	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/MANIFEST	Wed Sep 22 03:35:47 2010	(r49232)
@@ -1,7 +1,7 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools/dev/mk_manifest_and_skip.pl Thu Jul  8 00:07:24 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Tue Sep 21 16:06:55 2010 UT
 #
 # See below for documentation on the format of this file.
 #
@@ -348,8 +348,6 @@
 config/init/install.pm                                      []
 config/init/manifest.pm                                     []
 config/init/optimize.pm                                     []
-config/inter/charset.pm                                     []
-config/inter/encoding.pm                                    []
 config/inter/lex.pm                                         []
 config/inter/libparrot.pm                                   []
 config/inter/make.pm                                        []
@@ -520,6 +518,7 @@
 examples/benchmarks/arriter.rb                              [examples]
 examples/benchmarks/arriter_o1.pir                          [examples]
 examples/benchmarks/bench_newp.pasm                         [examples]
+examples/benchmarks/boolean.pir                             [examples]
 examples/benchmarks/fib.cs                                  [examples]
 examples/benchmarks/fib.pir                                 [examples]
 examples/benchmarks/fib.pl                                  [examples]
@@ -611,11 +610,6 @@
 examples/io/http.pir                                        [examples]
 examples/io/httpd.pir                                       [examples]
 examples/io/post.pir                                        [examples]
-examples/japh/README                                        [examples]
-examples/japh/japh1.pasm                                    [examples]
-examples/japh/japh3.pasm                                    [examples]
-examples/japh/japh4.pasm                                    [examples]
-examples/japh/japh5.pasm                                    [examples]
 examples/json/postalcodes.pir                               [examples]
 examples/json/test.pir                                      [examples]
 examples/languages/abc/MAINTAINER                           [examples]
@@ -650,6 +644,8 @@
 examples/languages/squaak/src/Squaak/Compiler.pm            [examples]
 examples/languages/squaak/src/Squaak/Grammar.pm             [examples]
 examples/languages/squaak/src/Squaak/Runtime.pm             [examples]
+examples/languages/squaak/src/builtins                      [examples]
+examples/languages/squaak/src/parser                        [examples]
 examples/languages/squaak/src/squaak.pir                    [examples]
 examples/languages/squaak/t/00-sanity.t                     [examples]
 examples/languages/squaak/t/01-math.t                       [examples]
@@ -959,7 +955,6 @@
 include/parrot/caches.h                                     [main]include
 include/parrot/call.h                                       [main]include
 include/parrot/cclass.h                                     [main]include
-include/parrot/charset.h                                    [main]include
 include/parrot/compiler.h                                   [main]include
 include/parrot/context.h                                    [main]include
 include/parrot/core_types.h                                 [main]include
@@ -976,6 +971,7 @@
 include/parrot/global_setup.h                               [main]include
 include/parrot/hash.h                                       [main]include
 include/parrot/hll.h                                        [main]include
+include/parrot/imageio.h                                    [main]include
 include/parrot/imcc.h                                       [main]include
 include/parrot/interpreter.h                                [main]include
 include/parrot/io.h                                         [main]include
@@ -1147,6 +1143,7 @@
 lib/Pod/Simple/TranscodeSmart.pm                            []
 lib/Pod/Simple/XHTML.pm                                     []
 lib/Pod/Simple/XMLOutStream.pm                              []
+merge                                                       []
 parrotbug                                                   []
 runtime/parrot/bin/prove.pir                                [library]
 runtime/parrot/dynext/README                                []doc
@@ -1303,6 +1300,7 @@
 src/gc/malloc.c                                             []
 src/gc/malloc_trace.c                                       []
 src/gc/mark_sweep.c                                         []
+src/gc/string_gc.c                                          []
 src/gc/system.c                                             []
 src/global_setup.c                                          []
 src/hash.c                                                  []
@@ -1393,8 +1391,10 @@
 src/pmc/hashiterator.pmc                                    []
 src/pmc/hashiteratorkey.pmc                                 []
 src/pmc/imageio.pmc                                         []
+src/pmc/imageiofreeze.pmc                                   []
 src/pmc/imageiosize.pmc                                     []
 src/pmc/imageiostrings.pmc                                  []
+src/pmc/imageiothaw.pmc                                     []
 src/pmc/integer.pmc                                         []
 src/pmc/iterator.pmc                                        []
 src/pmc/key.pmc                                             []
@@ -1403,6 +1403,7 @@
 src/pmc/managedstruct.pmc                                   []
 src/pmc/multisub.pmc                                        []
 src/pmc/namespace.pmc                                       []
+src/pmc/nativepccmethod.pmc                                 []
 src/pmc/nci.pmc                                             []
 src/pmc/null.pmc                                            []
 src/pmc/object.pmc                                          []
@@ -1456,28 +1457,23 @@
 src/spf_render.c                                            []
 src/spf_vtable.c                                            []
 src/string/api.c                                            []
-src/string/charset.c                                        []
 src/string/charset/ascii.c                                  []
-src/string/charset/ascii.h                                  []
 src/string/charset/binary.c                                 []
-src/string/charset/binary.h                                 []
 src/string/charset/iso-8859-1.c                             []
-src/string/charset/iso-8859-1.h                             []
-src/string/charset/tables.c                                 []
-src/string/charset/tables.h                                 []
 src/string/charset/unicode.c                                []
-src/string/charset/unicode.h                                []
 src/string/encoding.c                                       []
+src/string/encoding/ascii.c                                 []
+src/string/encoding/binary.c                                []
 src/string/encoding/fixed_8.c                               []
-src/string/encoding/fixed_8.h                               []
+src/string/encoding/latin1.c                                []
+src/string/encoding/shared.c                                []
+src/string/encoding/shared.h                                []
+src/string/encoding/tables.c                                []
+src/string/encoding/tables.h                                []
 src/string/encoding/ucs2.c                                  []
-src/string/encoding/ucs2.h                                  []
 src/string/encoding/ucs4.c                                  []
-src/string/encoding/ucs4.h                                  []
 src/string/encoding/utf16.c                                 []
-src/string/encoding/utf16.h                                 []
 src/string/encoding/utf8.c                                  []
-src/string/encoding/utf8.h                                  []
 src/string/primitives.c                                     []
 src/string/unicode.h                                        []
 src/sub.c                                                   []
@@ -1694,7 +1690,6 @@
 t/dynpmc/subclass_with_pir_method.t                         [test]
 t/dynpmc/subproxy.t                                         [test]
 t/examples/catchall.t                                       [test]
-t/examples/japh.t                                           [test]
 t/examples/library.t                                        [test]
 t/examples/namespace.t                                      [test]
 t/examples/pasm.t                                           [test]
@@ -1843,6 +1838,7 @@
 t/op/string_cs.t                                            [test]
 t/op/string_mem.t                                           [test]
 t/op/stringu.t                                              [test]
+t/op/testlib/test_strings.pir                               [test]
 t/op/time.t                                                 [test]
 t/op/vivify.t                                               [test]
 t/perl/Parrot_Distribution.t                                [test]
@@ -2038,8 +2034,6 @@
 t/steps/init/install-01.t                                   [test]
 t/steps/init/manifest-01.t                                  [test]
 t/steps/init/optimize-01.t                                  [test]
-t/steps/inter/charset-01.t                                  [test]
-t/steps/inter/encoding-01.t                                 [test]
 t/steps/inter/lex-01.t                                      [test]
 t/steps/inter/lex-02.t                                      [test]
 t/steps/inter/lex-03.t                                      [test]

Modified: branches/html_cleanup/MANIFEST.SKIP
==============================================================================
--- branches/html_cleanup/MANIFEST.SKIP	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/MANIFEST.SKIP	Wed Sep 22 03:35:47 2010	(r49232)
@@ -1,6 +1,6 @@
 # ex: set ro:
 # $Id$
-# generated by tools/dev/mk_manifest_and_skip.pl Thu Aug 26 10:22:02 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Tue Sep 14 05:49:01 2010 UT
 #
 # This file should contain a transcript of the svn:ignore properties
 # of the directories in the Parrot subversion repository. (Needed for
@@ -845,6 +845,8 @@
 ^src/packfile/.*\.o/
 ^src/packfile/.*\.obj$
 ^src/packfile/.*\.obj/
+^src/packfile/.*\.str$
+^src/packfile/.*\.str/
 # generated from svn:ignore of 'src/pmc/'
 ^src/pmc/.*\.c$
 ^src/pmc/.*\.c/
@@ -1030,6 +1032,9 @@
 ^t/op/.*\.pir/
 ^t/op/.*_pbcexe.*$
 ^t/op/.*_pbcexe.*/
+# generated from svn:ignore of 't/op/testlib/'
+^t/op/testlib/.*\.pbc$
+^t/op/testlib/.*\.pbc/
 # generated from svn:ignore of 't/perl/'
 ^t/perl/Parrot_Test_1\.pasm$
 ^t/perl/Parrot_Test_1\.pasm/

Modified: branches/html_cleanup/MANIFEST.generated
==============================================================================
--- branches/html_cleanup/MANIFEST.generated	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/MANIFEST.generated	Wed Sep 22 03:35:47 2010	(r49232)
@@ -2,11 +2,11 @@
 # See tools/dev/install_files.pl for documentation on the
 # format of this file.
 # Please re-sort this file after *EVERY* modification
-blib/lib/libparrot.2.7.0.dylib                   [main]lib
+blib/lib/libparrot.2.8.0.dylib                   [main]lib
 blib/lib/libparrot.a                             [main]lib
 blib/lib/libparrot.dylib                         [main]lib
 blib/lib/libparrot.so                            [main]lib
-blib/lib/libparrot.so.2.7.0                      [main]lib
+blib/lib/libparrot.so.2.8.0                      [main]lib
 compilers/data_json/data_json.pbc                [data_json]
 config/gen/call_list/opengl.in                   []
 docs/ops/bit.pod                                 [doc]
@@ -69,9 +69,10 @@
 include/pmc/pmc_hash.h                           [devel]include
 include/pmc/pmc_hashiterator.h                   [devel]include
 include/pmc/pmc_hashiteratorkey.h                [devel]include
-include/pmc/pmc_imageio.h                        [devel]include
+include/pmc/pmc_imageiofreeze.h                  [devel]include
 include/pmc/pmc_imageiosize.h                    [devel]include
 include/pmc/pmc_imageiostrings.h                 [devel]include
+include/pmc/pmc_imageiothaw.h                    [devel]include
 include/pmc/pmc_integer.h                        [devel]include
 include/pmc/pmc_iterator.h                       [devel]include
 include/pmc/pmc_key.h                            [devel]include
@@ -80,6 +81,7 @@
 include/pmc/pmc_managedstruct.h                  [devel]include
 include/pmc/pmc_multisub.h                       [devel]include
 include/pmc/pmc_namespace.h                      [devel]include
+include/pmc/pmc_nativepccmethod.h                [devel]include
 include/pmc/pmc_nci.h                            [devel]include
 include/pmc/pmc_null.h                           [devel]include
 include/pmc/pmc_object.h                         [devel]include
@@ -363,9 +365,10 @@
 src/pmc/hash.dump                                [devel]src
 src/pmc/hashiterator.dump                        [devel]src
 src/pmc/hashiteratorkey.dump                     [devel]src
-src/pmc/imageio.dump                             [devel]src
+src/pmc/imageiofreeze.dump                       [devel]src
 src/pmc/imageiosize.dump                         [devel]src
 src/pmc/imageiostrings.dump                      [devel]src
+src/pmc/imageiothaw.dump                         [devel]src
 src/pmc/integer.dump                             [devel]src
 src/pmc/iterator.dump                            [devel]src
 src/pmc/key.dump                                 [devel]src
@@ -374,6 +377,7 @@
 src/pmc/managedstruct.dump                       [devel]src
 src/pmc/multisub.dump                            [devel]src
 src/pmc/namespace.dump                           [devel]src
+src/pmc/nativepccmethod.dump                     [devel]src
 src/pmc/nci.dump                                 [devel]src
 src/pmc/null.dump                                [devel]src
 src/pmc/object.dump                              [devel]src

Modified: branches/html_cleanup/NEWS
==============================================================================
--- branches/html_cleanup/NEWS	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/NEWS	Wed Sep 22 03:35:47 2010	(r49232)
@@ -1,5 +1,32 @@
 # $Id$
 
+New in 2.8.0
+- Core
+  + Inlined hashing and comparison functions
+  + Hash memory allocation moved from system malloc to lazy allocated
+  + Avoided infinite catching of exceptions while dying from exception
+  + Some svn fixes
+  + Added a check for duplicate vtable entries in PMCs
+  + Building Parrot with Perl 5.12 and gcc-4.5 / g++-4.5
+  + Eliminated cruft left over after dynops_mapping
+  + Improved charset and string encoding
+  + Better organisation of programs by reposition it to "tools/build" and "tools/release"
+  + Implemented Exception clone vtable function
+  + Added experimental function Parrot_getpid and getpid method
+  + --gc-threshold command line argument added, which controls the % of memory wasted by the GC
+  + Closed a lot of tickets
+- Testing
+  + Added more core pmc tests
+  + Rearranged some tests with C coverage
+  + We now have Smolder back, at http://smolder.parrot.org . Submit reports with "make smoke"
+  + skip_all implementation in Parrot's Test::More completed
+- GitMigration
+  + Set up a test site for github trac plugin at http://mksig.org/trac/
+  + Code of Trac plugin at github is on http://github.com/cotto/github-trac
+  + Parrot is now mirrored on github at http://github.com/parrot/parrot
+- Compilers
+  + Fixed problem with imcc HLL in load_bytecode difference between loading a pbc and compiling a pir
+ 
 New in 2.7.0
 - Core
   + cleanups in packfile and freeze/thaw handling

Modified: branches/html_cleanup/PBC_COMPAT
==============================================================================
--- branches/html_cleanup/PBC_COMPAT	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/PBC_COMPAT	Wed Sep 22 03:35:47 2010	(r49232)
@@ -28,6 +28,8 @@
 
 # please insert tab separated entries at the top of the list
 
+8.4	2010.09.19	cotto	add imageiothaw and imageiofreeze PMCs (plobsing)
+8.3	2010.09.15	luben	removed logical vtables
 8.2	2010.08.19	cotto	minor version bump for 2.7.0
 8.1	2010.08.10	plobsing	merge dynop_mapping branch
 8.0	2010.07.20	coke	released 2.6.0

Modified: branches/html_cleanup/README
==============================================================================
--- branches/html_cleanup/README	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/README	Wed Sep 22 03:35:47 2010	(r49232)
@@ -1,4 +1,4 @@
-This is Parrot, version 2.7.0
+This is Parrot, version 2.8.0
 ------------------------------
 
 Parrot is Copyright (C) 2001-2010, Parrot Foundation.

Modified: branches/html_cleanup/VERSION
==============================================================================
--- branches/html_cleanup/VERSION	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/VERSION	Wed Sep 22 03:35:47 2010	(r49232)
@@ -1 +1 @@
-2.7.0
+2.8.0

Modified: branches/html_cleanup/compilers/imcc/Rules.in
==============================================================================
--- branches/html_cleanup/compilers/imcc/Rules.in	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/imcc/Rules.in	Wed Sep 22 03:35:47 2010	(r49232)
@@ -10,6 +10,8 @@
     compilers/imcc/symreg.h \
     compilers/imcc/unit.h \
     $(INC_DIR)/oplib/ops.h \
+    $(INC_DIR)/oplib/core_ops.h \
+    $(INC_DIR)/runcore_api.h \
     $(PARROT_H_HEADERS)
 
 compilers/imcc/instructions$(O) : \
@@ -24,6 +26,8 @@
     compilers/imcc/symreg.h \
     compilers/imcc/unit.h \
     $(INC_DIR)/oplib/ops.h \
+    $(INC_DIR)/oplib/core_ops.h \
+    $(INC_DIR)/runcore_api.h \
     $(PARROT_H_HEADERS)
 
 compilers/imcc/pbc$(O) : \
@@ -37,6 +41,8 @@
     compilers/imcc/symreg.h \
     compilers/imcc/unit.h \
     $(INC_DIR)/oplib/ops.h \
+    $(INC_DIR)/oplib/core_ops.h \
+    $(INC_DIR)/runcore_api.h \
     $(PARROT_H_HEADERS) \
     include/pmc/pmc_sub.h
 
@@ -83,6 +89,8 @@
     compilers/imcc/symreg.h \
     compilers/imcc/unit.h \
     $(INC_DIR)/oplib/ops.h \
+    $(INC_DIR)/oplib/core_ops.h \
+    $(INC_DIR)/runcore_api.h \
     $(PARROT_H_HEADERS)
 
 compilers/imcc/debug$(O) : \
@@ -163,6 +171,8 @@
     compilers/imcc/symreg.h \
     compilers/imcc/unit.h \
     $(INC_DIR)/oplib/ops.h \
+    $(INC_DIR)/oplib/core_ops.h \
+    $(INC_DIR)/runcore_api.h \
     $(PARROT_H_HEADERS)
 	$(CC) $(CFLAGS) @optimize::compilers/imcc/optimizer.c@ @ccwarn::compilers/imcc/optimizer.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c compilers/imcc/optimizer.c
 

Modified: branches/html_cleanup/compilers/imcc/cfg.c
==============================================================================
--- branches/html_cleanup/compilers/imcc/cfg.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/imcc/cfg.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -29,6 +29,7 @@
 #include <string.h>
 #include "imc.h"
 #include "optimizer.h"
+#include "parrot/oplib/core_ops.h"
 
 /* HEADERIZER HFILE: compilers/imcc/cfg.h */
 
@@ -276,7 +277,7 @@
         ins->index   = ++i;
         ins->bbindex = unit->n_basic_blocks - 1;
 
-        if (ins->opnum == -1 && (ins->type & ITPCCSUB)) {
+        if (!ins->op && (ins->type & ITPCCSUB)) {
             if (first) {
                 if (ins->type & ITLABEL) {
                     expand_pcc_sub_ret(interp, unit, ins);
@@ -347,9 +348,10 @@
 {
     ASSERT_ARGS(bb_check_set_addr)
     const Instruction *ins;
+    op_lib_t *core_ops = PARROT_GET_CORE_OPLIB(interp);
 
     for (ins = unit->instructions; ins; ins = ins->next) {
-        if ((ins->opnum == PARROT_OP_set_addr_p_ic)
+        if ((ins->op == &core_ops->op_info_table[PARROT_OP_set_addr_p_ic])
         &&   STREQ(label->name, ins->symregs[1]->name)) {
             IMCC_debug(interp, DEBUG_CFG, "set_addr %s\n",
                     ins->symregs[1]->name);

Modified: branches/html_cleanup/compilers/imcc/debug.c
==============================================================================
--- branches/html_cleanup/compilers/imcc/debug.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/imcc/debug.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
  * $Id$
  */
 
@@ -200,10 +200,10 @@
 
         if (bb) {
             Parrot_io_fprintf(interp, Parrot_io_STDERR(interp),
-                    "%4i %4d %4d %4d\t%x\t%8x %4d %4d %4d  %c ",
+                    "%4i %4d %4d %4d\t%x\t%8x %4d %4d %4d  ",
                      ins->index, ins->line, bb->index, bb->loop_depth,
-                     ins->flags, (ins->type & ~ITEXT), ins->opnum,
-                     ins->opsize, pc, ins->type & ITEXT ? 'X' : ' ');
+                     ins->flags, ins->type, OP_INFO_OPNUM(ins->op),
+                     ins->opsize, pc);
         }
         else {
              fprintf(stderr, "\t");

Modified: branches/html_cleanup/compilers/imcc/imc.h
==============================================================================
--- branches/html_cleanup/compilers/imcc/imc.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/imcc/imc.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -196,8 +196,8 @@
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*error_message);
 
-PARROT_WARN_UNUSED_RESULT
-int check_op(PARROT_INTERP,
+void check_op(PARROT_INTERP,
+    ARGOUT(op_info_t **op_info),
     ARGOUT(char *fullname),
     ARGIN(const char *name),
     ARGIN(SymReg * const * r),
@@ -207,6 +207,8 @@
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
         __attribute__nonnull__(4)
+        __attribute__nonnull__(5)
+        FUNC_MODIFIES(*op_info)
         FUNC_MODIFIES(*fullname);
 
 PARROT_WARN_UNUSED_RESULT
@@ -316,27 +318,13 @@
 void register_compilers(PARROT_INTERP)
         __attribute__nonnull__(1);
 
-PARROT_WARN_UNUSED_RESULT
-int try_find_op(PARROT_INTERP,
-    ARGMOD(IMC_Unit *unit),
-    ARGIN(const char *name),
-    ARGMOD(SymReg **r),
-    int n,
-    int keyvec,
-    int emit)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        __attribute__nonnull__(4)
-        FUNC_MODIFIES(*unit)
-        FUNC_MODIFIES(*r);
-
 #define ASSERT_ARGS_imcc_compile_file __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(fullname) \
     , PARROT_ASSERT_ARG(error_message))
 #define ASSERT_ARGS_check_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(op_info) \
     , PARROT_ASSERT_ARG(fullname) \
     , PARROT_ASSERT_ARG(name) \
     , PARROT_ASSERT_ARG(r))
@@ -386,11 +374,6 @@
     , PARROT_ASSERT_ARG(args))
 #define ASSERT_ARGS_register_compilers __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_try_find_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(unit) \
-    , PARROT_ASSERT_ARG(name) \
-    , PARROT_ASSERT_ARG(r))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: compilers/imcc/parser_util.c */
 
@@ -562,7 +545,6 @@
     SymHash               ghash;
     jmp_buf               jump_buf;        /* The jump for error  handling */
     int                   IMCC_DEBUG;
-    int                   allocated;
     int                   cnr;
     int                   debug;
     int                   dont_optimize;

Modified: branches/html_cleanup/compilers/imcc/imcc.l
==============================================================================
--- branches/html_cleanup/compilers/imcc/imcc.l	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/imcc/imcc.l	Wed Sep 22 03:35:47 2010	(r49232)
@@ -1457,7 +1457,7 @@
             if (((r->pcc_sub->pragma & P_METHOD)
             ||   (IMCC_INFO(interp)->cur_unit->is_vtable_method))
             &&   !strcmp(text, "self")) {
-                valp->sr = mk_ident(interp, "self", 'P');
+                valp->sr = mk_ident(interp, "self", 'P', VTIDENTIFIER);
                 IMCC_INFO(interp)->cur_unit->type |= IMC_HAS_SELF;
                 return VAR;
             }

Modified: branches/html_cleanup/compilers/imcc/imcc.y
==============================================================================
--- branches/html_cleanup/compilers/imcc/imcc.y	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/imcc/imcc.y	Wed Sep 22 03:35:47 2010	(r49232)
@@ -206,21 +206,6 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
-static Instruction* mk_pmc_const(PARROT_INTERP,
-    ARGMOD(IMC_Unit *unit),
-    ARGIN(const char *type),
-    ARGMOD(SymReg *left),
-    ARGIN(const char *constant))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        __attribute__nonnull__(4)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*unit)
-        FUNC_MODIFIES(*left);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
 static Instruction* mk_pmc_const_named(PARROT_INTERP,
     ARGMOD(IMC_Unit *unit),
     ARGIN(const char *name),
@@ -323,12 +308,6 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(unit) \
     , PARROT_ASSERT_ARG(fmt))
-#define ASSERT_ARGS_mk_pmc_const __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(unit) \
-    , PARROT_ASSERT_ARG(type) \
-    , PARROT_ASSERT_ARG(left) \
-    , PARROT_ASSERT_ARG(constant))
 #define ASSERT_ARGS_mk_pmc_const_named __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(unit) \
@@ -422,70 +401,6 @@
 
 /*
 
-=item C<static Instruction* mk_pmc_const(PARROT_INTERP, IMC_Unit *unit, const
-char *type, SymReg *left, const char *constant)>
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static Instruction*
-mk_pmc_const(PARROT_INTERP, ARGMOD(IMC_Unit *unit), ARGIN(const char *type),
-        ARGMOD(SymReg *left), ARGIN(const char *constant))
-{
-    ASSERT_ARGS(mk_pmc_const)
-    const int type_enum = atoi(type);
-    const int ascii = (*constant == '\'' || *constant == '"');
-    SymReg *rhs;
-    SymReg *r[3];
-    char   *name;
-
-    if (left->type == VTADDRESS) {      /* IDENTIFIER */
-        if (IMCC_INFO(interp)->state->pasm_file) {
-            IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
-                        "Ident as PMC constant",
-                        " %s\n", left->name);
-        }
-        left->type = VTIDENTIFIER;
-        left->set = 'P';
-    }
-    r[0] = left;
-    if (ascii) {
-        /* strip delimiters */
-        name                   = mem_sys_strdup(constant + 1);
-        name[strlen(name) - 1] = 0;
-    }
-    else {
-        name = mem_sys_strdup(constant);
-    }
-
-    switch (type_enum) {
-      case enum_class_Sub:
-      case enum_class_Coroutine:
-        rhs = mk_const(interp, name, 'p');
-
-        if (!ascii)
-            rhs->type |= VT_ENCODED;
-
-        rhs->usage    |= U_FIXUP | U_SUBID_LOOKUP;
-        break;
-      default:
-        rhs = mk_const(interp, name, 'P');
-        break;
-    }
-
-    r[1]          = rhs;
-    rhs->pmc_type = type_enum;
-
-    mem_sys_free(name);
-
-    return INS(interp, unit, "set_p_pc", "", r, 2, 0, 1);
-}
-
-/*
-
 =item C<static Instruction* mk_pmc_const_named(PARROT_INTERP, IMC_Unit *unit,
 const char *name, SymReg *left, const char *constant)>
 
@@ -1251,14 +1166,7 @@
    ;
 
 pmc_const:
-     CONST { IMCC_INFO(interp)->is_def = 1; } INTC var_or_i '=' any_string
-         {
-           $$ = mk_pmc_const(interp, IMCC_INFO(interp)->cur_unit, $3, $4, $6);
-           mem_sys_free($6);
-           IMCC_INFO(interp)->is_def = 0;
-         }
-
-     | CONST { IMCC_INFO(interp)->is_def = 1; } STRINGC var_or_i '=' any_string
+     CONST { IMCC_INFO(interp)->is_def = 1; } STRINGC var_or_i '=' any_string
          {
            $$ = mk_pmc_const_named(interp, IMCC_INFO(interp)->cur_unit, $3, $4, $6);
            mem_sys_free($3);
@@ -1447,7 +1355,7 @@
            }
            if ($3 & VT_NAMED && !($3 & VT_FLAT) && !IMCC_INFO(interp)->adv_named_id)
                adv_named_set(interp, $2);
-           $$ = mk_ident(interp, $2, $1);
+           $$ = mk_ident(interp, $2, $1, VTIDENTIFIER);
            $$->type |= $3;
            mem_sys_free($2);
           }
@@ -1730,7 +1638,7 @@
          {
            IdList * const l = $4;
            SymReg *ignored;
-           ignored = mk_ident(interp, l->id, $3);
+           ignored = mk_ident(interp, l->id, $3, VTIDENTIFIER);
            UNUSED(ignored);
            IMCC_INFO(interp)->is_def = 0;
            $$ = 0;
@@ -1959,7 +1867,7 @@
            IdList *l = $4;
            while (l) {
                IdList *l1;
-               mk_ident(interp, l->id, $3);
+               mk_ident(interp, l->id, $3, VTIDENTIFIER);
                l1 = l;
                l  = l->next;
                mem_sys_free(l1->id);
@@ -2269,9 +2177,8 @@
    | ADV_NAMED                 { $$ = VT_NAMED;    }
    | ADV_CALL_SIG              { $$ = VT_CALL_SIG; }
 
-   /* don't free $3 here; adv_named_set uses the pointer directly */
-   | ADV_NAMED '(' USTRINGC ')' { adv_named_set_u(interp, $3); $$ = 0; }
-   | ADV_NAMED '(' STRINGC  ')' { adv_named_set(interp, $3);   $$ = 0; }
+   | ADV_NAMED '(' USTRINGC ')' { adv_named_set_u(interp, $3); mem_sys_free($3); $$ = 0; }
+   | ADV_NAMED '(' STRINGC  ')' { adv_named_set(interp, $3);   mem_sys_free($3); $$ = 0; }
    ;
 
 result:

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

Modified: branches/html_cleanup/compilers/imcc/imcparser.c
==============================================================================
--- branches/html_cleanup/compilers/imcc/imcparser.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/imcc/imcparser.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -9,25 +9,27 @@
  */
 /* HEADERIZER HFILE: none */
 /* HEADERIZER STOP */
-/* A Bison parser, made by GNU Bison 2.4.2.  */
+/* A Bison parser, made by GNU Bison 2.3.  */
 
 /* Skeleton implementation for Bison's Yacc-like parsers in C
-   
-      Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software
-   Foundation, Inc.
-   
-   This program is free software: you can redistribute it and/or modify
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
@@ -38,7 +40,7 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-   
+
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
@@ -56,7 +58,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.4.2"
+#define YYBISON_VERSION "2.3"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -64,20 +66,259 @@
 /* Pure parsers.  */
 #define YYPURE 1
 
-/* Push parsers.  */
-#define YYPUSH 0
-
-/* Pull parsers.  */
-#define YYPULL 1
-
 /* Using locations.  */
 #define YYLSP_NEEDED 0
 
 
 
-/* Copy the first part of user declarations.  */
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     LOW_PREC = 258,
+     PARAM = 259,
+     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,
+     ADV_INVOCANT = 277,
+     ADV_CALL_SIG = 278,
+     NAMESPACE = 279,
+     DOT_METHOD = 280,
+     SUB = 281,
+     SYM = 282,
+     LOCAL = 283,
+     LEXICAL = 284,
+     CONST = 285,
+     ANNOTATE = 286,
+     GLOBAL_CONST = 287,
+     PLUS_ASSIGN = 288,
+     MINUS_ASSIGN = 289,
+     MUL_ASSIGN = 290,
+     DIV_ASSIGN = 291,
+     CONCAT_ASSIGN = 292,
+     BAND_ASSIGN = 293,
+     BOR_ASSIGN = 294,
+     BXOR_ASSIGN = 295,
+     FDIV = 296,
+     FDIV_ASSIGN = 297,
+     MOD_ASSIGN = 298,
+     SHR_ASSIGN = 299,
+     SHL_ASSIGN = 300,
+     SHR_U_ASSIGN = 301,
+     SHIFT_LEFT = 302,
+     SHIFT_RIGHT = 303,
+     INTV = 304,
+     FLOATV = 305,
+     STRINGV = 306,
+     PMCV = 307,
+     LOG_XOR = 308,
+     RELOP_EQ = 309,
+     RELOP_NE = 310,
+     RELOP_GT = 311,
+     RELOP_GTE = 312,
+     RELOP_LT = 313,
+     RELOP_LTE = 314,
+     RESULT = 315,
+     RETURN = 316,
+     TAILCALL = 317,
+     YIELDT = 318,
+     GET_RESULTS = 319,
+     POW = 320,
+     SHIFT_RIGHT_U = 321,
+     LOG_AND = 322,
+     LOG_OR = 323,
+     COMMA = 324,
+     ESUB = 325,
+     DOTDOT = 326,
+     PCC_BEGIN = 327,
+     PCC_END = 328,
+     PCC_CALL = 329,
+     PCC_SUB = 330,
+     PCC_BEGIN_RETURN = 331,
+     PCC_END_RETURN = 332,
+     PCC_BEGIN_YIELD = 333,
+     PCC_END_YIELD = 334,
+     NCI_CALL = 335,
+     METH_CALL = 336,
+     INVOCANT = 337,
+     MAIN = 338,
+     LOAD = 339,
+     INIT = 340,
+     IMMEDIATE = 341,
+     POSTCOMP = 342,
+     METHOD = 343,
+     ANON = 344,
+     OUTER = 345,
+     NEED_LEX = 346,
+     MULTI = 347,
+     VTABLE_METHOD = 348,
+     LOADLIB = 349,
+     SUB_INSTANCE_OF = 350,
+     SUBID = 351,
+     NS_ENTRY = 352,
+     UNIQUE_REG = 353,
+     LABEL = 354,
+     EMIT = 355,
+     EOM = 356,
+     IREG = 357,
+     NREG = 358,
+     SREG = 359,
+     PREG = 360,
+     IDENTIFIER = 361,
+     REG = 362,
+     MACRO = 363,
+     ENDM = 364,
+     STRINGC = 365,
+     INTC = 366,
+     FLOATC = 367,
+     USTRINGC = 368,
+     PARROT_OP = 369,
+     VAR = 370,
+     LINECOMMENT = 371,
+     FILECOMMENT = 372,
+     DOT = 373,
+     CONCAT = 374
+   };
+#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 ADV_INVOCANT 277
+#define ADV_CALL_SIG 278
+#define NAMESPACE 279
+#define DOT_METHOD 280
+#define SUB 281
+#define SYM 282
+#define LOCAL 283
+#define LEXICAL 284
+#define CONST 285
+#define ANNOTATE 286
+#define GLOBAL_CONST 287
+#define PLUS_ASSIGN 288
+#define MINUS_ASSIGN 289
+#define MUL_ASSIGN 290
+#define DIV_ASSIGN 291
+#define CONCAT_ASSIGN 292
+#define BAND_ASSIGN 293
+#define BOR_ASSIGN 294
+#define BXOR_ASSIGN 295
+#define FDIV 296
+#define FDIV_ASSIGN 297
+#define MOD_ASSIGN 298
+#define SHR_ASSIGN 299
+#define SHL_ASSIGN 300
+#define SHR_U_ASSIGN 301
+#define SHIFT_LEFT 302
+#define SHIFT_RIGHT 303
+#define INTV 304
+#define FLOATV 305
+#define STRINGV 306
+#define PMCV 307
+#define LOG_XOR 308
+#define RELOP_EQ 309
+#define RELOP_NE 310
+#define RELOP_GT 311
+#define RELOP_GTE 312
+#define RELOP_LT 313
+#define RELOP_LTE 314
+#define RESULT 315
+#define RETURN 316
+#define TAILCALL 317
+#define YIELDT 318
+#define GET_RESULTS 319
+#define POW 320
+#define SHIFT_RIGHT_U 321
+#define LOG_AND 322
+#define LOG_OR 323
+#define COMMA 324
+#define ESUB 325
+#define DOTDOT 326
+#define PCC_BEGIN 327
+#define PCC_END 328
+#define PCC_CALL 329
+#define PCC_SUB 330
+#define PCC_BEGIN_RETURN 331
+#define PCC_END_RETURN 332
+#define PCC_BEGIN_YIELD 333
+#define PCC_END_YIELD 334
+#define NCI_CALL 335
+#define METH_CALL 336
+#define INVOCANT 337
+#define MAIN 338
+#define LOAD 339
+#define INIT 340
+#define IMMEDIATE 341
+#define POSTCOMP 342
+#define METHOD 343
+#define ANON 344
+#define OUTER 345
+#define NEED_LEX 346
+#define MULTI 347
+#define VTABLE_METHOD 348
+#define LOADLIB 349
+#define SUB_INSTANCE_OF 350
+#define SUBID 351
+#define NS_ENTRY 352
+#define UNIQUE_REG 353
+#define LABEL 354
+#define EMIT 355
+#define EOM 356
+#define IREG 357
+#define NREG 358
+#define SREG 359
+#define PREG 360
+#define IDENTIFIER 361
+#define REG 362
+#define MACRO 363
+#define ENDM 364
+#define STRINGC 365
+#define INTC 366
+#define FLOATC 367
+#define USTRINGC 368
+#define PARROT_OP 369
+#define VAR 370
+#define LINECOMMENT 371
+#define FILECOMMENT 372
+#define DOT 373
+#define CONCAT 374
+
 
-/* Line 189 of yacc.c  */
+
+
+/* Copy the first part of user declarations.  */
 #line 1 "compilers/imcc/imcc.y"
 
 /*
@@ -287,22 +528,7 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
-static Instruction* mk_pmc_const(PARROT_INTERP,
-    ARGMOD(IMC_Unit *unit),
-    ARGIN(const char *type),
-    ARGMOD(SymReg *left),
-    ARGIN(const char *constant))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        __attribute__nonnull__(4)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*unit)
-        FUNC_MODIFIES(*left);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static Instruction* mk_pmc_const_named(PARROT_INTERP,
+static Instruction* mk_pmc_const_named(PARROT_INTERP,
     ARGMOD(IMC_Unit *unit),
     ARGIN(const char *name),
     ARGMOD(SymReg *left),
@@ -404,12 +630,6 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(unit) \
     , PARROT_ASSERT_ARG(fmt))
-#define ASSERT_ARGS_mk_pmc_const __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(unit) \
-    , PARROT_ASSERT_ARG(type) \
-    , PARROT_ASSERT_ARG(left) \
-    , PARROT_ASSERT_ARG(constant))
 #define ASSERT_ARGS_mk_pmc_const_named __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(unit) \
@@ -503,70 +723,6 @@
 
 /*
 
-=item C<static Instruction* mk_pmc_const(PARROT_INTERP, IMC_Unit *unit, const
-char *type, SymReg *left, const char *constant)>
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static Instruction*
-mk_pmc_const(PARROT_INTERP, ARGMOD(IMC_Unit *unit), ARGIN(const char *type),
-        ARGMOD(SymReg *left), ARGIN(const char *constant))
-{
-    ASSERT_ARGS(mk_pmc_const)
-    const int type_enum = atoi(type);
-    const int ascii = (*constant == '\'' || *constant == '"');
-    SymReg *rhs;
-    SymReg *r[3];
-    char   *name;
-
-    if (left->type == VTADDRESS) {      /* IDENTIFIER */
-        if (IMCC_INFO(interp)->state->pasm_file) {
-            IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
-                        "Ident as PMC constant",
-                        " %s\n", left->name);
-        }
-        left->type = VTIDENTIFIER;
-        left->set = 'P';
-    }
-    r[0] = left;
-    if (ascii) {
-        /* strip delimiters */
-        name                   = mem_sys_strdup(constant + 1);
-        name[strlen(name) - 1] = 0;
-    }
-    else {
-        name = mem_sys_strdup(constant);
-    }
-
-    switch (type_enum) {
-      case enum_class_Sub:
-      case enum_class_Coroutine:
-        rhs = mk_const(interp, name, 'p');
-
-        if (!ascii)
-            rhs->type |= VT_ENCODED;
-
-        rhs->usage    |= U_FIXUP | U_SUBID_LOOKUP;
-        break;
-      default:
-        rhs = mk_const(interp, name, 'P');
-        break;
-    }
-
-    r[1]          = rhs;
-    rhs->pmc_type = type_enum;
-
-    mem_sys_free(name);
-
-    return INS(interp, unit, "set_p_pc", "", r, 2, 0, 1);
-}
-
-/*
-
 =item C<static Instruction* mk_pmc_const_named(PARROT_INTERP, IMC_Unit *unit,
 const char *name, SymReg *left, const char *constant)>
 
@@ -1108,345 +1264,90 @@
     ASSERT_ARGS(adv_named_set)
     if (IMCC_INFO(interp)->adv_named_id)
         IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
-                    "Named parameter with more than one name.\n");
-
-    IMCC_INFO(interp)->adv_named_id = mk_const(interp, name, 'S');
-}
-
-static void
-adv_named_set_u(PARROT_INTERP, ARGIN(const char *name))
-{
-    ASSERT_ARGS(adv_named_set_u)
-    if (IMCC_INFO(interp)->adv_named_id)
-        IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
-                    "Named parameter with more than one name.\n");
-
-    IMCC_INFO(interp)->adv_named_id = mk_const(interp, name, 'U');
-}
-
-/*
-
-=item C<static void do_loadlib(PARROT_INTERP, const char *lib)>
-
-=cut
-
-*/
-
-static void
-do_loadlib(PARROT_INTERP, ARGIN(const char *lib))
-{
-    ASSERT_ARGS(do_loadlib)
-    STRING * const s       = Parrot_str_unescape(interp, lib + 1, '"', NULL);
-    PMC    * const lib_pmc = Parrot_load_lib(interp, s, NULL);
-    if (PMC_IS_NULL(lib_pmc) || !VTABLE_get_bool(interp, lib_pmc)) {
-        IMCC_fataly(interp, EXCEPTION_LIBRARY_ERROR,
-            "loadlib directive could not find library `%S'", s);
-    }
-    Parrot_register_HLL_lib(interp, s);
-}
-
-/* HEADERIZER STOP */
-
-
-
-/* Line 189 of yacc.c  */
-#line 1143 "compilers/imcc/imcparser.c"
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
-
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     LOW_PREC = 258,
-     PARAM = 259,
-     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,
-     ADV_INVOCANT = 277,
-     ADV_CALL_SIG = 278,
-     NAMESPACE = 279,
-     DOT_METHOD = 280,
-     SUB = 281,
-     SYM = 282,
-     LOCAL = 283,
-     LEXICAL = 284,
-     CONST = 285,
-     ANNOTATE = 286,
-     GLOBAL_CONST = 287,
-     PLUS_ASSIGN = 288,
-     MINUS_ASSIGN = 289,
-     MUL_ASSIGN = 290,
-     DIV_ASSIGN = 291,
-     CONCAT_ASSIGN = 292,
-     BAND_ASSIGN = 293,
-     BOR_ASSIGN = 294,
-     BXOR_ASSIGN = 295,
-     FDIV = 296,
-     FDIV_ASSIGN = 297,
-     MOD_ASSIGN = 298,
-     SHR_ASSIGN = 299,
-     SHL_ASSIGN = 300,
-     SHR_U_ASSIGN = 301,
-     SHIFT_LEFT = 302,
-     SHIFT_RIGHT = 303,
-     INTV = 304,
-     FLOATV = 305,
-     STRINGV = 306,
-     PMCV = 307,
-     LOG_XOR = 308,
-     RELOP_EQ = 309,
-     RELOP_NE = 310,
-     RELOP_GT = 311,
-     RELOP_GTE = 312,
-     RELOP_LT = 313,
-     RELOP_LTE = 314,
-     RESULT = 315,
-     RETURN = 316,
-     TAILCALL = 317,
-     YIELDT = 318,
-     GET_RESULTS = 319,
-     POW = 320,
-     SHIFT_RIGHT_U = 321,
-     LOG_AND = 322,
-     LOG_OR = 323,
-     COMMA = 324,
-     ESUB = 325,
-     DOTDOT = 326,
-     PCC_BEGIN = 327,
-     PCC_END = 328,
-     PCC_CALL = 329,
-     PCC_SUB = 330,
-     PCC_BEGIN_RETURN = 331,
-     PCC_END_RETURN = 332,
-     PCC_BEGIN_YIELD = 333,
-     PCC_END_YIELD = 334,
-     NCI_CALL = 335,
-     METH_CALL = 336,
-     INVOCANT = 337,
-     MAIN = 338,
-     LOAD = 339,
-     INIT = 340,
-     IMMEDIATE = 341,
-     POSTCOMP = 342,
-     METHOD = 343,
-     ANON = 344,
-     OUTER = 345,
-     NEED_LEX = 346,
-     MULTI = 347,
-     VTABLE_METHOD = 348,
-     LOADLIB = 349,
-     SUB_INSTANCE_OF = 350,
-     SUBID = 351,
-     NS_ENTRY = 352,
-     UNIQUE_REG = 353,
-     LABEL = 354,
-     EMIT = 355,
-     EOM = 356,
-     IREG = 357,
-     NREG = 358,
-     SREG = 359,
-     PREG = 360,
-     IDENTIFIER = 361,
-     REG = 362,
-     MACRO = 363,
-     ENDM = 364,
-     STRINGC = 365,
-     INTC = 366,
-     FLOATC = 367,
-     USTRINGC = 368,
-     PARROT_OP = 369,
-     VAR = 370,
-     LINECOMMENT = 371,
-     FILECOMMENT = 372,
-     DOT = 373,
-     CONCAT = 374
-   };
-#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 ADV_INVOCANT 277
-#define ADV_CALL_SIG 278
-#define NAMESPACE 279
-#define DOT_METHOD 280
-#define SUB 281
-#define SYM 282
-#define LOCAL 283
-#define LEXICAL 284
-#define CONST 285
-#define ANNOTATE 286
-#define GLOBAL_CONST 287
-#define PLUS_ASSIGN 288
-#define MINUS_ASSIGN 289
-#define MUL_ASSIGN 290
-#define DIV_ASSIGN 291
-#define CONCAT_ASSIGN 292
-#define BAND_ASSIGN 293
-#define BOR_ASSIGN 294
-#define BXOR_ASSIGN 295
-#define FDIV 296
-#define FDIV_ASSIGN 297
-#define MOD_ASSIGN 298
-#define SHR_ASSIGN 299
-#define SHL_ASSIGN 300
-#define SHR_U_ASSIGN 301
-#define SHIFT_LEFT 302
-#define SHIFT_RIGHT 303
-#define INTV 304
-#define FLOATV 305
-#define STRINGV 306
-#define PMCV 307
-#define LOG_XOR 308
-#define RELOP_EQ 309
-#define RELOP_NE 310
-#define RELOP_GT 311
-#define RELOP_GTE 312
-#define RELOP_LT 313
-#define RELOP_LTE 314
-#define RESULT 315
-#define RETURN 316
-#define TAILCALL 317
-#define YIELDT 318
-#define GET_RESULTS 319
-#define POW 320
-#define SHIFT_RIGHT_U 321
-#define LOG_AND 322
-#define LOG_OR 323
-#define COMMA 324
-#define ESUB 325
-#define DOTDOT 326
-#define PCC_BEGIN 327
-#define PCC_END 328
-#define PCC_CALL 329
-#define PCC_SUB 330
-#define PCC_BEGIN_RETURN 331
-#define PCC_END_RETURN 332
-#define PCC_BEGIN_YIELD 333
-#define PCC_END_YIELD 334
-#define NCI_CALL 335
-#define METH_CALL 336
-#define INVOCANT 337
-#define MAIN 338
-#define LOAD 339
-#define INIT 340
-#define IMMEDIATE 341
-#define POSTCOMP 342
-#define METHOD 343
-#define ANON 344
-#define OUTER 345
-#define NEED_LEX 346
-#define MULTI 347
-#define VTABLE_METHOD 348
-#define LOADLIB 349
-#define SUB_INSTANCE_OF 350
-#define SUBID 351
-#define NS_ENTRY 352
-#define UNIQUE_REG 353
-#define LABEL 354
-#define EMIT 355
-#define EOM 356
-#define IREG 357
-#define NREG 358
-#define SREG 359
-#define PREG 360
-#define IDENTIFIER 361
-#define REG 362
-#define MACRO 363
-#define ENDM 364
-#define STRINGC 365
-#define INTC 366
-#define FLOATC 367
-#define USTRINGC 368
-#define PARROT_OP 369
-#define VAR 370
-#define LINECOMMENT 371
-#define FILECOMMENT 372
-#define DOT 373
-#define CONCAT 374
+                    "Named parameter with more than one name.\n");
+
+    IMCC_INFO(interp)->adv_named_id = mk_const(interp, name, 'S');
+}
 
+static void
+adv_named_set_u(PARROT_INTERP, ARGIN(const char *name))
+{
+    ASSERT_ARGS(adv_named_set_u)
+    if (IMCC_INFO(interp)->adv_named_id)
+        IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
+                    "Named parameter with more than one name.\n");
 
+    IMCC_INFO(interp)->adv_named_id = mk_const(interp, name, 'U');
+}
 
+/*
 
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
+=item C<static void do_loadlib(PARROT_INTERP, const char *lib)>
+
+=cut
+
+*/
+
+static void
+do_loadlib(PARROT_INTERP, ARGIN(const char *lib))
 {
+    ASSERT_ARGS(do_loadlib)
+    STRING * const s       = Parrot_str_unescape(interp, lib + 1, '"', NULL);
+    PMC    * const lib_pmc = Parrot_load_lib(interp, s, NULL);
+    if (PMC_IS_NULL(lib_pmc) || !VTABLE_get_bool(interp, lib_pmc)) {
+        IMCC_fataly(interp, EXCEPTION_LIBRARY_ERROR,
+            "loadlib directive could not find library `%S'", s);
+    }
+    Parrot_register_HLL_lib(interp, s);
+}
+
+/* HEADERIZER STOP */
+
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
 
-/* Line 214 of yacc.c  */
-#line 1071 "compilers/imcc/imcc.y"
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
 
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 986 "compilers/imcc/imcc.y"
+{
     IdList * idlist;
     int t;
     char * s;
     SymReg * sr;
     Instruction *i;
-
-
-
-/* Line 214 of yacc.c  */
-#line 1427 "compilers/imcc/imcparser.c"
-} YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
+}
+/* Line 187 of yacc.c.  */
+#line 1327 "compilers/imcc/imcparser.c"
+	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
 #endif
 
 
+
 /* Copy the second part of user declarations.  */
 
 
-/* Line 264 of yacc.c  */
-#line 1439 "compilers/imcc/imcparser.c"
+/* Line 216 of yacc.c.  */
+#line 1340 "compilers/imcc/imcparser.c"
 
 #ifdef short
 # undef short
@@ -1496,7 +1397,7 @@
 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
 
 #ifndef YY_
-# if defined YYENABLE_NLS && YYENABLE_NLS
+# if YYENABLE_NLS
 #  if ENABLE_NLS
 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
@@ -1521,14 +1422,14 @@
 #if (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 static int
-YYID (int yyi)
+YYID (int i)
 #else
 static int
-YYID (yyi)
-    int yyi;
+YYID (i)
+    int i;
 #endif
 {
-  return yyi;
+  return i;
 }
 #endif
 
@@ -1609,9 +1510,9 @@
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  yytype_int16 yyss_alloc;
-  YYSTYPE yyvs_alloc;
-};
+  yytype_int16 yyss;
+  YYSTYPE yyvs;
+  };
 
 /* The size of the maximum gap between one aligned stack and the next.  */
 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
@@ -1645,12 +1546,12 @@
    elements in the stack, and YYPTR gives the new location of the
    stack.  Advance YYPTR to a properly aligned location for the next
    stack.  */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
+# define YYSTACK_RELOCATE(Stack)					\
     do									\
       {									\
 	YYSIZE_T yynewbytes;						\
-	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
-	Stack = &yyptr->Stack_alloc;					\
+	YYCOPY (&yyptr->Stack, Stack, yysize);				\
+	Stack = &yyptr->Stack;						\
 	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
 	yyptr += yynewbytes / sizeof (*yyptr);				\
       }									\
@@ -1661,16 +1562,16 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  31
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   662
+#define YYLAST   664
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  136
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  129
+#define YYNNTS  128
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  342
+#define YYNRULES  340
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  545
+#define YYNSTATES  540
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -1729,181 +1630,180 @@
 {
        0,     0,     3,     5,     7,    10,    12,    14,    16,    18,
       21,    23,    25,    27,    30,    34,    40,    44,    49,    52,
-      53,    60,    61,    68,    69,    76,    78,    80,    82,    85,
-      89,    92,    94,    96,    98,   100,   102,   103,   107,   108,
-     113,   116,   121,   122,   124,   125,   130,   131,   133,   137,
-     141,   144,   145,   148,   150,   154,   155,   156,   157,   168,
-     169,   172,   176,   177,   181,   185,   190,   195,   200,   202,
-     207,   209,   214,   216,   221,   226,   228,   233,   234,   238,
-     240,   242,   244,   246,   248,   250,   252,   256,   257,   259,
-     260,   270,   271,   274,   275,   279,   280,   282,   284,   287,
-     289,   291,   293,   295,   297,   299,   301,   303,   305,   307,
-     309,   311,   313,   315,   321,   325,   329,   333,   337,   343,
-     349,   350,   354,   357,   358,   362,   366,   367,   372,   373,
-     376,   378,   380,   382,   384,   389,   394,   396,   398,   399,
-     405,   407,   408,   414,   415,   418,   422,   423,   426,   430,
-     434,   438,   439,   445,   447,   449,   450,   452,   456,   460,
-     466,   468,   471,   472,   475,   478,   480,   482,   484,   486,
-     487,   489,   492,   494,   496,   500,   503,   505,   509,   512,
-     513,   515,   517,   519,   520,   525,   530,   535,   536,   543,
-     545,   546,   553,   556,   559,   562,   565,   567,   569,   571,
-     573,   574,   576,   578,   580,   582,   586,   591,   597,   604,
-     611,   615,   616,   626,   628,   630,   632,   636,   638,   640,
-     642,   644,   646,   648,   650,   652,   654,   656,   658,   660,
-     662,   664,   666,   668,   670,   672,   674,   676,   678,   680,
-     682,   684,   686,   688,   689,   695,   699,   701,   703,   705,
-     707,   709,   711,   713,   715,   717,   719,   721,   723,   725,
-     730,   732,   734,   736,   738,   742,   746,   750,   754,   755,
-     761,   762,   766,   768,   774,   778,   782,   785,   786,   789,
-     791,   793,   795,   800,   805,   808,   812,   818,   820,   824,
-     825,   827,   829,   836,   842,   847,   852,   859,   865,   867,
-     869,   871,   873,   875,   877,   879,   881,   883,   885,   886,
-     888,   892,   894,   896,   901,   905,   907,   909,   911,   913,
-     915,   917,   919,   921,   923,   925,   927,   928,   931,   932,
-     935,   937,   941,   943,   945,   947,   949,   951,   953,   955,
-     957,   959,   961
+      53,    60,    61,    68,    70,    72,    74,    77,    81,    84,
+      86,    88,    90,    92,    94,    95,    99,   100,   105,   108,
+     113,   114,   116,   117,   122,   123,   125,   129,   133,   136,
+     137,   140,   142,   146,   147,   148,   149,   160,   161,   164,
+     168,   169,   173,   177,   182,   187,   192,   194,   199,   201,
+     206,   208,   213,   218,   220,   225,   226,   230,   232,   234,
+     236,   238,   240,   242,   244,   248,   249,   251,   252,   262,
+     263,   266,   267,   271,   272,   274,   276,   279,   281,   283,
+     285,   287,   289,   291,   293,   295,   297,   299,   301,   303,
+     305,   307,   313,   317,   321,   325,   329,   335,   341,   342,
+     346,   349,   350,   354,   358,   359,   364,   365,   368,   370,
+     372,   374,   376,   381,   386,   388,   390,   391,   397,   399,
+     400,   406,   407,   410,   414,   415,   418,   422,   426,   430,
+     431,   437,   439,   441,   442,   444,   448,   452,   458,   460,
+     463,   464,   467,   470,   472,   474,   476,   478,   479,   481,
+     484,   486,   488,   492,   495,   497,   501,   504,   505,   507,
+     509,   511,   512,   517,   522,   527,   528,   535,   537,   538,
+     545,   548,   551,   554,   557,   559,   561,   563,   565,   566,
+     568,   570,   572,   574,   578,   583,   589,   596,   603,   607,
+     608,   618,   620,   622,   624,   628,   630,   632,   634,   636,
+     638,   640,   642,   644,   646,   648,   650,   652,   654,   656,
+     658,   660,   662,   664,   666,   668,   670,   672,   674,   676,
+     678,   680,   681,   687,   691,   693,   695,   697,   699,   701,
+     703,   705,   707,   709,   711,   713,   715,   717,   722,   724,
+     726,   728,   730,   734,   738,   742,   746,   747,   753,   754,
+     758,   760,   766,   770,   774,   777,   778,   781,   783,   785,
+     787,   792,   797,   800,   804,   810,   812,   816,   817,   819,
+     821,   828,   834,   839,   844,   851,   857,   859,   861,   863,
+     865,   867,   869,   871,   873,   875,   877,   878,   880,   884,
+     886,   888,   893,   897,   899,   901,   903,   905,   907,   909,
+     911,   913,   915,   917,   919,   920,   923,   924,   927,   929,
+     933,   935,   937,   939,   941,   943,   945,   947,   949,   951,
+     953
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
      137,     0,    -1,   138,    -1,   139,    -1,   138,   139,    -1,
-     159,    -1,   144,    -1,   164,    -1,   156,    -1,   109,     4,
+     158,    -1,   144,    -1,   163,    -1,   155,    -1,   109,     4,
       -1,   140,    -1,   141,    -1,     4,    -1,   143,     4,    -1,
       95,   111,     4,    -1,     8,   112,    70,   111,     4,    -1,
-       9,   111,     4,    -1,    32,   111,    70,   264,    -1,     7,
-     111,    -1,    -1,    31,   145,   223,   107,   121,   264,    -1,
-      -1,    31,   147,   112,   254,   121,   149,    -1,    -1,    31,
-     148,   111,   254,   121,   149,    -1,   111,    -1,   114,    -1,
-     151,    -1,   150,   151,    -1,   212,   152,     4,    -1,   109,
-       4,    -1,   118,    -1,   117,    -1,   159,    -1,   146,    -1,
-     140,    -1,    -1,   153,   115,   155,    -1,    -1,    76,   154,
-     186,   100,    -1,    14,   255,    -1,    30,   111,    70,   108,
-      -1,    -1,   248,    -1,    -1,   101,   157,   158,   102,    -1,
-      -1,   150,    -1,    25,   160,     4,    -1,   122,   161,   123,
-      -1,   122,   123,    -1,    -1,   162,   163,    -1,   263,    -1,
-     163,   124,   263,    -1,    -1,    -1,    -1,    27,   165,   251,
-     166,   186,     4,   167,   168,   181,    71,    -1,    -1,   168,
-       4,    -1,   168,   169,     4,    -1,    -1,     5,   170,   171,
-      -1,   223,   107,   195,    -1,    93,   125,   179,   126,    -1,
-      91,   125,   111,   126,    -1,    91,   125,   107,   126,    -1,
-      94,    -1,    94,   125,   111,   126,    -1,    89,    -1,    89,
-     125,   149,   126,    -1,    98,    -1,    98,   125,   149,   126,
-      -1,    96,   125,   111,   126,    -1,    97,    -1,    97,   125,
-     149,   126,    -1,    -1,   179,    70,   180,    -1,   180,    -1,
-      50,    -1,    51,    -1,    53,    -1,    52,    -1,   107,    -1,
-     111,    -1,   122,   256,   123,    -1,    -1,   209,    -1,    -1,
-      73,     4,   183,   190,   185,   189,   184,   192,    74,    -1,
-      -1,   214,     4,    -1,    -1,    83,   255,     4,    -1,    -1,
-     187,    -1,   188,    -1,   187,   188,    -1,    85,    -1,    86,
-      -1,    84,    -1,    87,    -1,    88,    -1,    90,    -1,    92,
-      -1,   172,    -1,   173,    -1,   174,    -1,   175,    -1,   176,
-      -1,   177,    -1,   178,    -1,    75,   255,    70,   255,     4,
-      -1,    75,   255,     4,    -1,    81,   255,     4,    -1,    82,
-     247,     4,    -1,    82,   111,     4,    -1,    82,   247,    70,
-     255,     4,    -1,    82,   111,    70,   255,     4,    -1,    -1,
-     190,   191,     4,    -1,    11,   237,    -1,    -1,   192,   193,
-       4,    -1,    61,   247,   195,    -1,    -1,    29,   194,   223,
-     217,    -1,    -1,   195,   196,    -1,    18,    -1,    19,    -1,
-      20,    -1,    21,    -1,    21,   125,   111,   126,    -1,    21,
-     125,   114,   126,    -1,    99,    -1,    24,    -1,    -1,    77,
-       4,   198,   201,    78,    -1,   205,    -1,    -1,    79,     4,
-     200,   202,    80,    -1,    -1,   201,     4,    -1,   201,   203,
-       4,    -1,    -1,   202,     4,    -1,   202,   204,     4,    -1,
-      15,   255,   238,    -1,    16,   255,   238,    -1,    -1,   207,
-     125,   206,   208,   126,    -1,    62,    -1,    64,    -1,    -1,
-     237,    -1,   111,    22,   255,    -1,   208,    70,   237,    -1,
-     208,    70,   111,    22,   255,    -1,   211,    -1,   209,   211,
-      -1,    -1,   210,   215,    -1,   109,     4,    -1,   118,    -1,
-     117,    -1,   141,    -1,   142,    -1,    -1,   213,    -1,   213,
-     214,    -1,   214,    -1,   100,    -1,   212,   219,     4,    -1,
-       1,     4,    -1,   217,    -1,   216,    70,   217,    -1,   107,
-     218,    -1,    -1,    99,    -1,   224,    -1,   242,    -1,    -1,
-      29,   220,   223,   216,    -1,    30,   111,    70,   247,    -1,
-      30,   114,    70,   247,    -1,    -1,    31,   221,   223,   107,
-     121,   264,    -1,   146,    -1,    -1,    33,   222,   223,   107,
-     121,   264,    -1,    63,   234,    -1,    10,   253,    -1,   115,
-     248,    -1,    14,   255,    -1,   234,    -1,   182,    -1,   197,
-      -1,   199,    -1,    -1,    50,    -1,    51,    -1,    52,    -1,
-      53,    -1,   247,   121,   255,    -1,   247,   121,   226,   255,
-      -1,   247,   121,   255,   227,   255,    -1,   247,   121,   255,
-     122,   256,   123,    -1,   247,   122,   256,   123,   121,   255,
-      -1,   247,   121,   234,    -1,    -1,   125,   225,   241,   126,
-     121,   233,   125,   236,   126,    -1,   228,    -1,   230,    -1,
-     232,    -1,   247,   121,    14,    -1,   127,    -1,   128,    -1,
-     129,    -1,   129,    -1,   130,    -1,   131,    -1,   132,    -1,
-     133,    -1,    42,    -1,    66,    -1,   120,    -1,    55,    -1,
-      56,    -1,    57,    -1,    58,    -1,    59,    -1,    60,    -1,
-      48,    -1,    49,    -1,    67,    -1,    68,    -1,    69,    -1,
-      54,    -1,   134,    -1,   135,    -1,   128,    -1,    -1,    65,
-     229,   125,   241,   126,    -1,   247,   231,   255,    -1,    34,
-      -1,    35,    -1,    36,    -1,    37,    -1,    44,    -1,    43,
-      -1,    38,    -1,    39,    -1,    40,    -1,    41,    -1,    45,
-      -1,    46,    -1,    47,    -1,   247,   121,   115,   155,    -1,
-     107,    -1,   111,    -1,   114,    -1,   247,    -1,   247,   119,
-     252,    -1,   247,   119,   114,    -1,   247,   119,   111,    -1,
-     247,   119,   247,    -1,    -1,   233,   235,   125,   236,   126,
-      -1,    -1,   236,    70,   237,    -1,   237,    -1,   236,    70,
-     111,    22,   255,    -1,   255,    22,   255,    -1,   111,    22,
-     255,    -1,   255,   238,    -1,    -1,   238,   239,    -1,    17,
-      -1,    21,    -1,    24,    -1,    21,   125,   114,   126,    -1,
-      21,   125,   111,   126,    -1,   247,   195,    -1,   241,    70,
-     240,    -1,   241,    70,   111,    22,   247,    -1,   240,    -1,
-     111,    22,   247,    -1,    -1,   244,    -1,   243,    -1,    13,
-     255,   246,   255,    10,   253,    -1,    13,    14,   255,    10,
-     253,    -1,    13,   255,   245,   253,    -1,    12,   255,   245,
-     253,    -1,    12,   255,   246,   255,    10,   253,    -1,    12,
-      14,   255,    10,   253,    -1,    70,    -1,    10,    -1,    55,
-      -1,    56,    -1,    57,    -1,    58,    -1,    59,    -1,    60,
-      -1,   116,    -1,   262,    -1,    -1,   249,    -1,   249,    70,
-     250,    -1,   250,    -1,   254,    -1,   247,   122,   256,   123,
-      -1,   122,   258,   123,    -1,   252,    -1,   111,    -1,   114,
-      -1,   107,    -1,   115,    -1,   107,    -1,   115,    -1,   253,
-      -1,   255,    -1,   247,    -1,   264,    -1,    -1,   257,   260,
-      -1,    -1,   259,   260,    -1,   261,    -1,   260,   124,   261,
-      -1,   255,    -1,   103,    -1,   104,    -1,   105,    -1,   106,
-      -1,   108,    -1,   111,    -1,   114,    -1,   112,    -1,   113,
-      -1,   263,    -1
+       9,   111,     4,    -1,    32,   111,    70,   263,    -1,     7,
+     111,    -1,    -1,    31,   145,   222,   107,   121,   263,    -1,
+      -1,    31,   147,   111,   253,   121,   148,    -1,   111,    -1,
+     114,    -1,   150,    -1,   149,   150,    -1,   211,   151,     4,
+      -1,   109,     4,    -1,   118,    -1,   117,    -1,   158,    -1,
+     146,    -1,   140,    -1,    -1,   152,   115,   154,    -1,    -1,
+      76,   153,   185,   100,    -1,    14,   254,    -1,    30,   111,
+      70,   108,    -1,    -1,   247,    -1,    -1,   101,   156,   157,
+     102,    -1,    -1,   149,    -1,    25,   159,     4,    -1,   122,
+     160,   123,    -1,   122,   123,    -1,    -1,   161,   162,    -1,
+     262,    -1,   162,   124,   262,    -1,    -1,    -1,    -1,    27,
+     164,   250,   165,   185,     4,   166,   167,   180,    71,    -1,
+      -1,   167,     4,    -1,   167,   168,     4,    -1,    -1,     5,
+     169,   170,    -1,   222,   107,   194,    -1,    93,   125,   178,
+     126,    -1,    91,   125,   111,   126,    -1,    91,   125,   107,
+     126,    -1,    94,    -1,    94,   125,   111,   126,    -1,    89,
+      -1,    89,   125,   148,   126,    -1,    98,    -1,    98,   125,
+     148,   126,    -1,    96,   125,   111,   126,    -1,    97,    -1,
+      97,   125,   148,   126,    -1,    -1,   178,    70,   179,    -1,
+     179,    -1,    50,    -1,    51,    -1,    53,    -1,    52,    -1,
+     107,    -1,   111,    -1,   122,   255,   123,    -1,    -1,   208,
+      -1,    -1,    73,     4,   182,   189,   184,   188,   183,   191,
+      74,    -1,    -1,   213,     4,    -1,    -1,    83,   254,     4,
+      -1,    -1,   186,    -1,   187,    -1,   186,   187,    -1,    85,
+      -1,    86,    -1,    84,    -1,    87,    -1,    88,    -1,    90,
+      -1,    92,    -1,   171,    -1,   172,    -1,   173,    -1,   174,
+      -1,   175,    -1,   176,    -1,   177,    -1,    75,   254,    70,
+     254,     4,    -1,    75,   254,     4,    -1,    81,   254,     4,
+      -1,    82,   246,     4,    -1,    82,   111,     4,    -1,    82,
+     246,    70,   254,     4,    -1,    82,   111,    70,   254,     4,
+      -1,    -1,   189,   190,     4,    -1,    11,   236,    -1,    -1,
+     191,   192,     4,    -1,    61,   246,   194,    -1,    -1,    29,
+     193,   222,   216,    -1,    -1,   194,   195,    -1,    18,    -1,
+      19,    -1,    20,    -1,    21,    -1,    21,   125,   111,   126,
+      -1,    21,   125,   114,   126,    -1,    99,    -1,    24,    -1,
+      -1,    77,     4,   197,   200,    78,    -1,   204,    -1,    -1,
+      79,     4,   199,   201,    80,    -1,    -1,   200,     4,    -1,
+     200,   202,     4,    -1,    -1,   201,     4,    -1,   201,   203,
+       4,    -1,    15,   254,   237,    -1,    16,   254,   237,    -1,
+      -1,   206,   125,   205,   207,   126,    -1,    62,    -1,    64,
+      -1,    -1,   236,    -1,   111,    22,   254,    -1,   207,    70,
+     236,    -1,   207,    70,   111,    22,   254,    -1,   210,    -1,
+     208,   210,    -1,    -1,   209,   214,    -1,   109,     4,    -1,
+     118,    -1,   117,    -1,   141,    -1,   142,    -1,    -1,   212,
+      -1,   212,   213,    -1,   213,    -1,   100,    -1,   211,   218,
+       4,    -1,     1,     4,    -1,   216,    -1,   215,    70,   216,
+      -1,   107,   217,    -1,    -1,    99,    -1,   223,    -1,   241,
+      -1,    -1,    29,   219,   222,   215,    -1,    30,   111,    70,
+     246,    -1,    30,   114,    70,   246,    -1,    -1,    31,   220,
+     222,   107,   121,   263,    -1,   146,    -1,    -1,    33,   221,
+     222,   107,   121,   263,    -1,    63,   233,    -1,    10,   252,
+      -1,   115,   247,    -1,    14,   254,    -1,   233,    -1,   181,
+      -1,   196,    -1,   198,    -1,    -1,    50,    -1,    51,    -1,
+      52,    -1,    53,    -1,   246,   121,   254,    -1,   246,   121,
+     225,   254,    -1,   246,   121,   254,   226,   254,    -1,   246,
+     121,   254,   122,   255,   123,    -1,   246,   122,   255,   123,
+     121,   254,    -1,   246,   121,   233,    -1,    -1,   125,   224,
+     240,   126,   121,   232,   125,   235,   126,    -1,   227,    -1,
+     229,    -1,   231,    -1,   246,   121,    14,    -1,   127,    -1,
+     128,    -1,   129,    -1,   129,    -1,   130,    -1,   131,    -1,
+     132,    -1,   133,    -1,    42,    -1,    66,    -1,   120,    -1,
+      55,    -1,    56,    -1,    57,    -1,    58,    -1,    59,    -1,
+      60,    -1,    48,    -1,    49,    -1,    67,    -1,    68,    -1,
+      69,    -1,    54,    -1,   134,    -1,   135,    -1,   128,    -1,
+      -1,    65,   228,   125,   240,   126,    -1,   246,   230,   254,
+      -1,    34,    -1,    35,    -1,    36,    -1,    37,    -1,    44,
+      -1,    43,    -1,    38,    -1,    39,    -1,    40,    -1,    41,
+      -1,    45,    -1,    46,    -1,    47,    -1,   246,   121,   115,
+     154,    -1,   107,    -1,   111,    -1,   114,    -1,   246,    -1,
+     246,   119,   251,    -1,   246,   119,   114,    -1,   246,   119,
+     111,    -1,   246,   119,   246,    -1,    -1,   232,   234,   125,
+     235,   126,    -1,    -1,   235,    70,   236,    -1,   236,    -1,
+     235,    70,   111,    22,   254,    -1,   254,    22,   254,    -1,
+     111,    22,   254,    -1,   254,   237,    -1,    -1,   237,   238,
+      -1,    17,    -1,    21,    -1,    24,    -1,    21,   125,   114,
+     126,    -1,    21,   125,   111,   126,    -1,   246,   194,    -1,
+     240,    70,   239,    -1,   240,    70,   111,    22,   246,    -1,
+     239,    -1,   111,    22,   246,    -1,    -1,   243,    -1,   242,
+      -1,    13,   254,   245,   254,    10,   252,    -1,    13,    14,
+     254,    10,   252,    -1,    13,   254,   244,   252,    -1,    12,
+     254,   244,   252,    -1,    12,   254,   245,   254,    10,   252,
+      -1,    12,    14,   254,    10,   252,    -1,    70,    -1,    10,
+      -1,    55,    -1,    56,    -1,    57,    -1,    58,    -1,    59,
+      -1,    60,    -1,   116,    -1,   261,    -1,    -1,   248,    -1,
+     248,    70,   249,    -1,   249,    -1,   253,    -1,   246,   122,
+     255,   123,    -1,   122,   257,   123,    -1,   251,    -1,   111,
+      -1,   114,    -1,   107,    -1,   115,    -1,   107,    -1,   115,
+      -1,   252,    -1,   254,    -1,   246,    -1,   263,    -1,    -1,
+     256,   259,    -1,    -1,   258,   259,    -1,   260,    -1,   259,
+     124,   260,    -1,   254,    -1,   103,    -1,   104,    -1,   105,
+      -1,   106,    -1,   108,    -1,   111,    -1,   114,    -1,   112,
+      -1,   113,    -1,   262,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,  1166,  1166,  1170,  1171,  1175,  1176,  1177,  1183,  1189,
-    1190,  1191,  1192,  1196,  1197,  1206,  1212,  1220,  1232,  1245,
-    1245,  1254,  1254,  1261,  1261,  1270,  1271,  1275,  1276,  1280,
-    1281,  1282,  1283,  1284,  1285,  1286,  1289,  1289,  1298,  1297,
-    1310,  1314,  1327,  1331,  1335,  1335,  1347,  1349,  1353,  1368,
-    1369,  1373,  1373,  1385,  1386,  1395,  1399,  1403,  1394,  1415,
-    1416,  1417,  1430,  1430,  1434,  1459,  1463,  1469,  1478,  1484,
-    1493,  1499,  1508,  1514,  1523,  1531,  1536,  1547,  1550,  1555,
-    1563,  1564,  1565,  1566,  1567,  1578,  1589,  1592,  1594,  1599,
-    1598,  1629,  1630,  1634,  1635,  1639,  1640,  1644,  1645,  1649,
-    1650,  1651,  1652,  1653,  1654,  1655,  1656,  1657,  1658,  1659,
-    1660,  1661,  1662,  1666,  1671,  1675,  1679,  1683,  1687,  1692,
-    1701,  1702,  1714,  1719,  1720,  1728,  1729,  1729,  1741,  1742,
-    1746,  1747,  1748,  1749,  1750,  1751,  1752,  1753,  1758,  1758,
-    1761,  1769,  1769,  1775,  1776,  1781,  1789,  1790,  1795,  1803,
-    1807,  1812,  1811,  1824,  1825,  1829,  1830,  1840,  1845,  1855,
-    1864,  1865,  1877,  1881,  1883,  1884,  1885,  1886,  1887,  1891,
-    1892,  1896,  1897,  1901,  1912,  1913,  1924,  1931,  1940,  1948,
-    1950,  1955,  1956,  1957,  1957,  1970,  1987,  2000,  2000,  2007,
-    2008,  2008,  2014,  2020,  2024,  2036,  2037,  2038,  2039,  2040,
-    2041,  2045,  2046,  2047,  2048,  2052,  2054,  2056,  2058,  2060,
-    2063,  2070,  2069,  2078,  2079,  2080,  2081,  2089,  2090,  2091,
-    2095,  2096,  2097,  2098,  2099,  2100,  2101,  2102,  2103,  2104,
-    2105,  2106,  2107,  2108,  2109,  2110,  2111,  2112,  2113,  2114,
-    2115,  2116,  2117,  2123,  2122,  2134,  2139,  2140,  2141,  2142,
-    2143,  2144,  2145,  2146,  2147,  2148,  2149,  2150,  2151,  2156,
-    2167,  2168,  2169,  2170,  2176,  2190,  2196,  2202,  2208,  2207,
-    2216,  2217,  2227,  2237,  2244,  2249,  2259,  2263,  2264,  2268,
-    2269,  2270,  2273,  2274,  2278,  2282,  2292,  2298,  2308,  2313,
-    2317,  2318,  2322,  2326,  2330,  2337,  2341,  2345,  2352,  2353,
-    2357,  2358,  2359,  2360,  2361,  2362,  2366,  2367,  2371,  2372,
-    2376,  2377,  2381,  2382,  2389,  2396,  2397,  2398,  2402,  2403,
-    2407,  2408,  2412,  2413,  2417,  2418,  2422,  2422,  2434,  2434,
-    2446,  2447,  2455,  2462,  2463,  2464,  2465,  2466,  2470,  2471,
-    2475,  2476,  2477
+       0,  1081,  1081,  1085,  1086,  1090,  1091,  1092,  1098,  1104,
+    1105,  1106,  1107,  1111,  1112,  1121,  1127,  1135,  1147,  1160,
+    1160,  1169,  1169,  1178,  1179,  1183,  1184,  1188,  1189,  1190,
+    1191,  1192,  1193,  1194,  1197,  1197,  1206,  1205,  1218,  1222,
+    1235,  1239,  1243,  1243,  1255,  1257,  1261,  1276,  1277,  1281,
+    1281,  1293,  1294,  1303,  1307,  1311,  1302,  1323,  1324,  1325,
+    1338,  1338,  1342,  1367,  1371,  1377,  1386,  1392,  1401,  1407,
+    1416,  1422,  1431,  1439,  1444,  1455,  1458,  1463,  1471,  1472,
+    1473,  1474,  1475,  1486,  1497,  1500,  1502,  1507,  1506,  1537,
+    1538,  1542,  1543,  1547,  1548,  1552,  1553,  1557,  1558,  1559,
+    1560,  1561,  1562,  1563,  1564,  1565,  1566,  1567,  1568,  1569,
+    1570,  1574,  1579,  1583,  1587,  1591,  1595,  1600,  1609,  1610,
+    1622,  1627,  1628,  1636,  1637,  1637,  1649,  1650,  1654,  1655,
+    1656,  1657,  1658,  1659,  1660,  1661,  1666,  1666,  1669,  1677,
+    1677,  1683,  1684,  1689,  1697,  1698,  1703,  1711,  1715,  1720,
+    1719,  1732,  1733,  1737,  1738,  1748,  1753,  1763,  1772,  1773,
+    1785,  1789,  1791,  1792,  1793,  1794,  1795,  1799,  1800,  1804,
+    1805,  1809,  1820,  1821,  1832,  1839,  1848,  1856,  1858,  1863,
+    1864,  1865,  1865,  1878,  1895,  1908,  1908,  1915,  1916,  1916,
+    1922,  1928,  1932,  1944,  1945,  1946,  1947,  1948,  1949,  1953,
+    1954,  1955,  1956,  1960,  1962,  1964,  1966,  1968,  1971,  1978,
+    1977,  1986,  1987,  1988,  1989,  1997,  1998,  1999,  2003,  2004,
+    2005,  2006,  2007,  2008,  2009,  2010,  2011,  2012,  2013,  2014,
+    2015,  2016,  2017,  2018,  2019,  2020,  2021,  2022,  2023,  2024,
+    2025,  2031,  2030,  2042,  2047,  2048,  2049,  2050,  2051,  2052,
+    2053,  2054,  2055,  2056,  2057,  2058,  2059,  2064,  2075,  2076,
+    2077,  2078,  2084,  2098,  2104,  2110,  2116,  2115,  2124,  2125,
+    2135,  2145,  2152,  2157,  2167,  2171,  2172,  2176,  2177,  2178,
+    2180,  2181,  2185,  2189,  2199,  2205,  2215,  2220,  2224,  2225,
+    2229,  2233,  2237,  2244,  2248,  2252,  2259,  2260,  2264,  2265,
+    2266,  2267,  2268,  2269,  2273,  2274,  2278,  2279,  2283,  2284,
+    2288,  2289,  2296,  2303,  2304,  2305,  2309,  2310,  2314,  2315,
+    2319,  2320,  2324,  2325,  2329,  2329,  2341,  2341,  2353,  2354,
+    2362,  2369,  2370,  2371,  2372,  2373,  2377,  2378,  2382,  2383,
+    2384
 };
 #endif
 
@@ -1935,29 +1835,28 @@
   "DOT", "CONCAT", "'='", "'['", "']'", "';'", "'('", "')'", "'!'", "'~'",
   "'-'", "'+'", "'*'", "'/'", "'%'", "'&'", "'|'", "$accept", "program",
   "compilation_units", "compilation_unit", "pragma", "location_directive",
-  "annotate_directive", "hll_def", "constdef", "$@1", "pmc_const", "$@2",
-  "$@3", "any_string", "pasmcode", "pasmline", "pasm_inst", "$@4", "$@5",
-  "pasm_args", "emit", "$@6", "opt_pasmcode", "class_namespace",
-  "maybe_ns", "nslist", "$@7", "_nslist", "sub", "$@8", "$@9", "$@10",
-  "sub_params", "sub_param", "$@11", "sub_param_type_def", "multi",
-  "outer", "vtable", "method", "ns_entry_name", "instanceof", "subid",
-  "multi_types", "multi_type", "sub_body", "pcc_sub_call", "@12",
-  "opt_label", "opt_invocant", "sub_proto", "sub_proto_list", "proto",
-  "pcc_call", "pcc_args", "pcc_arg", "pcc_results", "pcc_result", "$@13",
-  "paramtype_list", "paramtype", "pcc_ret", "$@14", "pcc_yield", "$@15",
+  "annotate_directive", "hll_def", "constdef", "@1", "pmc_const", "@2",
+  "any_string", "pasmcode", "pasmline", "pasm_inst", "@3", "@4",
+  "pasm_args", "emit", "@5", "opt_pasmcode", "class_namespace", "maybe_ns",
+  "nslist", "@6", "_nslist", "sub", "@7", "@8", "@9", "sub_params",
+  "sub_param", "@10", "sub_param_type_def", "multi", "outer", "vtable",
+  "method", "ns_entry_name", "instanceof", "subid", "multi_types",
+  "multi_type", "sub_body", "pcc_sub_call", "@11", "opt_label",
+  "opt_invocant", "sub_proto", "sub_proto_list", "proto", "pcc_call",
+  "pcc_args", "pcc_arg", "pcc_results", "pcc_result", "@12",
+  "paramtype_list", "paramtype", "pcc_ret", "@13", "pcc_yield", "@14",
   "pcc_returns", "pcc_yields", "pcc_return", "pcc_set_yield",
-  "pcc_return_many", "$@16", "return_or_yield", "var_returns",
-  "statements", "helper_clear_state", "statement", "labels", "_labels",
-  "label", "instruction", "id_list", "id_list_id", "opt_unique_reg",
-  "labeled_inst", "$@17", "$@18", "$@19", "type", "assignment", "@20",
-  "un_op", "bin_op", "get_results", "@21", "op_assign", "assign_op",
-  "func_assign", "the_sub", "sub_call", "@22", "arglist", "arg",
-  "argtype_list", "argtype", "result", "targetlist",
-  "conditional_statement", "unless_statement", "if_statement",
-  "comma_or_goto", "relop", "target", "vars", "_vars", "_var_or_i",
-  "sub_label_op_c", "sub_label_op", "label_op", "var_or_i", "var",
-  "keylist", "$@23", "keylist_force", "$@24", "_keylist", "key", "reg",
-  "stringc", "const", 0
+  "pcc_return_many", "@15", "return_or_yield", "var_returns", "statements",
+  "helper_clear_state", "statement", "labels", "_labels", "label",
+  "instruction", "id_list", "id_list_id", "opt_unique_reg", "labeled_inst",
+  "@16", "@17", "@18", "type", "assignment", "@19", "un_op", "bin_op",
+  "get_results", "@20", "op_assign", "assign_op", "func_assign", "the_sub",
+  "sub_call", "@21", "arglist", "arg", "argtype_list", "argtype", "result",
+  "targetlist", "conditional_statement", "unless_statement",
+  "if_statement", "comma_or_goto", "relop", "target", "vars", "_vars",
+  "_var_or_i", "sub_label_op_c", "sub_label_op", "label_op", "var_or_i",
+  "var", "keylist", "@22", "keylist_force", "@23", "_keylist", "key",
+  "reg", "stringc", "const", 0
 };
 #endif
 
@@ -1988,39 +1887,39 @@
 {
        0,   136,   137,   138,   138,   139,   139,   139,   139,   139,
      139,   139,   139,   140,   140,   141,   141,   142,   143,   145,
-     144,   147,   146,   148,   146,   149,   149,   150,   150,   151,
-     151,   151,   151,   151,   151,   151,   153,   152,   154,   152,
-     152,   152,   152,   155,   157,   156,   158,   158,   159,   160,
-     160,   162,   161,   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,   224,   224,   224,   224,
-     224,   225,   224,   224,   224,   224,   224,   226,   226,   226,
-     227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
-     227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
-     227,   227,   227,   229,   228,   230,   231,   231,   231,   231,
-     231,   231,   231,   231,   231,   231,   231,   231,   231,   232,
-     233,   233,   233,   233,   233,   233,   233,   233,   235,   234,
-     236,   236,   236,   236,   236,   236,   237,   238,   238,   239,
-     239,   239,   239,   239,   240,   241,   241,   241,   241,   241,
-     242,   242,   243,   243,   243,   244,   244,   244,   245,   245,
-     246,   246,   246,   246,   246,   246,   247,   247,   248,   248,
-     249,   249,   250,   250,   250,   251,   251,   251,   252,   252,
-     253,   253,   254,   254,   255,   255,   257,   256,   259,   258,
-     260,   260,   261,   262,   262,   262,   262,   262,   263,   263,
-     264,   264,   264
+     144,   147,   146,   148,   148,   149,   149,   150,   150,   150,
+     150,   150,   150,   150,   152,   151,   153,   151,   151,   151,
+     151,   154,   156,   155,   157,   157,   158,   159,   159,   161,
+     160,   162,   162,   164,   165,   166,   163,   167,   167,   167,
+     169,   168,   170,   171,   172,   172,   173,   173,   174,   174,
+     175,   175,   176,   177,   177,   178,   178,   178,   179,   179,
+     179,   179,   179,   179,   179,   180,   180,   182,   181,   183,
+     183,   184,   184,   185,   185,   186,   186,   187,   187,   187,
+     187,   187,   187,   187,   187,   187,   187,   187,   187,   187,
+     187,   188,   188,   188,   188,   188,   188,   188,   189,   189,
+     190,   191,   191,   192,   193,   192,   194,   194,   195,   195,
+     195,   195,   195,   195,   195,   195,   197,   196,   196,   199,
+     198,   200,   200,   200,   201,   201,   201,   202,   203,   205,
+     204,   206,   206,   207,   207,   207,   207,   207,   208,   208,
+     209,   210,   210,   210,   210,   210,   210,   211,   211,   212,
+     212,   213,   214,   214,   215,   215,   216,   217,   217,   218,
+     218,   219,   218,   218,   218,   220,   218,   218,   221,   218,
+     218,   218,   218,   218,   218,   218,   218,   218,   218,   222,
+     222,   222,   222,   223,   223,   223,   223,   223,   223,   224,
+     223,   223,   223,   223,   223,   225,   225,   225,   226,   226,
+     226,   226,   226,   226,   226,   226,   226,   226,   226,   226,
+     226,   226,   226,   226,   226,   226,   226,   226,   226,   226,
+     226,   228,   227,   229,   230,   230,   230,   230,   230,   230,
+     230,   230,   230,   230,   230,   230,   230,   231,   232,   232,
+     232,   232,   232,   232,   232,   232,   234,   233,   235,   235,
+     235,   235,   235,   235,   236,   237,   237,   238,   238,   238,
+     238,   238,   239,   240,   240,   240,   240,   240,   241,   241,
+     242,   242,   242,   243,   243,   243,   244,   244,   245,   245,
+     245,   245,   245,   245,   246,   246,   247,   247,   248,   248,
+     249,   249,   249,   250,   250,   250,   251,   251,   252,   252,
+     253,   253,   254,   254,   256,   255,   258,   257,   259,   259,
+     260,   261,   261,   261,   261,   261,   262,   262,   263,   263,
+     263
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -2028,39 +1927,39 @@
 {
        0,     2,     1,     1,     2,     1,     1,     1,     1,     2,
        1,     1,     1,     2,     3,     5,     3,     4,     2,     0,
-       6,     0,     6,     0,     6,     1,     1,     1,     2,     3,
-       2,     1,     1,     1,     1,     1,     0,     3,     0,     4,
-       2,     4,     0,     1,     0,     4,     0,     1,     3,     3,
-       2,     0,     2,     1,     3,     0,     0,     0,    10,     0,
-       2,     3,     0,     3,     3,     4,     4,     4,     1,     4,
-       1,     4,     1,     4,     4,     1,     4,     0,     3,     1,
-       1,     1,     1,     1,     1,     1,     3,     0,     1,     0,
-       9,     0,     2,     0,     3,     0,     1,     1,     2,     1,
+       6,     0,     6,     1,     1,     1,     2,     3,     2,     1,
+       1,     1,     1,     1,     0,     3,     0,     4,     2,     4,
+       0,     1,     0,     4,     0,     1,     3,     3,     2,     0,
+       2,     1,     3,     0,     0,     0,    10,     0,     2,     3,
+       0,     3,     3,     4,     4,     4,     1,     4,     1,     4,
+       1,     4,     4,     1,     4,     0,     3,     1,     1,     1,
+       1,     1,     1,     1,     3,     0,     1,     0,     9,     0,
+       2,     0,     3,     0,     1,     1,     2,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     5,     3,     3,     3,     3,     5,     5,
-       0,     3,     2,     0,     3,     3,     0,     4,     0,     2,
-       1,     1,     1,     1,     4,     4,     1,     1,     0,     5,
-       1,     0,     5,     0,     2,     3,     0,     2,     3,     3,
-       3,     0,     5,     1,     1,     0,     1,     3,     3,     5,
-       1,     2,     0,     2,     2,     1,     1,     1,     1,     0,
-       1,     2,     1,     1,     3,     2,     1,     3,     2,     0,
-       1,     1,     1,     0,     4,     4,     4,     0,     6,     1,
-       0,     6,     2,     2,     2,     2,     1,     1,     1,     1,
-       0,     1,     1,     1,     1,     3,     4,     5,     6,     6,
-       3,     0,     9,     1,     1,     1,     3,     1,     1,     1,
+       1,     5,     3,     3,     3,     3,     5,     5,     0,     3,
+       2,     0,     3,     3,     0,     4,     0,     2,     1,     1,
+       1,     1,     4,     4,     1,     1,     0,     5,     1,     0,
+       5,     0,     2,     3,     0,     2,     3,     3,     3,     0,
+       5,     1,     1,     0,     1,     3,     3,     5,     1,     2,
+       0,     2,     2,     1,     1,     1,     1,     0,     1,     2,
+       1,     1,     3,     2,     1,     3,     2,     0,     1,     1,
+       1,     0,     4,     4,     4,     0,     6,     1,     0,     6,
+       2,     2,     2,     2,     1,     1,     1,     1,     0,     1,
+       1,     1,     1,     3,     4,     5,     6,     6,     3,     0,
+       9,     1,     1,     1,     3,     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,     0,     5,     3,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     4,
-       1,     1,     1,     1,     3,     3,     3,     3,     0,     5,
-       0,     3,     1,     5,     3,     3,     2,     0,     2,     1,
-       1,     1,     4,     4,     2,     3,     5,     1,     3,     0,
-       1,     1,     6,     5,     4,     4,     6,     5,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     0,     1,
-       3,     1,     1,     4,     3,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     0,     2,     0,     2,
-       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1
+       1,     0,     5,     3,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     4,     1,     1,
+       1,     1,     3,     3,     3,     3,     0,     5,     0,     3,
+       1,     5,     3,     3,     2,     0,     2,     1,     1,     1,
+       4,     4,     2,     3,     5,     1,     3,     0,     1,     1,
+       6,     5,     4,     4,     6,     5,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     0,     1,     3,     1,
+       1,     4,     3,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     0,     2,     0,     2,     1,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -2068,306 +1967,304 @@
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,    12,     0,     0,     0,     0,    55,    19,     0,    44,
+       0,    12,     0,     0,     0,     0,    53,    19,     0,    42,
        0,     0,     2,     3,    10,    11,     0,     6,     8,     5,
-       7,    18,     0,     0,    51,     0,     0,     0,     0,   169,
-       9,     1,     4,    13,     0,    16,    50,     0,     0,    48,
-     318,   316,   317,   319,    56,   315,   201,   202,   203,   204,
-       0,    14,    21,   173,     0,    32,    31,    35,    34,   169,
-      27,     0,    33,    36,   170,   172,     0,    49,   338,   339,
-      52,    53,    95,     0,     0,     0,    30,    28,    45,     0,
-       0,    38,     0,     0,   171,    15,     0,   101,    99,   100,
-     102,   103,    70,   104,     0,   105,     0,    68,     0,    75,
-      72,   106,   107,   108,   109,   110,   111,   112,     0,    96,
-      97,     0,     0,     0,   333,   334,   335,   336,   337,   340,
-     341,   306,   324,    40,   307,   342,   325,     0,    95,    29,
-     308,    54,     0,     0,    77,     0,     0,     0,     0,    57,
-      98,    20,   320,   321,   322,     0,   323,     0,     0,     0,
-     328,    37,   324,    43,   309,   311,   312,    25,    26,     0,
-       0,     0,    80,    81,    83,    82,    84,    85,   326,     0,
-      79,     0,     0,     0,     0,    59,     0,     0,    41,    39,
-       0,     0,   326,     0,    71,    67,    66,     0,     0,     0,
-      65,    69,    74,    76,    73,   162,    22,    24,   314,   332,
-     329,   330,     0,   310,    86,   327,    78,    60,    62,     0,
-       0,   166,   165,   167,   168,     0,     0,   162,     0,   160,
-       0,   313,     0,     0,   164,    61,    58,   161,     0,   200,
-     163,   331,    63,     0,     0,   175,     0,     0,     0,     0,
-     183,     0,   187,   190,   153,     0,   154,   243,     0,     0,
-       0,   260,   261,   262,   308,   211,   189,   197,   198,   199,
-     140,     0,     0,   181,   213,   214,   215,   268,   196,   182,
-     291,   290,   263,   128,    17,   193,     0,     0,     0,     0,
-     195,     0,     0,     0,     0,     0,   192,   263,     0,    89,
-     138,   141,   194,   289,   151,   174,     0,   246,   247,   248,
-     249,   252,   253,   254,   255,   251,   250,   256,   257,   258,
-       0,     0,   326,     0,    64,     0,   299,   300,   301,   302,
-     303,   304,   305,   298,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   289,   120,   143,   146,     0,   287,
-       0,   128,   155,   270,   266,   265,   267,   264,   216,   338,
-     339,   308,   217,   218,   219,     0,   210,   324,   205,     0,
-     245,   130,   131,   132,   133,   137,   136,   129,     0,   295,
-       0,     0,   294,     0,   179,   184,   176,   185,   186,     0,
-       0,     0,    93,     0,     0,     0,     0,     0,   284,   338,
-       0,   156,   277,   338,     0,   272,   277,   259,   206,   225,
-     234,   235,   239,   228,   229,   230,   231,   232,   233,   226,
-     236,   237,   238,   227,   326,   242,   220,   221,   222,   223,
-     224,   240,   241,     0,     0,     0,   297,     0,   293,     0,
-     180,   178,     0,     0,     0,   244,     0,     0,     0,     0,
-     144,     0,   139,     0,   147,     0,   142,     0,   288,     0,
-     285,     0,     0,     0,   152,   276,     0,     0,   269,     0,
-       0,   207,     0,     0,     0,   296,   292,   177,   188,   191,
-     122,     0,     0,     0,     0,    91,   121,   277,   145,   277,
-     148,     0,     0,   157,   338,   158,   279,   280,   281,   278,
-     275,   338,   271,   274,   208,   209,   134,   135,    94,     0,
-       0,     0,     0,   123,     0,   149,   150,   286,   270,     0,
-       0,     0,   114,     0,   115,   117,     0,   116,     0,     0,
-      92,     0,   159,     0,     0,   273,     0,     0,     0,   126,
-       0,    90,     0,   212,   283,   282,   113,   119,   118,     0,
-     128,   124,     0,   125,   127
+       7,    18,     0,     0,    49,     0,     0,     0,     0,   167,
+       9,     1,     4,    13,     0,    16,    48,     0,     0,    46,
+     316,   314,   315,   317,    54,   313,   199,   200,   201,   202,
+       0,    14,    21,   171,     0,    30,    29,    33,    32,   167,
+      25,     0,    31,    34,   168,   170,     0,    47,   336,   337,
+      50,    51,    93,     0,     0,    28,    26,    43,     0,     0,
+      36,     0,     0,   169,    15,     0,    99,    97,    98,   100,
+     101,    68,   102,     0,   103,     0,    66,     0,    73,    70,
+     104,   105,   106,   107,   108,   109,   110,     0,    94,    95,
+       0,     0,   331,   332,   333,   334,   335,   338,   339,   304,
+     322,    38,   305,   340,   323,     0,    93,    27,   306,    52,
+       0,     0,    75,     0,     0,     0,     0,    55,    96,    20,
+     318,   319,   320,     0,   321,     0,     0,   326,    35,   322,
+      41,   307,   309,   310,    23,    24,     0,     0,     0,    78,
+      79,    81,    80,    82,    83,   324,     0,    77,     0,     0,
+       0,     0,    57,     0,    39,    37,     0,     0,   324,     0,
+      69,    65,    64,     0,     0,     0,    63,    67,    72,    74,
+      71,   160,    22,   312,   330,   327,   328,     0,   308,    84,
+     325,    76,    58,    60,     0,     0,   164,   163,   165,   166,
+       0,     0,   160,     0,   158,     0,   311,     0,     0,   162,
+      59,    56,   159,     0,   198,   161,   329,    61,     0,     0,
+     173,     0,     0,     0,     0,   181,     0,   185,   188,   151,
+       0,   152,   241,     0,     0,     0,   258,   259,   260,   306,
+     209,   187,   195,   196,   197,   138,     0,     0,   179,   211,
+     212,   213,   266,   194,   180,   289,   288,   261,   126,    17,
+     191,     0,     0,     0,     0,   193,     0,     0,     0,     0,
+       0,   190,   261,     0,    87,   136,   139,   192,   287,   149,
+     172,     0,   244,   245,   246,   247,   250,   251,   252,   253,
+     249,   248,   254,   255,   256,     0,     0,   324,     0,    62,
+       0,   297,   298,   299,   300,   301,   302,   303,   296,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   287,
+     118,   141,   144,     0,   285,     0,   126,   153,   268,   264,
+     263,   265,   262,   214,   336,   337,   306,   215,   216,   217,
+       0,   208,   322,   203,     0,   243,   128,   129,   130,   131,
+     135,   134,   127,     0,   293,     0,     0,   292,     0,   177,
+     182,   174,   183,   184,     0,     0,     0,    91,     0,     0,
+       0,     0,     0,   282,   336,     0,   154,   275,   336,     0,
+     270,   275,   257,   204,   223,   232,   233,   237,   226,   227,
+     228,   229,   230,   231,   224,   234,   235,   236,   225,   324,
+     240,   218,   219,   220,   221,   222,   238,   239,     0,     0,
+       0,   295,     0,   291,     0,   178,   176,     0,     0,     0,
+     242,     0,     0,     0,     0,   142,     0,   137,     0,   145,
+       0,   140,     0,   286,     0,   283,     0,     0,     0,   150,
+     274,     0,     0,   267,     0,     0,   205,     0,     0,     0,
+     294,   290,   175,   186,   189,   120,     0,     0,     0,     0,
+      89,   119,   275,   143,   275,   146,     0,     0,   155,   336,
+     156,   277,   278,   279,   276,   273,   336,   269,   272,   206,
+     207,   132,   133,    92,     0,     0,     0,     0,   121,     0,
+     147,   148,   284,   268,     0,     0,     0,   112,     0,   113,
+     115,     0,   114,     0,     0,    90,     0,   157,     0,     0,
+     271,     0,     0,     0,   124,     0,    88,     0,   210,   281,
+     280,   111,   117,   116,     0,   126,   122,     0,   123,   125
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    11,    12,    13,    14,    15,   214,    16,    17,    27,
-      58,    74,    75,   159,    59,    60,    82,    83,   128,   151,
-      18,    29,    61,    19,    25,    37,    38,    70,    20,    26,
-      72,   175,   195,   215,   222,   232,   101,   102,   103,   104,
-     105,   106,   107,   169,   170,   216,   257,   335,   503,   438,
-     108,   109,   110,   475,   382,   439,   519,   532,   539,   314,
-     367,   258,   336,   259,   337,   383,   384,   443,   447,   260,
-     342,   261,   390,   217,   218,   219,    63,    64,    65,   230,
-     375,   376,   431,   262,   281,   284,   285,    50,   263,   293,
-     355,   423,   264,   288,   265,   313,   266,   267,   268,   296,
-     394,   395,   455,   489,   339,   340,   269,   270,   271,   324,
-     325,   122,   153,   154,   155,    44,    45,   144,   156,   146,
-     187,   188,   180,   181,   200,   201,   124,   125,   126
+      -1,    11,    12,    13,    14,    15,   209,    16,    17,    27,
+      58,    74,   156,    59,    60,    81,    82,   126,   148,    18,
+      29,    61,    19,    25,    37,    38,    70,    20,    26,    72,
+     172,   191,   210,   217,   227,   100,   101,   102,   103,   104,
+     105,   106,   166,   167,   211,   252,   330,   498,   433,   107,
+     108,   109,   470,   377,   434,   514,   527,   534,   309,   362,
+     253,   331,   254,   332,   378,   379,   438,   442,   255,   337,
+     256,   385,   212,   213,   214,    63,    64,    65,   225,   370,
+     371,   426,   257,   276,   279,   280,    50,   258,   288,   350,
+     418,   259,   283,   260,   308,   261,   262,   263,   291,   389,
+     390,   450,   484,   334,   335,   264,   265,   266,   319,   320,
+     120,   150,   151,   152,    44,    45,   142,   153,   144,   183,
+     184,   176,   177,   195,   196,   122,   123,   124
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -448
+#define YYPACT_NINF -413
 static const yytype_int16 yypact[] =
 {
-      69,  -448,   -70,   -51,   -44,   -48,  -448,  -448,    22,  -448,
-     136,   150,    69,  -448,  -448,  -448,   153,  -448,  -448,  -448,
-    -448,  -448,    91,   159,    51,   185,   200,   135,   191,   204,
-    -448,  -448,  -448,  -448,    90,  -448,  -448,    99,   -68,  -448,
-    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
-     117,  -448,   141,  -448,   251,  -448,  -448,  -448,  -448,   234,
-    -448,   154,  -448,    12,   160,  -448,   257,  -448,  -448,  -448,
-     138,  -448,   413,   151,   170,   162,  -448,  -448,  -448,   189,
-     164,  -448,   279,   171,  -448,  -448,   -68,  -448,  -448,  -448,
-    -448,  -448,   166,  -448,   183,  -448,   184,   187,   192,   193,
-     194,  -448,  -448,  -448,  -448,  -448,  -448,  -448,   281,   413,
-    -448,   101,   426,   426,  -448,  -448,  -448,  -448,  -448,  -448,
-    -448,  -448,  -448,  -448,  -448,  -448,  -448,   226,   413,  -448,
-     374,  -448,    96,   -24,    -3,   199,   213,    96,    96,  -448,
-    -448,  -448,  -448,  -448,  -448,   207,  -448,   209,   217,   231,
-    -448,  -448,   210,  -448,   265,  -448,  -448,  -448,  -448,   211,
-     212,   214,  -448,  -448,  -448,  -448,  -448,  -448,  -448,   -58,
-    -448,   215,   216,   219,   221,  -448,    96,    96,  -448,  -448,
-     225,   189,  -448,   374,  -448,  -448,  -448,   227,   189,    -3,
-    -448,  -448,  -448,  -448,  -448,    19,  -448,  -448,  -448,  -448,
-     230,  -448,   232,  -448,  -448,   230,  -448,  -448,  -448,   222,
-     335,  -448,  -448,  -448,  -448,   345,   285,   172,     7,  -448,
-     189,  -448,   135,   289,  -448,  -448,  -448,  -448,   356,   163,
-    -448,  -448,  -448,   254,   101,  -448,   -62,   284,   302,   189,
-    -448,   119,   127,  -448,  -448,   317,  -448,  -448,   359,   360,
-     361,  -448,  -448,  -448,   374,  -448,  -448,  -448,  -448,  -448,
-    -448,   242,   364,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
-    -448,  -448,   429,  -448,  -448,  -448,   189,   161,   189,   161,
-    -448,   135,   299,   300,   135,   135,  -448,   252,   247,  -448,
-    -448,  -448,  -448,   519,  -448,  -448,   250,  -448,  -448,  -448,
-    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
-     449,    40,  -448,   189,    39,   366,  -448,  -448,  -448,  -448,
-    -448,  -448,  -448,  -448,   -62,   189,   369,   -62,   189,   274,
-     546,   546,   275,   277,   519,  -448,  -448,  -448,   363,  -448,
-     -35,  -448,   463,   477,  -448,  -448,  -448,  -448,  -448,   261,
-     266,   374,  -448,  -448,  -448,   189,  -448,   -40,   393,   276,
-    -448,  -448,  -448,  -448,   278,  -448,  -448,  -448,   -62,  -448,
-     391,   -62,  -448,   394,   310,   341,  -448,  -448,  -448,   296,
-     298,     5,    -1,    14,     9,   546,   528,   305,    39,   405,
-      23,  -448,  -448,   414,    36,  -448,   416,  -448,  -448,  -448,
-    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
-    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
-    -448,  -448,  -448,   189,   319,   139,  -448,   -62,  -448,   -62,
-    -448,  -448,   274,   101,   101,  -448,   189,   189,   109,   439,
-    -448,   189,  -448,   440,  -448,   189,  -448,   441,  -448,   424,
-    -448,   317,   189,   491,  -448,   263,   189,   505,  -448,   189,
-     331,  -448,   189,   329,   330,  -448,  -448,  -448,  -448,  -448,
-    -448,   453,   189,   189,   537,   160,  -448,  -448,  -448,  -448,
-    -448,   546,   333,  -448,   461,  -448,  -448,   346,  -448,  -448,
-    -448,   462,  -448,  -448,  -448,  -448,  -448,  -448,  -448,    27,
-     487,    29,    35,  -448,   488,   263,   263,  -448,   477,   189,
-     140,   189,  -448,   189,  -448,  -448,   189,  -448,   189,   105,
-    -448,    46,  -448,   367,   368,  -448,   504,   508,   510,  -448,
-     546,  -448,   512,  -448,  -448,  -448,  -448,  -448,  -448,   135,
-    -448,  -448,   274,    39,  -448
+     320,  -413,  -102,   -90,   -60,   -61,  -413,  -413,   -39,  -413,
+      70,    89,   320,  -413,  -413,  -413,    93,  -413,  -413,  -413,
+    -413,  -413,    41,   121,   -30,   135,   -44,   139,   144,    57,
+    -413,  -413,  -413,  -413,    50,  -413,  -413,    42,    72,  -413,
+    -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,
+      65,  -413,  -413,  -413,   172,  -413,  -413,  -413,  -413,   156,
+    -413,    75,  -413,    24,    78,  -413,   178,  -413,  -413,  -413,
+      60,  -413,   427,    80,    91,  -413,  -413,  -413,   455,    95,
+    -413,   208,   103,  -413,  -413,    72,  -413,  -413,  -413,  -413,
+    -413,   125,  -413,   137,  -413,   150,   151,   152,   153,   154,
+    -413,  -413,  -413,  -413,  -413,  -413,  -413,   233,   427,  -413,
+      97,   440,  -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,
+    -413,  -413,  -413,  -413,  -413,   173,   427,  -413,   388,  -413,
+     108,   -26,   118,   141,   142,   108,   108,  -413,  -413,  -413,
+    -413,  -413,  -413,   159,  -413,   174,   164,  -413,  -413,   161,
+    -413,   215,  -413,  -413,  -413,  -413,   160,   167,   168,  -413,
+    -413,  -413,  -413,  -413,  -413,  -413,   -53,  -413,   170,   171,
+     175,   176,  -413,   108,  -413,  -413,   181,   455,  -413,   388,
+    -413,  -413,  -413,   188,   455,   118,  -413,  -413,  -413,  -413,
+    -413,    25,  -413,  -413,  -413,   193,  -413,   189,  -413,  -413,
+     193,  -413,  -413,  -413,   214,   315,  -413,  -413,  -413,  -413,
+     322,   259,    23,   184,  -413,   455,  -413,   139,   267,  -413,
+    -413,  -413,  -413,   337,    13,  -413,  -413,  -413,   231,    97,
+    -413,   -49,   202,   334,   455,  -413,   112,   235,  -413,  -413,
+     228,  -413,  -413,   345,   348,   351,  -413,  -413,  -413,   388,
+    -413,  -413,  -413,  -413,  -413,  -413,   232,   352,  -413,  -413,
+    -413,  -413,  -413,  -413,  -413,  -413,  -413,   443,  -413,  -413,
+    -413,   455,   211,   455,   211,  -413,   139,   290,   291,   139,
+     139,  -413,   240,   238,  -413,  -413,  -413,  -413,   128,  -413,
+    -413,   239,  -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,
+    -413,  -413,  -413,  -413,  -413,   469,   289,  -413,   455,    -8,
+     355,  -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,   -49,
+     455,   356,   -49,   455,   260,   306,   306,   261,   264,   128,
+    -413,  -413,  -413,   350,  -413,   -31,  -413,   483,   497,  -413,
+    -413,  -413,  -413,  -413,   250,   252,   388,  -413,  -413,  -413,
+     455,  -413,    28,   407,   255,  -413,  -413,  -413,  -413,   256,
+    -413,  -413,  -413,   -49,  -413,   370,   -49,  -413,   372,   284,
+     314,  -413,  -413,  -413,   265,   266,   -22,    -3,    32,     3,
+     306,   539,   270,    -8,   363,   -18,  -413,  -413,   366,   -14,
+    -413,   376,  -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,   455,   285,
+     113,  -413,   -49,  -413,   -49,  -413,  -413,   260,    97,    97,
+    -413,   455,   455,    69,   404,  -413,   455,  -413,   409,  -413,
+     455,  -413,   415,  -413,   398,  -413,   228,   455,   511,  -413,
+     143,   455,   525,  -413,   455,   300,  -413,   455,   298,   301,
+    -413,  -413,  -413,  -413,  -413,  -413,   428,   455,   455,   548,
+      78,  -413,  -413,  -413,  -413,  -413,   306,   309,  -413,   414,
+    -413,  -413,   316,  -413,  -413,  -413,   421,  -413,  -413,  -413,
+    -413,  -413,  -413,  -413,    14,   447,    31,    33,  -413,   448,
+     143,   143,  -413,   497,   455,   127,   455,  -413,   455,  -413,
+    -413,   455,  -413,   455,    84,  -413,   -11,  -413,   305,   318,
+    -413,   449,   450,   453,  -413,   306,  -413,   454,  -413,  -413,
+    -413,  -413,  -413,  -413,   139,  -413,  -413,   260,    -8,  -413
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -448,  -448,  -448,   483,   -15,  -161,  -448,  -448,  -448,  -448,
-     288,  -448,  -448,    71,  -448,   459,  -448,  -448,  -448,   168,
-    -448,  -448,  -448,    -7,  -448,  -448,  -448,  -448,  -448,  -448,
-    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
-    -448,  -448,  -448,  -448,   347,  -448,  -448,  -448,  -448,  -448,
-     392,  -448,   434,  -448,  -448,  -448,  -448,  -448,  -448,  -335,
-    -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,  -448,
-    -448,  -448,  -448,  -448,  -448,   318,   326,  -448,   -63,  -448,
-    -448,  -417,  -448,  -448,  -448,  -448,  -448,  -219,  -448,  -448,
-    -448,  -448,  -448,  -448,  -448,  -448,  -448,    94,  -181,  -448,
-      38,  -333,  -447,  -448,   173,   224,  -448,  -448,  -448,   268,
-     270,  -128,   307,  -448,   379,  -448,   260,  -229,   132,   -79,
-    -177,  -448,  -448,  -448,   384,   353,  -448,    43,  -107
+    -413,  -413,  -413,   456,    -9,  -167,  -413,  -413,  -413,  -413,
+     236,  -413,     0,  -413,   400,  -413,  -413,  -413,   123,  -413,
+    -413,  -413,    20,  -413,  -413,  -413,  -413,  -413,  -413,  -413,
+    -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,
+    -413,  -413,  -413,   286,  -413,  -413,  -413,  -413,  -413,   344,
+    -413,   364,  -413,  -413,  -413,  -413,  -413,  -413,  -331,  -413,
+    -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,
+    -413,  -413,  -413,  -413,   273,   292,  -413,   -63,  -413,  -413,
+    -406,  -413,  -413,  -413,  -413,  -413,  -211,  -413,  -413,  -413,
+    -413,  -413,  -413,  -413,  -413,  -413,    51,  -199,  -413,    -5,
+    -322,  -412,  -413,   126,   177,  -413,  -413,  -413,   234,   248,
+    -126,   277,  -413,   330,  -413,   223,  -217,   419,   -78,  -174,
+    -413,  -413,  -413,   347,   317,  -413,     2,  -107
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -264
+#define YYTABLE_NINF -262
 static const yytype_int16 yytable[] =
 {
-     123,    84,   152,   233,   141,   202,   388,   275,   228,   391,
-     436,  -169,   189,   444,    57,   467,   -42,  -169,   440,  -169,
-    -169,  -169,    62,   207,   208,   445,    79,     3,     4,   441,
-     505,   512,   506,   515,   213,   386,  -169,  -169,  -169,   517,
-    -169,    21,    80,    68,    57,   142,    69,   162,   163,   164,
-     165,   209,    62,   143,   348,   152,   213,   361,   362,   363,
-     364,    22,   329,   365,   286,   332,   333,    23,   190,  -169,
-    -169,  -169,  -169,     1,    24,   386,     2,     3,     4,   310,
-    -169,    71,   437,   160,  -169,  -263,  -169,   161,    81,   446,
-     -87,   387,   442,   453,     5,   369,     6,   513,   372,   516,
-       7,   272,   199,   470,   166,   518,   457,    53,   167,   199,
-    -169,  -169,  -169,  -169,  -169,  -169,   457,   287,  -169,   168,
-     485,  -169,  -169,  -169,   492,   544,   152,   274,   210,   131,
-     356,   435,  -169,    28,   529,   359,   211,   212,   366,   426,
-      30,   199,   428,   114,   115,   116,   117,   251,   118,   454,
-      31,   349,   119,   120,   350,   351,   121,    33,   277,   279,
-     280,    34,   458,    35,     8,   341,   530,   352,   353,   354,
-       9,   316,   533,   236,    36,   237,   238,   239,    10,   531,
-       3,     4,   346,   357,   472,    46,    47,    48,    49,    39,
-     473,   474,   240,   241,   242,    51,   243,   315,   465,   326,
-     466,    66,   377,   378,   209,   543,   341,   157,   173,   174,
-     158,     2,    68,   119,   120,    69,   317,   318,   319,   320,
-     321,   322,    67,   152,    73,   244,   245,   246,   247,     5,
-     282,   323,   358,   283,   360,    52,   248,   460,   -23,   -21,
-     249,     2,   250,   -88,   145,   147,   370,   196,   197,   373,
-     463,   523,   -23,   464,   524,    76,    78,   448,   341,     5,
-      53,    85,    86,   392,   396,    52,   114,   115,   116,   117,
-     251,   118,   111,   113,   252,   127,   398,   253,   254,   121,
-     486,   210,   112,   129,   487,   139,   130,   488,   255,   211,
-     212,   132,   114,   115,   116,   117,   148,   118,   276,     8,
-      68,   119,   120,    69,    53,   121,   -46,    40,   133,   134,
-     171,    41,   135,    54,    42,    43,   278,   136,   137,   138,
-     542,    55,    56,   287,   172,   178,   468,   469,   176,     8,
-     177,   179,   182,   223,    53,   183,   -47,   184,   185,   224,
-     186,   191,   192,    54,   461,   193,   502,   194,   198,   225,
-     204,    55,    56,   507,   220,   221,   226,   392,   471,   234,
-     235,   273,   477,   289,   290,   291,   479,   294,   295,   330,
-     331,   310,   334,   483,   392,   343,   368,   490,   392,   371,
-     493,   374,   379,   495,   380,   385,  -261,   114,   115,   116,
-     117,  -262,   118,   499,   500,    68,   119,   120,    69,   424,
-     121,   427,   540,   425,   429,   114,   115,   116,   117,   430,
-     118,   432,   504,    68,   119,   120,    69,   433,   121,   434,
-     114,   115,   116,   117,   251,   118,   451,   452,   252,   396,
-     522,   253,   525,   121,   526,   399,   456,   527,   459,   528,
-     462,   400,   401,   476,   478,   480,   481,   402,   403,   404,
-     405,   406,   407,   408,   494,   496,   497,   498,   508,   409,
-     410,   411,   412,   297,   298,   299,   300,   301,   302,   303,
-     304,   510,   305,   306,   307,   308,   309,   114,   115,   116,
-     117,   142,   118,   509,   511,    68,   119,   120,    69,   143,
-     121,   514,   520,   534,   535,    32,   150,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,   536,    98,
-      99,   100,   537,   413,   538,   414,   541,   256,    77,   397,
-     149,   415,   416,   417,   418,   419,   420,   421,   422,   114,
-     115,   116,   117,   142,   118,   227,   206,    68,   119,   120,
-      69,   143,   121,   140,   229,   482,   521,   327,   310,   328,
-     311,   312,   114,   115,   116,   117,    40,   118,   381,   450,
-     344,   292,   203,   345,    43,   121,   114,   115,   116,   117,
-     347,   118,   205,   231,   389,   119,   120,    69,     0,   121,
-     114,   115,   116,   117,     0,   118,     0,     0,   393,   119,
-     120,    69,     0,   121,   114,   115,   116,   117,     0,   118,
-       0,     0,   484,   119,   120,    69,     0,   121,   114,   115,
-     116,   117,     0,   118,     0,     0,   491,   119,   120,    69,
-       0,   121,   114,   115,   116,   117,     0,   118,     0,     0,
-     338,   114,   115,   116,   117,   121,   118,     0,     0,   449,
-     114,   115,   116,   117,   121,   118,     0,     0,   501,   114,
-     115,   116,   117,   121,   118,     0,     0,     0,     0,     0,
-       0,     0,   121
+     121,    83,   149,   139,   197,   383,   228,   439,   431,    21,
+     356,   357,   358,   359,   270,   386,   360,   185,   507,   440,
+      57,   462,    22,   231,   208,   232,   233,   234,   -40,   202,
+     203,     3,     4,     3,     4,   510,   435,   512,    78,   381,
+      71,   281,   235,   236,   237,   208,   238,   436,   381,    62,
+      57,    23,   448,   149,    79,   204,   452,   204,   140,   452,
+     500,    24,   501,    40,     2,   324,   141,    41,   327,   328,
+      42,    43,    28,   186,    30,   239,   240,   241,   242,    62,
+     432,   157,     5,   441,   508,   158,   243,   129,    52,    31,
+     244,   361,   245,    36,   -86,   382,   -85,    33,   267,   194,
+      80,   511,   364,   513,   430,   367,   194,   351,   449,   465,
+     437,    34,   453,   524,   282,   528,   112,   113,   114,   115,
+     246,   116,   269,   149,   247,    35,   480,   248,   249,   119,
+     487,   539,   205,   354,   205,   170,   171,   194,   250,    39,
+     206,   207,   206,   207,   467,   525,   421,   305,    51,   423,
+     468,   469,     8,  -261,   272,   274,   275,    53,   526,   -44,
+     481,    66,   336,     2,   482,    67,    54,   483,   159,   160,
+     161,   162,    73,   192,    55,    56,    75,    77,    53,   341,
+     352,     5,    84,    68,    85,   223,    69,    52,  -167,    46,
+      47,    48,    49,   310,  -167,   321,  -167,  -167,  -167,   372,
+     373,   110,   111,   336,   538,   460,   125,   461,    68,   117,
+     118,    69,   127,  -167,  -167,  -167,   271,  -167,   128,   154,
+     149,   311,   155,   277,   458,   163,   278,   459,   353,   164,
+     355,   112,   113,   114,   115,   455,   116,   137,   518,   333,
+     165,   519,   365,   145,   119,   368,  -167,  -167,  -167,  -167,
+     130,     8,   168,   169,   443,   336,    53,  -167,   -45,   387,
+     391,  -167,   131,  -167,   175,    54,   312,   313,   314,   315,
+     316,   317,   393,    55,    56,   132,   133,   134,   135,   136,
+     173,   318,   174,   178,    53,   179,   180,  -167,  -167,  -167,
+    -167,  -167,  -167,   181,   182,  -167,   187,   188,  -167,  -167,
+    -167,   189,   190,   343,   193,   112,   113,   114,   115,  -167,
+     116,   199,   216,    68,   117,   118,    69,   215,   119,   219,
+     282,   463,   464,   537,     1,   218,   220,     2,     3,     4,
+     221,   112,   113,   114,   115,   246,   116,   229,   268,   247,
+     456,   230,   248,   497,   119,     5,   -21,     6,   273,   284,
+     502,     7,   285,   387,   466,   286,   290,   289,   472,   305,
+     325,   326,   474,   329,   338,   363,   366,   369,   374,   478,
+     387,   375,   380,   485,   387,  -259,   488,  -260,   419,   490,
+     422,   420,   424,   425,   427,   447,   428,   429,   451,   494,
+     495,   446,   112,   113,   114,   115,   246,   116,   454,   535,
+     344,   117,   118,   345,   346,   119,   457,   499,   471,   112,
+     113,   114,   115,   473,   116,     8,   347,   348,   349,   475,
+     476,     9,   119,   489,   491,   391,   517,   492,   520,    10,
+     521,   529,   493,   522,   503,   523,   504,   112,   113,   114,
+     115,   505,   116,   506,   530,    68,   117,   118,    69,   394,
+     119,   509,   515,   531,   532,   395,   396,   533,   536,    76,
+     251,   397,   398,   399,   400,   401,   402,   403,    32,   392,
+     146,   201,   138,   404,   405,   406,   407,   292,   293,   294,
+     295,   296,   297,   298,   299,   222,   300,   301,   302,   303,
+     304,   112,   113,   114,   115,   140,   116,   477,   516,    68,
+     117,   118,    69,   141,   119,   224,   376,   445,   322,   198,
+     147,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,   323,    97,    98,    99,   287,   408,   342,   409,
+     143,   200,   226,     0,     0,   410,   411,   412,   413,   414,
+     415,   416,   417,   112,   113,   114,   115,   140,   116,     0,
+       0,    68,   117,   118,    69,   141,   119,     0,   112,   113,
+     114,   115,   305,   116,   306,   307,    68,   117,   118,    69,
+       0,   119,   112,   113,   114,   115,    40,   116,     0,     0,
+     339,     0,     0,   340,    43,   119,   112,   113,   114,   115,
+       0,   116,     0,     0,   384,   117,   118,    69,     0,   119,
+     112,   113,   114,   115,     0,   116,     0,     0,   388,   117,
+     118,    69,     0,   119,   112,   113,   114,   115,     0,   116,
+       0,     0,   479,   117,   118,    69,     0,   119,   112,   113,
+     114,   115,     0,   116,     0,     0,   486,   117,   118,    69,
+       0,   119,   112,   113,   114,   115,     0,   116,     0,     0,
+     444,   112,   113,   114,   115,   119,   116,     0,     0,   496,
+       0,     0,     0,     0,   119
 };
 
 static const yytype_int16 yycheck[] =
 {
-      79,    64,   130,   222,   111,   182,   341,   236,     1,   342,
-      11,     4,    70,     4,    29,   432,     4,    10,     4,    12,
-      13,    14,    29,     4,     5,    16,    14,     8,     9,    15,
-     477,     4,   479,     4,   195,    70,    29,    30,    31,     4,
-      33,   111,    30,   111,    59,   107,   114,    50,    51,    52,
-      53,    32,    59,   115,    14,   183,   217,    18,    19,    20,
-      21,   112,   281,    24,   245,   284,   285,   111,   126,    62,
-      63,    64,    65,     4,   122,    70,     7,     8,     9,   119,
-      73,    38,    83,   107,    77,   125,    79,   111,    76,    80,
-      71,   126,    78,    70,    25,   324,    27,    70,   327,    70,
-      31,   229,   181,   436,   107,    70,    70,   100,   111,   188,
-     103,   104,   105,   106,   107,   108,    70,   245,   111,   122,
-     453,   114,   115,   116,   457,   542,   254,   234,   109,    86,
-     311,   126,   125,   111,    29,   312,   117,   118,    99,   368,
-       4,   220,   371,   103,   104,   105,   106,   107,   108,   126,
-       0,   111,   112,   113,   114,   115,   116,     4,   237,   238,
-     239,    70,   126,     4,    95,   293,    61,   127,   128,   129,
-     101,    10,   126,    10,   123,    12,    13,    14,   109,    74,
-       8,     9,   310,   311,    75,    50,    51,    52,    53,     4,
-      81,    82,    29,    30,    31,     4,    33,   276,   427,   278,
-     429,   111,   330,   331,    32,   540,   334,   111,   137,   138,
-     114,     7,   111,   112,   113,   114,    55,    56,    57,    58,
-      59,    60,   123,   351,   107,    62,    63,    64,    65,    25,
-     111,    70,   311,   114,   313,    31,    73,   414,   111,   112,
-      77,     7,    79,    71,   112,   113,   325,   176,   177,   328,
-     111,   111,   111,   114,   114,     4,   102,   385,   386,    25,
-     100,     4,   124,   342,   343,    31,   103,   104,   105,   106,
-     107,   108,   121,   111,   111,   111,   355,   114,   115,   116,
-      17,   109,   112,     4,    21,     4,   115,    24,   125,   117,
-     118,   125,   103,   104,   105,   106,    70,   108,    14,    95,
-     111,   112,   113,   114,   100,   116,   102,   107,   125,   125,
-     111,   111,   125,   109,   114,   115,    14,   125,   125,   125,
-     539,   117,   118,   451,   111,   108,   433,   434,   121,    95,
-     121,   100,   122,   111,   100,    70,   102,   126,   126,     4,
-     126,   126,   126,   109,   423,   126,   474,   126,   123,     4,
-     123,   117,   118,   481,   124,   123,    71,   436,   437,    70,
-       4,   107,   441,     4,     4,     4,   445,   125,     4,    70,
-      70,   119,   125,   452,   453,   125,    10,   456,   457,    10,
-     459,   107,   107,   462,   107,    22,   125,   103,   104,   105,
-     106,   125,   108,   472,   473,   111,   112,   113,   114,   123,
-     116,    10,   530,   125,    10,   103,   104,   105,   106,    99,
-     108,    70,   475,   111,   112,   113,   114,   121,   116,   121,
-     103,   104,   105,   106,   107,   108,   121,    22,   111,   508,
-     509,   114,   511,   116,   513,    42,    22,   516,    22,   518,
-     121,    48,    49,     4,     4,     4,    22,    54,    55,    56,
-      57,    58,    59,    60,   123,   126,   126,     4,   125,    66,
-      67,    68,    69,    34,    35,    36,    37,    38,    39,    40,
-      41,   125,    43,    44,    45,    46,    47,   103,   104,   105,
-     106,   107,   108,    22,    22,   111,   112,   113,   114,   115,
-     116,     4,     4,   126,   126,    12,   122,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,     4,    96,
-      97,    98,     4,   120,     4,   122,     4,   229,    59,   351,
-     128,   128,   129,   130,   131,   132,   133,   134,   135,   103,
-     104,   105,   106,   107,   108,   217,   189,   111,   112,   113,
-     114,   115,   116,   109,   218,   451,   508,   279,   119,   279,
-     121,   122,   103,   104,   105,   106,   107,   108,   334,   386,
-     111,   254,   183,   114,   115,   116,   103,   104,   105,   106,
-     310,   108,   188,   220,   111,   112,   113,   114,    -1,   116,
+      78,    64,   128,   110,   178,   336,   217,     4,    11,   111,
+      18,    19,    20,    21,   231,   337,    24,    70,     4,    16,
+      29,   427,   112,    10,   191,    12,    13,    14,     4,     4,
+       5,     8,     9,     8,     9,     4,     4,     4,    14,    70,
+      38,   240,    29,    30,    31,   212,    33,    15,    70,    29,
+      59,   111,    70,   179,    30,    32,    70,    32,   107,    70,
+     472,   122,   474,   107,     7,   276,   115,   111,   279,   280,
+     114,   115,   111,   126,     4,    62,    63,    64,    65,    59,
+      83,   107,    25,    80,    70,   111,    73,    85,    31,     0,
+      77,    99,    79,   123,    71,   126,    71,     4,   224,   177,
+      76,    70,   319,    70,   126,   322,   184,   306,   126,   431,
+      78,    70,   126,    29,   240,   126,   103,   104,   105,   106,
+     107,   108,   229,   249,   111,     4,   448,   114,   115,   116,
+     452,   537,   109,   307,   109,   135,   136,   215,   125,     4,
+     117,   118,   117,   118,    75,    61,   363,   119,     4,   366,
+      81,    82,    95,   125,   232,   233,   234,   100,    74,   102,
+      17,   111,   288,     7,    21,   123,   109,    24,    50,    51,
+      52,    53,   107,   173,   117,   118,     4,   102,   100,   305,
+     306,    25,     4,   111,   124,     1,   114,    31,     4,    50,
+      51,    52,    53,   271,    10,   273,    12,    13,    14,   325,
+     326,   121,   111,   329,   535,   422,   111,   424,   111,   112,
+     113,   114,     4,    29,    30,    31,    14,    33,   115,   111,
+     346,    10,   114,   111,   111,   107,   114,   114,   306,   111,
+     308,   103,   104,   105,   106,   409,   108,     4,   111,   111,
+     122,   114,   320,    70,   116,   323,    62,    63,    64,    65,
+     125,    95,   111,   111,   380,   381,   100,    73,   102,   337,
+     338,    77,   125,    79,   100,   109,    55,    56,    57,    58,
+      59,    60,   350,   117,   118,   125,   125,   125,   125,   125,
+     121,    70,   108,   122,   100,    70,   126,   103,   104,   105,
+     106,   107,   108,   126,   126,   111,   126,   126,   114,   115,
+     116,   126,   126,    14,   123,   103,   104,   105,   106,   125,
+     108,   123,   123,   111,   112,   113,   114,   124,   116,     4,
+     446,   428,   429,   534,     4,   111,     4,     7,     8,     9,
+      71,   103,   104,   105,   106,   107,   108,    70,   107,   111,
+     418,     4,   114,   469,   116,    25,   111,    27,    14,     4,
+     476,    31,     4,   431,   432,     4,     4,   125,   436,   119,
+      70,    70,   440,   125,   125,    10,    10,   107,   107,   447,
+     448,   107,    22,   451,   452,   125,   454,   125,   123,   457,
+      10,   125,    10,    99,    70,    22,   121,   121,    22,   467,
+     468,   121,   103,   104,   105,   106,   107,   108,    22,   525,
+     111,   112,   113,   114,   115,   116,   121,   470,     4,   103,
+     104,   105,   106,     4,   108,    95,   127,   128,   129,     4,
+      22,   101,   116,   123,   126,   503,   504,   126,   506,   109,
+     508,   126,     4,   511,   125,   513,    22,   103,   104,   105,
+     106,   125,   108,    22,   126,   111,   112,   113,   114,    42,
+     116,     4,     4,     4,     4,    48,    49,     4,     4,    59,
+     224,    54,    55,    56,    57,    58,    59,    60,    12,   346,
+     126,   185,   108,    66,    67,    68,    69,    34,    35,    36,
+      37,    38,    39,    40,    41,   212,    43,    44,    45,    46,
+      47,   103,   104,   105,   106,   107,   108,   446,   503,   111,
+     112,   113,   114,   115,   116,   213,   329,   381,   274,   179,
+     122,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,   274,    96,    97,    98,   249,   120,   305,   122,
+     111,   184,   215,    -1,    -1,   128,   129,   130,   131,   132,
+     133,   134,   135,   103,   104,   105,   106,   107,   108,    -1,
+      -1,   111,   112,   113,   114,   115,   116,    -1,   103,   104,
+     105,   106,   119,   108,   121,   122,   111,   112,   113,   114,
+      -1,   116,   103,   104,   105,   106,   107,   108,    -1,    -1,
+     111,    -1,    -1,   114,   115,   116,   103,   104,   105,   106,
+      -1,   108,    -1,    -1,   111,   112,   113,   114,    -1,   116,
      103,   104,   105,   106,    -1,   108,    -1,    -1,   111,   112,
      113,   114,    -1,   116,   103,   104,   105,   106,    -1,   108,
       -1,    -1,   111,   112,   113,   114,    -1,   116,   103,   104,
      105,   106,    -1,   108,    -1,    -1,   111,   112,   113,   114,
       -1,   116,   103,   104,   105,   106,    -1,   108,    -1,    -1,
      111,   103,   104,   105,   106,   116,   108,    -1,    -1,   111,
-     103,   104,   105,   106,   116,   108,    -1,    -1,   111,   103,
-     104,   105,   106,   116,   108,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   116
+      -1,    -1,    -1,    -1,   116
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -2375,60 +2272,59 @@
 static const yytype_uint16 yystos[] =
 {
        0,     4,     7,     8,     9,    25,    27,    31,    95,   101,
-     109,   137,   138,   139,   140,   141,   143,   144,   156,   159,
-     164,   111,   112,   111,   122,   160,   165,   145,   111,   157,
-       4,     0,   139,     4,    70,     4,   123,   161,   162,     4,
-     107,   111,   114,   115,   251,   252,    50,    51,    52,    53,
-     223,     4,    31,   100,   109,   117,   118,   140,   146,   150,
-     151,   158,   159,   212,   213,   214,   111,   123,   111,   114,
-     163,   263,   166,   107,   147,   148,     4,   151,   102,    14,
-      30,    76,   152,   153,   214,     4,   124,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    96,    97,
-      98,   172,   173,   174,   175,   176,   177,   178,   186,   187,
-     188,   121,   112,   111,   103,   104,   105,   106,   108,   112,
-     113,   116,   247,   255,   262,   263,   264,   111,   154,     4,
-     115,   263,   125,   125,   125,   125,   125,   125,   125,     4,
-     188,   264,   107,   115,   253,   254,   255,   254,    70,   186,
-     122,   155,   247,   248,   249,   250,   254,   111,   114,   149,
-     107,   111,    50,    51,    52,    53,   107,   111,   122,   179,
-     180,   111,   111,   149,   149,   167,   121,   121,   108,   100,
-     258,   259,   122,    70,   126,   126,   126,   256,   257,    70,
-     126,   126,   126,   126,   126,   168,   149,   149,   123,   255,
-     260,   261,   256,   250,   123,   260,   180,     4,     5,    32,
-     109,   117,   118,   141,   142,   169,   181,   209,   210,   211,
-     124,   123,   170,   111,     4,     4,    71,   211,     1,   212,
-     215,   261,   171,   223,    70,     4,    10,    12,    13,    14,
-      29,    30,    31,    33,    62,    63,    64,    65,    73,    77,
-      79,   107,   111,   114,   115,   125,   146,   182,   197,   199,
-     205,   207,   219,   224,   228,   230,   232,   233,   234,   242,
-     243,   244,   247,   107,   264,   253,    14,   255,    14,   255,
-     255,   220,   111,   114,   221,   222,   234,   247,   229,     4,
-       4,     4,   248,   225,   125,     4,   235,    34,    35,    36,
-      37,    38,    39,    40,    41,    43,    44,    45,    46,    47,
-     119,   121,   122,   231,   195,   255,    10,    55,    56,    57,
-      58,    59,    60,    70,   245,   246,   255,   245,   246,   223,
-      70,    70,   223,   223,   125,   183,   198,   200,   111,   240,
-     241,   247,   206,   125,   111,   114,   247,   252,    14,   111,
-     114,   115,   127,   128,   129,   226,   234,   247,   255,   256,
-     255,    18,    19,    20,    21,    24,    99,   196,    10,   253,
-     255,    10,   253,   255,   107,   216,   217,   247,   247,   107,
-     107,   241,   190,   201,   202,    22,    70,   126,   195,   111,
-     208,   237,   255,   111,   236,   237,   255,   155,   255,    42,
-      48,    49,    54,    55,    56,    57,    58,    59,    60,    66,
-      67,    68,    69,   120,   122,   128,   129,   130,   131,   132,
-     133,   134,   135,   227,   123,   125,   253,    10,   253,    10,
-      99,   218,    70,   121,   121,   126,    11,    83,   185,   191,
-       4,    15,    78,   203,     4,    16,    80,   204,   247,   111,
-     240,   121,    22,    70,   126,   238,    22,    70,   126,    22,
-     256,   255,   121,   111,   114,   253,   253,   217,   264,   264,
-     237,   255,    75,    81,    82,   189,     4,   255,     4,   255,
-       4,    22,   233,   255,   111,   237,    17,    21,    24,   239,
-     255,   111,   237,   255,   123,   255,   126,   126,     4,   255,
-     255,   111,   247,   184,   214,   238,   238,   247,   125,    22,
-     125,    22,     4,    70,     4,     4,    70,     4,    70,   192,
-       4,   236,   255,   111,   114,   255,   255,   255,   255,    29,
-      61,    74,   193,   126,   126,   126,     4,     4,     4,   194,
-     247,     4,   223,   195,   217
+     109,   137,   138,   139,   140,   141,   143,   144,   155,   158,
+     163,   111,   112,   111,   122,   159,   164,   145,   111,   156,
+       4,     0,   139,     4,    70,     4,   123,   160,   161,     4,
+     107,   111,   114,   115,   250,   251,    50,    51,    52,    53,
+     222,     4,    31,   100,   109,   117,   118,   140,   146,   149,
+     150,   157,   158,   211,   212,   213,   111,   123,   111,   114,
+     162,   262,   165,   107,   147,     4,   150,   102,    14,    30,
+      76,   151,   152,   213,     4,   124,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    96,    97,    98,
+     171,   172,   173,   174,   175,   176,   177,   185,   186,   187,
+     121,   111,   103,   104,   105,   106,   108,   112,   113,   116,
+     246,   254,   261,   262,   263,   111,   153,     4,   115,   262,
+     125,   125,   125,   125,   125,   125,   125,     4,   187,   263,
+     107,   115,   252,   253,   254,    70,   185,   122,   154,   246,
+     247,   248,   249,   253,   111,   114,   148,   107,   111,    50,
+      51,    52,    53,   107,   111,   122,   178,   179,   111,   111,
+     148,   148,   166,   121,   108,   100,   257,   258,   122,    70,
+     126,   126,   126,   255,   256,    70,   126,   126,   126,   126,
+     126,   167,   148,   123,   254,   259,   260,   255,   249,   123,
+     259,   179,     4,     5,    32,   109,   117,   118,   141,   142,
+     168,   180,   208,   209,   210,   124,   123,   169,   111,     4,
+       4,    71,   210,     1,   211,   214,   260,   170,   222,    70,
+       4,    10,    12,    13,    14,    29,    30,    31,    33,    62,
+      63,    64,    65,    73,    77,    79,   107,   111,   114,   115,
+     125,   146,   181,   196,   198,   204,   206,   218,   223,   227,
+     229,   231,   232,   233,   241,   242,   243,   246,   107,   263,
+     252,    14,   254,    14,   254,   254,   219,   111,   114,   220,
+     221,   233,   246,   228,     4,     4,     4,   247,   224,   125,
+       4,   234,    34,    35,    36,    37,    38,    39,    40,    41,
+      43,    44,    45,    46,    47,   119,   121,   122,   230,   194,
+     254,    10,    55,    56,    57,    58,    59,    60,    70,   244,
+     245,   254,   244,   245,   222,    70,    70,   222,   222,   125,
+     182,   197,   199,   111,   239,   240,   246,   205,   125,   111,
+     114,   246,   251,    14,   111,   114,   115,   127,   128,   129,
+     225,   233,   246,   254,   255,   254,    18,    19,    20,    21,
+      24,    99,   195,    10,   252,   254,    10,   252,   254,   107,
+     215,   216,   246,   246,   107,   107,   240,   189,   200,   201,
+      22,    70,   126,   194,   111,   207,   236,   254,   111,   235,
+     236,   254,   154,   254,    42,    48,    49,    54,    55,    56,
+      57,    58,    59,    60,    66,    67,    68,    69,   120,   122,
+     128,   129,   130,   131,   132,   133,   134,   135,   226,   123,
+     125,   252,    10,   252,    10,    99,   217,    70,   121,   121,
+     126,    11,    83,   184,   190,     4,    15,    78,   202,     4,
+      16,    80,   203,   246,   111,   239,   121,    22,    70,   126,
+     237,    22,    70,   126,    22,   255,   254,   121,   111,   114,
+     252,   252,   216,   263,   263,   236,   254,    75,    81,    82,
+     188,     4,   254,     4,   254,     4,    22,   232,   254,   111,
+     236,    17,    21,    24,   238,   254,   111,   236,   254,   123,
+     254,   126,   126,     4,   254,   254,   111,   246,   183,   213,
+     237,   237,   246,   125,    22,   125,    22,     4,    70,     4,
+       4,    70,     4,    70,   191,     4,   235,   254,   111,   114,
+     254,   254,   254,   254,    29,    61,    74,   192,   126,   126,
+     126,     4,     4,     4,   193,   246,     4,   222,   194,   216
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2443,18 +2339,9 @@
 
 /* Like YYERROR except do call yyerror.  This remains here temporarily
    to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  However,
-   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
-   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
-   discussed.  */
+   Once GCC version 2 has supplanted version 1, this can go.  */
 
 #define YYFAIL		goto yyerrlab
-#if defined YYFAIL
-  /* This is here to suppress warnings from the GCC cpp's
-     -Wunused-macros.  Normally we don't worry about that warning, but
-     some users do, and we want to make it easy for users to remove
-     YYFAIL uses, which will produce warnings from Bison 2.5.  */
-#endif
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
@@ -2511,7 +2398,7 @@
    we won't break user code: when these are the locations we know.  */
 
 #ifndef YY_LOCATION_PRINT
-# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
+# if YYLTYPE_IS_TRIVIAL
 #  define YY_LOCATION_PRINT(File, Loc)			\
      fprintf (File, "%d.%d-%d.%d",			\
 	      (Loc).first_line, (Loc).first_column,	\
@@ -2628,20 +2515,17 @@
 #if (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 static void
-yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
 #else
 static void
-yy_stack_print (yybottom, yytop)
-    yytype_int16 *yybottom;
-    yytype_int16 *yytop;
+yy_stack_print (bottom, top)
+    yytype_int16 *bottom;
+    yytype_int16 *top;
 #endif
 {
   YYFPRINTF (stderr, "Stack now");
-  for (; yybottom <= yytop; yybottom++)
-    {
-      int yybot = *yybottom;
-      YYFPRINTF (stderr, " %d", yybot);
-    }
+  for (; bottom <= top; ++bottom)
+    YYFPRINTF (stderr, " %d", *bottom);
   YYFPRINTF (stderr, "\n");
 }
 
@@ -2677,11 +2561,11 @@
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
-      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
+      fprintf (stderr, "   $%d = ", yyi + 1);
       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
 		       &(yyvsp[(yyi + 1) - (yynrhs)])
 		       		       , yyscanner, interp);
-      YYFPRINTF (stderr, "\n");
+      fprintf (stderr, "\n");
     }
 }
 
@@ -2965,8 +2849,10 @@
 	break;
     }
 }
+
 
 /* Prevent warnings from -Wmissing-prototypes.  */
+
 #ifdef YYPARSE_PARAM
 #if defined __STDC__ || defined __cplusplus
 int yyparse (void *YYPARSE_PARAM);
@@ -2985,9 +2871,10 @@
 
 
 
-/*-------------------------.
-| yyparse or yypush_parse.  |
-`-------------------------*/
+
+/*----------.
+| yyparse.  |
+`----------*/
 
 #ifdef YYPARSE_PARAM
 #if (defined __STDC__ || defined __C99__FUNC__ \
@@ -3012,46 +2899,22 @@
 #endif
 #endif
 {
-/* The lookahead symbol.  */
+  /* The look-ahead symbol.  */
 int yychar;
 
-/* The semantic value of the lookahead symbol.  */
+/* The semantic value of the look-ahead symbol.  */
 YYSTYPE yylval;
 
-    /* Number of syntax errors so far.  */
-    int yynerrs;
-
-    int yystate;
-    /* Number of tokens to shift before error messages enabled.  */
-    int yyerrstatus;
-
-    /* The stacks and their tools:
-       `yyss': related to states.
-       `yyvs': related to semantic values.
-
-       Refer to the stacks thru separate pointers, to allow yyoverflow
-       to reallocate them elsewhere.  */
-
-    /* The state stack.  */
-    yytype_int16 yyssa[YYINITDEPTH];
-    yytype_int16 *yyss;
-    yytype_int16 *yyssp;
-
-    /* The semantic value stack.  */
-    YYSTYPE yyvsa[YYINITDEPTH];
-    YYSTYPE *yyvs;
-    YYSTYPE *yyvsp;
-
-    YYSIZE_T yystacksize;
+/* Number of syntax errors so far.  */
+int yynerrs;
 
+  int yystate;
   int yyn;
   int yyresult;
-  /* Lookahead token as an internal (translated) token number.  */
-  int yytoken;
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-
+  /* Number of tokens to shift before error messages enabled.  */
+  int yyerrstatus;
+  /* Look-ahead token as an internal (translated) token number.  */
+  int yytoken = 0;
 #if YYERROR_VERBOSE
   /* Buffer for error messages, and its allocated size.  */
   char yymsgbuf[128];
@@ -3059,28 +2922,51 @@
   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
 #endif
 
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to reallocate them elsewhere.  */
+
+  /* The state stack.  */
+  yytype_int16 yyssa[YYINITDEPTH];
+  yytype_int16 *yyss = yyssa;
+  yytype_int16 *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  YYSTYPE *yyvsp;
+
+
+
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
 
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+
   /* The number of symbols on the RHS of the reduced rule.
      Keep to zero when no symbol should be popped.  */
   int yylen = 0;
 
-  yytoken = 0;
-  yyss = yyssa;
-  yyvs = yyvsa;
-  yystacksize = YYINITDEPTH;
-
   YYDPRINTF ((stderr, "Starting parse\n"));
 
   yystate = 0;
   yyerrstatus = 0;
   yynerrs = 0;
-  yychar = YYEMPTY; /* Cause a token to be read.  */
+  yychar = YYEMPTY;		/* Cause a token to be read.  */
 
   /* Initialize stack pointers.
      Waste one element of value and location stack
      so that they stay on the same level as the state stack.
      The wasted elements are never initialized.  */
+
   yyssp = yyss;
   yyvsp = yyvs;
 
@@ -3110,6 +2996,7 @@
 	YYSTYPE *yyvs1 = yyvs;
 	yytype_int16 *yyss1 = yyss;
 
+
 	/* Each stack pointer address is followed by the size of the
 	   data in use in that stack, in bytes.  This used to be a
 	   conditional around just the two extra args, but that might
@@ -3117,6 +3004,7 @@
 	yyoverflow (YY_("memory exhausted"),
 		    &yyss1, yysize * sizeof (*yyssp),
 		    &yyvs1, yysize * sizeof (*yyvsp),
+
 		    &yystacksize);
 
 	yyss = yyss1;
@@ -3139,8 +3027,9 @@
 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
 	if (! yyptr)
 	  goto yyexhaustedlab;
-	YYSTACK_RELOCATE (yyss_alloc, yyss);
-	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+	YYSTACK_RELOCATE (yyss);
+	YYSTACK_RELOCATE (yyvs);
+
 #  undef YYSTACK_RELOCATE
 	if (yyss1 != yyssa)
 	  YYSTACK_FREE (yyss1);
@@ -3151,6 +3040,7 @@
       yyssp = yyss + yysize - 1;
       yyvsp = yyvs + yysize - 1;
 
+
       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
 		  (unsigned long int) yystacksize));
 
@@ -3160,9 +3050,6 @@
 
   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
 
-  if (yystate == YYFINAL)
-    YYACCEPT;
-
   goto yybackup;
 
 /*-----------.
@@ -3171,16 +3058,16 @@
 yybackup:
 
   /* Do appropriate processing given the current state.  Read a
-     lookahead token if we need one and don't already have one.  */
+     look-ahead token if we need one and don't already have one.  */
 
-  /* First try to decide what to do without reference to lookahead token.  */
+  /* First try to decide what to do without reference to look-ahead token.  */
   yyn = yypact[yystate];
   if (yyn == YYPACT_NINF)
     goto yydefault;
 
-  /* Not known => get a lookahead token if don't already have one.  */
+  /* Not known => get a look-ahead token if don't already have one.  */
 
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
   if (yychar == YYEMPTY)
     {
       YYDPRINTF ((stderr, "Reading a token: "));
@@ -3212,16 +3099,20 @@
       goto yyreduce;
     }
 
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
   /* Count tokens shifted since error; after three, turn off error
      status.  */
   if (yyerrstatus)
     yyerrstatus--;
 
-  /* Shift the lookahead token.  */
+  /* Shift the look-ahead token.  */
   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
 
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
+  /* Discard the shifted token unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
 
   yystate = yyn;
   *++yyvsp = yylval;
@@ -3261,30 +3152,22 @@
   switch (yyn)
     {
         case 2:
-
-/* Line 1464 of yacc.c  */
-#line 1166 "compilers/imcc/imcc.y"
+#line 1081 "compilers/imcc/imcc.y"
     { if (yynerrs) YYABORT; (yyval.i) = 0; }
     break;
 
   case 5:
-
-/* Line 1464 of yacc.c  */
-#line 1175 "compilers/imcc/imcc.y"
+#line 1090 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 6:
-
-/* Line 1464 of yacc.c  */
-#line 1176 "compilers/imcc/imcc.y"
+#line 1091 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 7:
-
-/* Line 1464 of yacc.c  */
-#line 1178 "compilers/imcc/imcc.y"
+#line 1093 "compilers/imcc/imcc.y"
     {
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3293,9 +3176,7 @@
     break;
 
   case 8:
-
-/* Line 1464 of yacc.c  */
-#line 1184 "compilers/imcc/imcc.y"
+#line 1099 "compilers/imcc/imcc.y"
     {
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3304,44 +3185,32 @@
     break;
 
   case 9:
-
-/* Line 1464 of yacc.c  */
-#line 1189 "compilers/imcc/imcc.y"
+#line 1104 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 10:
-
-/* Line 1464 of yacc.c  */
-#line 1190 "compilers/imcc/imcc.y"
+#line 1105 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 11:
-
-/* Line 1464 of yacc.c  */
-#line 1191 "compilers/imcc/imcc.y"
+#line 1106 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 12:
-
-/* Line 1464 of yacc.c  */
-#line 1192 "compilers/imcc/imcc.y"
+#line 1107 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 13:
-
-/* Line 1464 of yacc.c  */
-#line 1196 "compilers/imcc/imcc.y"
+#line 1111 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 14:
-
-/* Line 1464 of yacc.c  */
-#line 1198 "compilers/imcc/imcc.y"
+#line 1113 "compilers/imcc/imcc.y"
     {
            (yyval.i) = 0;
            do_loadlib(interp, (yyvsp[(2) - (3)].s));
@@ -3350,9 +3219,7 @@
     break;
 
   case 15:
-
-/* Line 1464 of yacc.c  */
-#line 1207 "compilers/imcc/imcc.y"
+#line 1122 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->line = atoi((yyvsp[(2) - (5)].s));
            /* set_filename() frees the STRINGC */
@@ -3361,9 +3228,7 @@
     break;
 
   case 16:
-
-/* Line 1464 of yacc.c  */
-#line 1213 "compilers/imcc/imcc.y"
+#line 1128 "compilers/imcc/imcc.y"
     {
            /* set_filename() frees the STRINGC */
            set_filename(interp, (yyvsp[(2) - (3)].s));
@@ -3371,9 +3236,7 @@
     break;
 
   case 17:
-
-/* Line 1464 of yacc.c  */
-#line 1221 "compilers/imcc/imcc.y"
+#line 1136 "compilers/imcc/imcc.y"
     {
           /* We'll want to store an entry while emitting instructions, so just
            * store annotation like it's an instruction. */
@@ -3384,9 +3247,7 @@
     break;
 
   case 18:
-
-/* Line 1464 of yacc.c  */
-#line 1233 "compilers/imcc/imcc.y"
+#line 1148 "compilers/imcc/imcc.y"
     {
             STRING * const hll_name = Parrot_str_unescape(interp, (yyvsp[(2) - (2)].s) + 1, '"', NULL);
             Parrot_pcc_set_HLL(interp, CURRENT_CONTEXT(interp),
@@ -3399,16 +3260,12 @@
     break;
 
   case 19:
-
-/* Line 1464 of yacc.c  */
-#line 1245 "compilers/imcc/imcc.y"
+#line 1160 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 20:
-
-/* Line 1464 of yacc.c  */
-#line 1246 "compilers/imcc/imcc.y"
+#line 1161 "compilers/imcc/imcc.y"
     {
              mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
              mem_sys_free((yyvsp[(4) - (6)].s));
@@ -3417,34 +3274,12 @@
     break;
 
   case 21:
-
-/* Line 1464 of yacc.c  */
-#line 1254 "compilers/imcc/imcc.y"
+#line 1169 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 22:
-
-/* Line 1464 of yacc.c  */
-#line 1255 "compilers/imcc/imcc.y"
-    {
-           (yyval.i) = mk_pmc_const(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s));
-           mem_sys_free((yyvsp[(6) - (6)].s));
-           IMCC_INFO(interp)->is_def = 0;
-         }
-    break;
-
-  case 23:
-
-/* Line 1464 of yacc.c  */
-#line 1261 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->is_def = 1; }
-    break;
-
-  case 24:
-
-/* Line 1464 of yacc.c  */
-#line 1262 "compilers/imcc/imcc.y"
+#line 1170 "compilers/imcc/imcc.y"
     {
            (yyval.i) = mk_pmc_const_named(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s));
            mem_sys_free((yyvsp[(3) - (6)].s));
@@ -3453,52 +3288,38 @@
          }
     break;
 
-  case 29:
-
-/* Line 1464 of yacc.c  */
-#line 1280 "compilers/imcc/imcc.y"
+  case 27:
+#line 1188 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
-  case 30:
-
-/* Line 1464 of yacc.c  */
-#line 1281 "compilers/imcc/imcc.y"
+  case 28:
+#line 1189 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
-  case 31:
-
-/* Line 1464 of yacc.c  */
-#line 1282 "compilers/imcc/imcc.y"
+  case 29:
+#line 1190 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
-  case 32:
-
-/* Line 1464 of yacc.c  */
-#line 1283 "compilers/imcc/imcc.y"
+  case 30:
+#line 1191 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
-  case 33:
-
-/* Line 1464 of yacc.c  */
-#line 1284 "compilers/imcc/imcc.y"
+  case 31:
+#line 1192 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
-  case 36:
-
-/* Line 1464 of yacc.c  */
-#line 1289 "compilers/imcc/imcc.y"
+  case 34:
+#line 1197 "compilers/imcc/imcc.y"
     { clear_state(interp); }
     break;
 
-  case 37:
-
-/* Line 1464 of yacc.c  */
-#line 1291 "compilers/imcc/imcc.y"
+  case 35:
+#line 1199 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp, IMCC_INFO(interp)->cur_unit,
                     (yyvsp[(2) - (3)].s), 0, IMCC_INFO(interp)->regs,
@@ -3507,20 +3328,16 @@
          }
     break;
 
-  case 38:
-
-/* Line 1464 of yacc.c  */
-#line 1298 "compilers/imcc/imcc.y"
+  case 36:
+#line 1206 "compilers/imcc/imcc.y"
     {
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM);
          }
     break;
 
-  case 39:
-
-/* Line 1464 of yacc.c  */
-#line 1303 "compilers/imcc/imcc.y"
+  case 37:
+#line 1211 "compilers/imcc/imcc.y"
     {
            (yyval.i) = iSUBROUTINE(interp,
                     IMCC_INFO(interp)->cur_unit,
@@ -3530,19 +3347,15 @@
          }
     break;
 
-  case 40:
-
-/* Line 1464 of yacc.c  */
-#line 1311 "compilers/imcc/imcc.y"
+  case 38:
+#line 1219 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr));
          }
     break;
 
-  case 41:
-
-/* Line 1464 of yacc.c  */
-#line 1315 "compilers/imcc/imcc.y"
+  case 39:
+#line 1223 "compilers/imcc/imcc.y"
     {
            char   *name = mem_sys_strdup((yyvsp[(2) - (4)].s) + 1);
            SymReg *r    = mk_pasm_reg(interp, (yyvsp[(4) - (4)].s));
@@ -3557,24 +3370,18 @@
          }
     break;
 
-  case 42:
-
-/* Line 1464 of yacc.c  */
-#line 1327 "compilers/imcc/imcc.y"
+  case 40:
+#line 1235 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;}
     break;
 
-  case 44:
-
-/* Line 1464 of yacc.c  */
-#line 1335 "compilers/imcc/imcc.y"
+  case 42:
+#line 1243 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM); }
     break;
 
-  case 45:
-
-/* Line 1464 of yacc.c  */
-#line 1338 "compilers/imcc/imcc.y"
+  case 43:
+#line 1246 "compilers/imcc/imcc.y"
     {
            /* if (optimizer_level & OPT_PASM)
                          imc_compile_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3584,10 +3391,8 @@
          }
     break;
 
-  case 48:
-
-/* Line 1464 of yacc.c  */
-#line 1354 "compilers/imcc/imcc.y"
+  case 46:
+#line 1262 "compilers/imcc/imcc.y"
     {
            int re_open = 0;
            (yyval.i) = 0;
@@ -3601,33 +3406,25 @@
          }
     break;
 
-  case 49:
-
-/* Line 1464 of yacc.c  */
-#line 1368 "compilers/imcc/imcc.y"
+  case 47:
+#line 1276 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); }
     break;
 
-  case 50:
-
-/* Line 1464 of yacc.c  */
-#line 1369 "compilers/imcc/imcc.y"
+  case 48:
+#line 1277 "compilers/imcc/imcc.y"
     { (yyval.sr) = NULL; }
     break;
 
-  case 51:
-
-/* Line 1464 of yacc.c  */
-#line 1373 "compilers/imcc/imcc.y"
+  case 49:
+#line 1281 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys    = 0;
          }
     break;
 
-  case 52:
-
-/* Line 1464 of yacc.c  */
-#line 1377 "compilers/imcc/imcc.y"
+  case 50:
+#line 1285 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -3635,45 +3432,35 @@
          }
     break;
 
-  case 53:
-
-/* Line 1464 of yacc.c  */
-#line 1385 "compilers/imcc/imcc.y"
+  case 51:
+#line 1293 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 54:
-
-/* Line 1464 of yacc.c  */
-#line 1387 "compilers/imcc/imcc.y"
+  case 52:
+#line 1295 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) - (3)].sr);
            (yyval.sr) = IMCC_INFO(interp)->keys[0];
          }
     break;
 
-  case 55:
-
-/* Line 1464 of yacc.c  */
-#line 1395 "compilers/imcc/imcc.y"
+  case 53:
+#line 1303 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PCCSUB);
          }
     break;
 
-  case 56:
-
-/* Line 1464 of yacc.c  */
-#line 1399 "compilers/imcc/imcc.y"
+  case 54:
+#line 1307 "compilers/imcc/imcc.y"
     {
            iSUBROUTINE(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (3)].sr));
          }
     break;
 
-  case 57:
-
-/* Line 1464 of yacc.c  */
-#line 1403 "compilers/imcc/imcc.y"
+  case 55:
+#line 1311 "compilers/imcc/imcc.y"
     {
           IMCC_INFO(interp)->cur_call->pcc_sub->pragma = (yyvsp[(5) - (6)].t);
           if (!IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid) {
@@ -3683,31 +3470,23 @@
         }
     break;
 
-  case 58:
-
-/* Line 1464 of yacc.c  */
-#line 1411 "compilers/imcc/imcc.y"
+  case 56:
+#line 1319 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
-  case 59:
-
-/* Line 1464 of yacc.c  */
-#line 1415 "compilers/imcc/imcc.y"
+  case 57:
+#line 1323 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 60:
-
-/* Line 1464 of yacc.c  */
-#line 1416 "compilers/imcc/imcc.y"
+  case 58:
+#line 1324 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 61:
-
-/* Line 1464 of yacc.c  */
-#line 1418 "compilers/imcc/imcc.y"
+  case 59:
+#line 1326 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                  add_pcc_named_param(interp, IMCC_INFO(interp)->cur_call,
@@ -3719,24 +3498,18 @@
          }
     break;
 
-  case 62:
-
-/* Line 1464 of yacc.c  */
-#line 1430 "compilers/imcc/imcc.y"
+  case 60:
+#line 1338 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
-  case 63:
-
-/* Line 1464 of yacc.c  */
-#line 1430 "compilers/imcc/imcc.y"
+  case 61:
+#line 1338 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(3) - (3)].sr); IMCC_INFO(interp)->is_def = 0; }
     break;
 
-  case 64:
-
-/* Line 1464 of yacc.c  */
-#line 1435 "compilers/imcc/imcc.y"
+  case 62:
+#line 1343 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(3) - (3)].t) & VT_OPT_FLAG && (yyvsp[(1) - (3)].t) != 'I') {
                const char *type;
@@ -3752,23 +3525,19 @@
            }
            if ((yyvsp[(3) - (3)].t) & VT_NAMED && !((yyvsp[(3) - (3)].t) & VT_FLAT) && !IMCC_INFO(interp)->adv_named_id)
                adv_named_set(interp, (yyvsp[(2) - (3)].s));
-           (yyval.sr) = mk_ident(interp, (yyvsp[(2) - (3)].s), (yyvsp[(1) - (3)].t));
+           (yyval.sr) = mk_ident(interp, (yyvsp[(2) - (3)].s), (yyvsp[(1) - (3)].t), VTIDENTIFIER);
            (yyval.sr)->type |= (yyvsp[(3) - (3)].t);
            mem_sys_free((yyvsp[(2) - (3)].s));
           }
     break;
 
-  case 65:
-
-/* Line 1464 of yacc.c  */
-#line 1459 "compilers/imcc/imcc.y"
+  case 63:
+#line 1367 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 66:
-
-/* Line 1464 of yacc.c  */
-#line 1464 "compilers/imcc/imcc.y"
+  case 64:
+#line 1372 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_sub_address_fromc(interp, (yyvsp[(3) - (4)].s));
@@ -3776,10 +3545,8 @@
          }
     break;
 
-  case 67:
-
-/* Line 1464 of yacc.c  */
-#line 1470 "compilers/imcc/imcc.y"
+  case 65:
+#line 1378 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
@@ -3787,10 +3554,8 @@
          }
     break;
 
-  case 68:
-
-/* Line 1464 of yacc.c  */
-#line 1479 "compilers/imcc/imcc.y"
+  case 66:
+#line 1387 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_VTABLE;
            IMCC_INFO(interp)->cur_unit->vtable_name      = NULL;
@@ -3798,10 +3563,8 @@
          }
     break;
 
-  case 69:
-
-/* Line 1464 of yacc.c  */
-#line 1485 "compilers/imcc/imcc.y"
+  case 67:
+#line 1393 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_VTABLE;
            IMCC_INFO(interp)->cur_unit->vtable_name      = (yyvsp[(3) - (4)].s);
@@ -3809,21 +3572,17 @@
          }
     break;
 
-  case 70:
-
-/* Line 1464 of yacc.c  */
-#line 1494 "compilers/imcc/imcc.y"
+  case 68:
+#line 1402 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = NULL;
            IMCC_INFO(interp)->cur_unit->is_method   = 1;
          }
-    break;
-
-  case 71:
+    break;
 
-/* Line 1464 of yacc.c  */
-#line 1500 "compilers/imcc/imcc.y"
+  case 69:
+#line 1408 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = (yyvsp[(3) - (4)].s);
@@ -3831,10 +3590,8 @@
          }
     break;
 
-  case 72:
-
-/* Line 1464 of yacc.c  */
-#line 1509 "compilers/imcc/imcc.y"
+  case 70:
+#line 1417 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_NSENTRY;
            IMCC_INFO(interp)->cur_unit->ns_entry_name     = NULL;
@@ -3842,10 +3599,8 @@
          }
     break;
 
-  case 73:
-
-/* Line 1464 of yacc.c  */
-#line 1515 "compilers/imcc/imcc.y"
+  case 71:
+#line 1423 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_NSENTRY;
            IMCC_INFO(interp)->cur_unit->ns_entry_name = (yyvsp[(3) - (4)].s);
@@ -3853,30 +3608,24 @@
          }
     break;
 
-  case 74:
-
-/* Line 1464 of yacc.c  */
-#line 1524 "compilers/imcc/imcc.y"
+  case 72:
+#line 1432 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->instance_of = (yyvsp[(3) - (4)].s);
          }
     break;
 
-  case 75:
-
-/* Line 1464 of yacc.c  */
-#line 1532 "compilers/imcc/imcc.y"
+  case 73:
+#line 1440 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->subid = NULL;
          }
     break;
 
-  case 76:
-
-/* Line 1464 of yacc.c  */
-#line 1537 "compilers/imcc/imcc.y"
+  case 74:
+#line 1445 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->subid = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
@@ -3885,67 +3634,51 @@
          }
     break;
 
-  case 77:
-
-/* Line 1464 of yacc.c  */
-#line 1547 "compilers/imcc/imcc.y"
+  case 75:
+#line 1455 "compilers/imcc/imcc.y"
     {
            add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, NULL);
          }
     break;
 
-  case 78:
-
-/* Line 1464 of yacc.c  */
-#line 1551 "compilers/imcc/imcc.y"
+  case 76:
+#line 1459 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
          }
     break;
 
-  case 79:
-
-/* Line 1464 of yacc.c  */
-#line 1556 "compilers/imcc/imcc.y"
+  case 77:
+#line 1464 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
          }
     break;
 
-  case 80:
-
-/* Line 1464 of yacc.c  */
-#line 1563 "compilers/imcc/imcc.y"
+  case 78:
+#line 1471 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "INTVAL",   'S'); }
     break;
 
-  case 81:
-
-/* Line 1464 of yacc.c  */
-#line 1564 "compilers/imcc/imcc.y"
+  case 79:
+#line 1472 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "FLOATVAL", 'S'); }
     break;
 
-  case 82:
-
-/* Line 1464 of yacc.c  */
-#line 1565 "compilers/imcc/imcc.y"
+  case 80:
+#line 1473 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "PMC",      'S'); }
     break;
 
-  case 83:
-
-/* Line 1464 of yacc.c  */
-#line 1566 "compilers/imcc/imcc.y"
+  case 81:
+#line 1474 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "STRING",   'S'); }
     break;
 
-  case 84:
-
-/* Line 1464 of yacc.c  */
-#line 1568 "compilers/imcc/imcc.y"
+  case 82:
+#line 1476 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3958,10 +3691,8 @@
          }
     break;
 
-  case 85:
-
-/* Line 1464 of yacc.c  */
-#line 1579 "compilers/imcc/imcc.y"
+  case 83:
+#line 1487 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3974,17 +3705,13 @@
          }
     break;
 
-  case 86:
-
-/* Line 1464 of yacc.c  */
-#line 1589 "compilers/imcc/imcc.y"
+  case 84:
+#line 1497 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); }
     break;
 
-  case 89:
-
-/* Line 1464 of yacc.c  */
-#line 1599 "compilers/imcc/imcc.y"
+  case 87:
+#line 1507 "compilers/imcc/imcc.y"
     {
            char name[128];
            SymReg *r, *r1;
@@ -4008,188 +3735,140 @@
          }
     break;
 
-  case 90:
-
-/* Line 1464 of yacc.c  */
-#line 1625 "compilers/imcc/imcc.y"
+  case 88:
+#line 1533 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
-  case 91:
-
-/* Line 1464 of yacc.c  */
-#line 1629 "compilers/imcc/imcc.y"
+  case 89:
+#line 1537 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 0; }
     break;
 
-  case 92:
-
-/* Line 1464 of yacc.c  */
-#line 1630 "compilers/imcc/imcc.y"
+  case 90:
+#line 1538 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 1; }
     break;
 
-  case 93:
-
-/* Line 1464 of yacc.c  */
-#line 1634 "compilers/imcc/imcc.y"
+  case 91:
+#line 1542 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
-  case 94:
-
-/* Line 1464 of yacc.c  */
-#line 1635 "compilers/imcc/imcc.y"
+  case 92:
+#line 1543 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL;  IMCC_INFO(interp)->cur_call->pcc_sub->object = (yyvsp[(2) - (3)].sr); }
     break;
 
-  case 95:
-
-/* Line 1464 of yacc.c  */
-#line 1639 "compilers/imcc/imcc.y"
+  case 93:
+#line 1547 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 97:
-
-/* Line 1464 of yacc.c  */
-#line 1644 "compilers/imcc/imcc.y"
+  case 95:
+#line 1552 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (1)].t); }
     break;
 
-  case 98:
-
-/* Line 1464 of yacc.c  */
-#line 1645 "compilers/imcc/imcc.y"
+  case 96:
+#line 1553 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
-  case 99:
-
-/* Line 1464 of yacc.c  */
-#line 1649 "compilers/imcc/imcc.y"
+  case 97:
+#line 1557 "compilers/imcc/imcc.y"
     { (yyval.t) = P_LOAD; }
     break;
 
-  case 100:
-
-/* Line 1464 of yacc.c  */
-#line 1650 "compilers/imcc/imcc.y"
+  case 98:
+#line 1558 "compilers/imcc/imcc.y"
     { (yyval.t) = P_INIT; }
     break;
 
-  case 101:
-
-/* Line 1464 of yacc.c  */
-#line 1651 "compilers/imcc/imcc.y"
+  case 99:
+#line 1559 "compilers/imcc/imcc.y"
     { (yyval.t) = P_MAIN; }
     break;
 
-  case 102:
-
-/* Line 1464 of yacc.c  */
-#line 1652 "compilers/imcc/imcc.y"
+  case 100:
+#line 1560 "compilers/imcc/imcc.y"
     { (yyval.t) = P_IMMEDIATE; }
     break;
 
-  case 103:
-
-/* Line 1464 of yacc.c  */
-#line 1653 "compilers/imcc/imcc.y"
+  case 101:
+#line 1561 "compilers/imcc/imcc.y"
     { (yyval.t) = P_POSTCOMP; }
     break;
 
-  case 104:
-
-/* Line 1464 of yacc.c  */
-#line 1654 "compilers/imcc/imcc.y"
+  case 102:
+#line 1562 "compilers/imcc/imcc.y"
     { (yyval.t) = P_ANON; }
     break;
 
-  case 105:
-
-/* Line 1464 of yacc.c  */
-#line 1655 "compilers/imcc/imcc.y"
+  case 103:
+#line 1563 "compilers/imcc/imcc.y"
     { (yyval.t) = P_NEED_LEX; }
     break;
 
-  case 113:
-
-/* Line 1464 of yacc.c  */
-#line 1667 "compilers/imcc/imcc.y"
+  case 111:
+#line 1575 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
          }
     break;
 
-  case 114:
-
-/* Line 1464 of yacc.c  */
-#line 1672 "compilers/imcc/imcc.y"
+  case 112:
+#line 1580 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
     break;
 
-  case 115:
-
-/* Line 1464 of yacc.c  */
-#line 1676 "compilers/imcc/imcc.y"
+  case 113:
+#line 1584 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
     break;
 
-  case 116:
-
-/* Line 1464 of yacc.c  */
-#line 1680 "compilers/imcc/imcc.y"
+  case 114:
+#line 1588 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
     break;
 
-  case 117:
-
-/* Line 1464 of yacc.c  */
-#line 1684 "compilers/imcc/imcc.y"
+  case 115:
+#line 1592 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (3)].s), 'S'));
          }
     break;
 
-  case 118:
-
-/* Line 1464 of yacc.c  */
-#line 1688 "compilers/imcc/imcc.y"
+  case 116:
+#line 1596 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
          }
     break;
 
-  case 119:
-
-/* Line 1464 of yacc.c  */
-#line 1693 "compilers/imcc/imcc.y"
+  case 117:
+#line 1601 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (5)].s), 'S'));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
          }
     break;
 
-  case 120:
-
-/* Line 1464 of yacc.c  */
-#line 1701 "compilers/imcc/imcc.y"
+  case 118:
+#line 1609 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 121:
-
-/* Line 1464 of yacc.c  */
-#line 1702 "compilers/imcc/imcc.y"
+  case 119:
+#line 1610 "compilers/imcc/imcc.y"
     {
                                  if (IMCC_INFO(interp)->adv_named_id) {
                                      add_pcc_named_param(interp, IMCC_INFO(interp)->cur_call,
@@ -4201,279 +3880,209 @@
                                }
     break;
 
-  case 122:
-
-/* Line 1464 of yacc.c  */
-#line 1714 "compilers/imcc/imcc.y"
+  case 120:
+#line 1622 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (2)].sr); }
     break;
 
-  case 123:
-
-/* Line 1464 of yacc.c  */
-#line 1719 "compilers/imcc/imcc.y"
+  case 121:
+#line 1627 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 124:
-
-/* Line 1464 of yacc.c  */
-#line 1721 "compilers/imcc/imcc.y"
+  case 122:
+#line 1629 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
     break;
 
-  case 125:
-
-/* Line 1464 of yacc.c  */
-#line 1728 "compilers/imcc/imcc.y"
+  case 123:
+#line 1636 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
-  case 126:
-
-/* Line 1464 of yacc.c  */
-#line 1729 "compilers/imcc/imcc.y"
+  case 124:
+#line 1637 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
-  case 127:
-
-/* Line 1464 of yacc.c  */
-#line 1730 "compilers/imcc/imcc.y"
+  case 125:
+#line 1638 "compilers/imcc/imcc.y"
     {
            IdList * const l = (yyvsp[(4) - (4)].idlist);
            SymReg *ignored;
-           ignored = mk_ident(interp, l->id, (yyvsp[(3) - (4)].t));
+           ignored = mk_ident(interp, l->id, (yyvsp[(3) - (4)].t), VTIDENTIFIER);
            UNUSED(ignored);
            IMCC_INFO(interp)->is_def = 0;
            (yyval.sr) = 0;
          }
     break;
 
-  case 128:
-
-/* Line 1464 of yacc.c  */
-#line 1741 "compilers/imcc/imcc.y"
+  case 126:
+#line 1649 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 129:
-
-/* Line 1464 of yacc.c  */
-#line 1742 "compilers/imcc/imcc.y"
+  case 127:
+#line 1650 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
-  case 130:
-
-/* Line 1464 of yacc.c  */
-#line 1746 "compilers/imcc/imcc.y"
+  case 128:
+#line 1654 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT;   }
     break;
 
-  case 131:
-
-/* Line 1464 of yacc.c  */
-#line 1747 "compilers/imcc/imcc.y"
+  case 129:
+#line 1655 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPTIONAL; }
     break;
 
-  case 132:
-
-/* Line 1464 of yacc.c  */
-#line 1748 "compilers/imcc/imcc.y"
+  case 130:
+#line 1656 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPT_FLAG; }
     break;
 
-  case 133:
-
-/* Line 1464 of yacc.c  */
-#line 1749 "compilers/imcc/imcc.y"
+  case 131:
+#line 1657 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED; }
     break;
 
-  case 134:
-
-/* Line 1464 of yacc.c  */
-#line 1750 "compilers/imcc/imcc.y"
+  case 132:
+#line 1658 "compilers/imcc/imcc.y"
     { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = VT_NAMED; mem_sys_free((yyvsp[(3) - (4)].s)); }
     break;
 
-  case 135:
-
-/* Line 1464 of yacc.c  */
-#line 1751 "compilers/imcc/imcc.y"
+  case 133:
+#line 1659 "compilers/imcc/imcc.y"
     { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = VT_NAMED; mem_sys_free((yyvsp[(3) - (4)].s)); }
     break;
 
-  case 136:
-
-/* Line 1464 of yacc.c  */
-#line 1752 "compilers/imcc/imcc.y"
+  case 134:
+#line 1660 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 137:
-
-/* Line 1464 of yacc.c  */
-#line 1753 "compilers/imcc/imcc.y"
+  case 135:
+#line 1661 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_CALL_SIG; }
     break;
 
-  case 138:
-
-/* Line 1464 of yacc.c  */
-#line 1758 "compilers/imcc/imcc.y"
+  case 136:
+#line 1666 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 0); }
     break;
 
-  case 139:
-
-/* Line 1464 of yacc.c  */
-#line 1760 "compilers/imcc/imcc.y"
+  case 137:
+#line 1668 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
-  case 140:
-
-/* Line 1464 of yacc.c  */
-#line 1762 "compilers/imcc/imcc.y"
+  case 138:
+#line 1670 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->asm_state = AsmDefault;
            (yyval.i) = 0;
          }
     break;
 
-  case 141:
-
-/* Line 1464 of yacc.c  */
-#line 1769 "compilers/imcc/imcc.y"
+  case 139:
+#line 1677 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 1); }
     break;
 
-  case 142:
-
-/* Line 1464 of yacc.c  */
-#line 1771 "compilers/imcc/imcc.y"
+  case 140:
+#line 1679 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
-  case 143:
-
-/* Line 1464 of yacc.c  */
-#line 1775 "compilers/imcc/imcc.y"
+  case 141:
+#line 1683 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 144:
-
-/* Line 1464 of yacc.c  */
-#line 1777 "compilers/imcc/imcc.y"
+  case 142:
+#line 1685 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
          }
     break;
 
-  case 145:
-
-/* Line 1464 of yacc.c  */
-#line 1782 "compilers/imcc/imcc.y"
+  case 143:
+#line 1690 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
          }
     break;
 
-  case 146:
-
-/* Line 1464 of yacc.c  */
-#line 1789 "compilers/imcc/imcc.y"
+  case 144:
+#line 1697 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 147:
-
-/* Line 1464 of yacc.c  */
-#line 1791 "compilers/imcc/imcc.y"
+  case 145:
+#line 1699 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
          }
     break;
 
-  case 148:
-
-/* Line 1464 of yacc.c  */
-#line 1796 "compilers/imcc/imcc.y"
+  case 146:
+#line 1704 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
          }
     break;
 
-  case 149:
-
-/* Line 1464 of yacc.c  */
-#line 1803 "compilers/imcc/imcc.y"
+  case 147:
+#line 1711 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
-  case 150:
-
-/* Line 1464 of yacc.c  */
-#line 1807 "compilers/imcc/imcc.y"
+  case 148:
+#line 1715 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
-  case 151:
-
-/* Line 1464 of yacc.c  */
-#line 1812 "compilers/imcc/imcc.y"
+  case 149:
+#line 1720 "compilers/imcc/imcc.y"
     {
           if (IMCC_INFO(interp)->asm_state == AsmDefault)
               begin_return_or_yield(interp, (yyvsp[(1) - (2)].t));
         }
     break;
 
-  case 152:
-
-/* Line 1464 of yacc.c  */
-#line 1817 "compilers/imcc/imcc.y"
+  case 150:
+#line 1725 "compilers/imcc/imcc.y"
     {
           IMCC_INFO(interp)->asm_state = AsmDefault;
           (yyval.t) = 0;
         }
     break;
 
-  case 153:
-
-/* Line 1464 of yacc.c  */
-#line 1824 "compilers/imcc/imcc.y"
+  case 151:
+#line 1732 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 154:
-
-/* Line 1464 of yacc.c  */
-#line 1825 "compilers/imcc/imcc.y"
+  case 152:
+#line 1733 "compilers/imcc/imcc.y"
     { (yyval.t) = 1; }
     break;
 
-  case 155:
-
-/* Line 1464 of yacc.c  */
-#line 1829 "compilers/imcc/imcc.y"
+  case 153:
+#line 1737 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
-  case 156:
-
-/* Line 1464 of yacc.c  */
-#line 1831 "compilers/imcc/imcc.y"
+  case 154:
+#line 1739 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -4485,20 +4094,16 @@
          }
     break;
 
-  case 157:
-
-/* Line 1464 of yacc.c  */
-#line 1841 "compilers/imcc/imcc.y"
+  case 155:
+#line 1749 "compilers/imcc/imcc.y"
     {
             SymReg * const name = mk_const(interp, (yyvsp[(1) - (3)].s), 'S');
             add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, (yyvsp[(3) - (3)].sr));
          }
     break;
 
-  case 158:
-
-/* Line 1464 of yacc.c  */
-#line 1846 "compilers/imcc/imcc.y"
+  case 156:
+#line 1754 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -4510,76 +4115,56 @@
          }
     break;
 
-  case 159:
-
-/* Line 1464 of yacc.c  */
-#line 1856 "compilers/imcc/imcc.y"
+  case 157:
+#line 1764 "compilers/imcc/imcc.y"
     {
            SymReg * const name = mk_const(interp, (yyvsp[(3) - (5)].s), 'S');
            add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, (yyvsp[(5) - (5)].sr));
          }
     break;
 
-  case 162:
-
-/* Line 1464 of yacc.c  */
-#line 1877 "compilers/imcc/imcc.y"
+  case 160:
+#line 1785 "compilers/imcc/imcc.y"
     { clear_state(interp); }
     break;
 
-  case 163:
-
-/* Line 1464 of yacc.c  */
-#line 1882 "compilers/imcc/imcc.y"
+  case 161:
+#line 1790 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (2)].i); }
     break;
 
-  case 164:
-
-/* Line 1464 of yacc.c  */
-#line 1883 "compilers/imcc/imcc.y"
+  case 162:
+#line 1791 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
-  case 165:
-
-/* Line 1464 of yacc.c  */
-#line 1884 "compilers/imcc/imcc.y"
+  case 163:
+#line 1792 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
-  case 166:
-
-/* Line 1464 of yacc.c  */
-#line 1885 "compilers/imcc/imcc.y"
+  case 164:
+#line 1793 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
-  case 167:
-
-/* Line 1464 of yacc.c  */
-#line 1886 "compilers/imcc/imcc.y"
+  case 165:
+#line 1794 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
-  case 168:
-
-/* Line 1464 of yacc.c  */
-#line 1887 "compilers/imcc/imcc.y"
+  case 166:
+#line 1795 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
-  case 169:
-
-/* Line 1464 of yacc.c  */
-#line 1891 "compilers/imcc/imcc.y"
+  case 167:
+#line 1799 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
-  case 173:
-
-/* Line 1464 of yacc.c  */
-#line 1902 "compilers/imcc/imcc.y"
+  case 171:
+#line 1810 "compilers/imcc/imcc.y"
     {
              Instruction * const i = iLABEL(interp, IMCC_INFO(interp)->cur_unit, mk_local_label(interp, (yyvsp[(1) - (1)].s)));
              mem_sys_free((yyvsp[(1) - (1)].s));
@@ -4587,17 +4172,13 @@
          }
     break;
 
-  case 174:
-
-/* Line 1464 of yacc.c  */
-#line 1912 "compilers/imcc/imcc.y"
+  case 172:
+#line 1820 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (3)].i); }
     break;
 
-  case 175:
-
-/* Line 1464 of yacc.c  */
-#line 1914 "compilers/imcc/imcc.y"
+  case 173:
+#line 1822 "compilers/imcc/imcc.y"
     {
            if (yynerrs >= PARROT_MAX_RECOVER_ERRORS) {
                IMCC_warning(interp, "Too many errors. Correct some first.\n");
@@ -4607,10 +4188,8 @@
          }
     break;
 
-  case 176:
-
-/* Line 1464 of yacc.c  */
-#line 1925 "compilers/imcc/imcc.y"
+  case 174:
+#line 1833 "compilers/imcc/imcc.y"
     {
            IdList* const l = (yyvsp[(1) - (1)].idlist);
            l->next = NULL;
@@ -4618,10 +4197,8 @@
          }
     break;
 
-  case 177:
-
-/* Line 1464 of yacc.c  */
-#line 1932 "compilers/imcc/imcc.y"
+  case 175:
+#line 1840 "compilers/imcc/imcc.y"
     {
            IdList* const l = (yyvsp[(3) - (3)].idlist);
            l->next = (yyvsp[(1) - (3)].idlist);
@@ -4629,10 +4206,8 @@
          }
     break;
 
-  case 178:
-
-/* Line 1464 of yacc.c  */
-#line 1941 "compilers/imcc/imcc.y"
+  case 176:
+#line 1849 "compilers/imcc/imcc.y"
     {
            IdList* const l = mem_gc_allocate_n_zeroed_typed(interp, 1, IdList);
            l->id           = (yyvsp[(1) - (2)].s);
@@ -4640,22 +4215,18 @@
          }
     break;
 
-  case 183:
-
-/* Line 1464 of yacc.c  */
-#line 1957 "compilers/imcc/imcc.y"
+  case 181:
+#line 1865 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
-  case 184:
-
-/* Line 1464 of yacc.c  */
-#line 1958 "compilers/imcc/imcc.y"
+  case 182:
+#line 1866 "compilers/imcc/imcc.y"
     {
            IdList *l = (yyvsp[(4) - (4)].idlist);
            while (l) {
                IdList *l1;
-               mk_ident(interp, l->id, (yyvsp[(3) - (4)].t));
+               mk_ident(interp, l->id, (yyvsp[(3) - (4)].t), VTIDENTIFIER);
                l1 = l;
                l  = l->next;
                mem_sys_free(l1->id);
@@ -4665,10 +4236,8 @@
          }
     break;
 
-  case 185:
-
-/* Line 1464 of yacc.c  */
-#line 1971 "compilers/imcc/imcc.y"
+  case 183:
+#line 1879 "compilers/imcc/imcc.y"
     {
             if ((yyvsp[(4) - (4)].sr)->set != 'P') {
                 mem_sys_free((yyvsp[(2) - (4)].s));
@@ -4687,10 +4256,8 @@
          }
     break;
 
-  case 186:
-
-/* Line 1464 of yacc.c  */
-#line 1988 "compilers/imcc/imcc.y"
+  case 184:
+#line 1896 "compilers/imcc/imcc.y"
     {
             if ((yyvsp[(4) - (4)].sr)->set != 'P') {
                 mem_sys_free((yyvsp[(2) - (4)].s));
@@ -4705,17 +4272,13 @@
          }
     break;
 
-  case 187:
-
-/* Line 1464 of yacc.c  */
-#line 2000 "compilers/imcc/imcc.y"
+  case 185:
+#line 1908 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
-  case 188:
-
-/* Line 1464 of yacc.c  */
-#line 2001 "compilers/imcc/imcc.y"
+  case 186:
+#line 1909 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 0);
            IMCC_INFO(interp)->is_def = 0;
@@ -4723,17 +4286,13 @@
          }
     break;
 
-  case 190:
-
-/* Line 1464 of yacc.c  */
-#line 2008 "compilers/imcc/imcc.y"
+  case 188:
+#line 1916 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
-  case 191:
-
-/* Line 1464 of yacc.c  */
-#line 2009 "compilers/imcc/imcc.y"
+  case 189:
+#line 1917 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
            IMCC_INFO(interp)->is_def = 0;
@@ -4741,10 +4300,8 @@
          }
     break;
 
-  case 192:
-
-/* Line 1464 of yacc.c  */
-#line 2015 "compilers/imcc/imcc.y"
+  case 190:
+#line 1923 "compilers/imcc/imcc.y"
     {
            (yyval.i) = NULL;
            IMCC_INFO(interp)->cur_call->pcc_sub->tailcall = 1;
@@ -4752,19 +4309,15 @@
          }
     break;
 
-  case 193:
-
-/* Line 1464 of yacc.c  */
-#line 2021 "compilers/imcc/imcc.y"
+  case 191:
+#line 1929 "compilers/imcc/imcc.y"
     {
             (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, (yyvsp[(2) - (2)].sr));
          }
     break;
 
-  case 194:
-
-/* Line 1464 of yacc.c  */
-#line 2025 "compilers/imcc/imcc.y"
+  case 192:
+#line 1933 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp,
                     IMCC_INFO(interp)->cur_unit,
@@ -4778,101 +4331,73 @@
          }
     break;
 
-  case 195:
-
-/* Line 1464 of yacc.c  */
-#line 2036 "compilers/imcc/imcc.y"
+  case 193:
+#line 1944 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr)); }
     break;
 
-  case 196:
-
-/* Line 1464 of yacc.c  */
-#line 2037 "compilers/imcc/imcc.y"
+  case 194:
+#line 1945 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
-  case 197:
-
-/* Line 1464 of yacc.c  */
-#line 2038 "compilers/imcc/imcc.y"
+  case 195:
+#line 1946 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
-  case 200:
-
-/* Line 1464 of yacc.c  */
-#line 2041 "compilers/imcc/imcc.y"
+  case 198:
+#line 1949 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;}
     break;
 
-  case 201:
-
-/* Line 1464 of yacc.c  */
-#line 2045 "compilers/imcc/imcc.y"
+  case 199:
+#line 1953 "compilers/imcc/imcc.y"
     { (yyval.t) = 'I'; }
     break;
 
-  case 202:
-
-/* Line 1464 of yacc.c  */
-#line 2046 "compilers/imcc/imcc.y"
+  case 200:
+#line 1954 "compilers/imcc/imcc.y"
     { (yyval.t) = 'N'; }
     break;
 
-  case 203:
-
-/* Line 1464 of yacc.c  */
-#line 2047 "compilers/imcc/imcc.y"
+  case 201:
+#line 1955 "compilers/imcc/imcc.y"
     { (yyval.t) = 'S'; }
     break;
 
-  case 204:
-
-/* Line 1464 of yacc.c  */
-#line 2048 "compilers/imcc/imcc.y"
+  case 202:
+#line 1956 "compilers/imcc/imcc.y"
     { (yyval.t) = 'P'; }
     break;
 
-  case 205:
-
-/* Line 1464 of yacc.c  */
-#line 2053 "compilers/imcc/imcc.y"
+  case 203:
+#line 1961 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "set", 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));  }
     break;
 
-  case 206:
-
-/* Line 1464 of yacc.c  */
-#line 2055 "compilers/imcc/imcc.y"
+  case 204:
+#line 1963 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (4)].s), 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr));  }
     break;
 
-  case 207:
-
-/* Line 1464 of yacc.c  */
-#line 2057 "compilers/imcc/imcc.y"
+  case 205:
+#line 1965 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(4) - (5)].s), 3, (yyvsp[(1) - (5)].sr), (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr)); }
     break;
 
-  case 208:
-
-/* Line 1464 of yacc.c  */
-#line 2059 "compilers/imcc/imcc.y"
+  case 206:
+#line 1967 "compilers/imcc/imcc.y"
     { (yyval.i) = iINDEXFETCH(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(5) - (6)].sr)); }
     break;
 
-  case 209:
-
-/* Line 1464 of yacc.c  */
-#line 2061 "compilers/imcc/imcc.y"
+  case 207:
+#line 1969 "compilers/imcc/imcc.y"
     { (yyval.i) = iINDEXSET(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
     break;
 
-  case 210:
-
-/* Line 1464 of yacc.c  */
-#line 2064 "compilers/imcc/imcc.y"
+  case 208:
+#line 1972 "compilers/imcc/imcc.y"
     {
            add_pcc_result(interp, (yyvsp[(3) - (3)].i)->symregs[0], (yyvsp[(1) - (3)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
@@ -4880,220 +4405,160 @@
          }
     break;
 
-  case 211:
-
-/* Line 1464 of yacc.c  */
-#line 2070 "compilers/imcc/imcc.y"
+  case 209:
+#line 1978 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
          }
     break;
 
-  case 212:
-
-/* Line 1464 of yacc.c  */
-#line 2074 "compilers/imcc/imcc.y"
+  case 210:
+#line 1982 "compilers/imcc/imcc.y"
     {
            IMCC_itcall_sub(interp, (yyvsp[(6) - (9)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
          }
     break;
 
-  case 216:
-
-/* Line 1464 of yacc.c  */
-#line 2082 "compilers/imcc/imcc.y"
+  case 214:
+#line 1990 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(1) - (3)].sr));
          }
     break;
 
-  case 217:
-
-/* Line 1464 of yacc.c  */
-#line 2089 "compilers/imcc/imcc.y"
+  case 215:
+#line 1997 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"not"; }
     break;
 
-  case 218:
-
-/* Line 1464 of yacc.c  */
-#line 2090 "compilers/imcc/imcc.y"
+  case 216:
+#line 1998 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bnot"; }
     break;
 
-  case 219:
-
-/* Line 1464 of yacc.c  */
-#line 2091 "compilers/imcc/imcc.y"
+  case 217:
+#line 1999 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"neg"; }
     break;
 
-  case 220:
-
-/* Line 1464 of yacc.c  */
-#line 2095 "compilers/imcc/imcc.y"
+  case 218:
+#line 2003 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
-  case 221:
-
-/* Line 1464 of yacc.c  */
-#line 2096 "compilers/imcc/imcc.y"
+  case 219:
+#line 2004 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
-  case 222:
-
-/* Line 1464 of yacc.c  */
-#line 2097 "compilers/imcc/imcc.y"
+  case 220:
+#line 2005 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
-  case 223:
-
-/* Line 1464 of yacc.c  */
-#line 2098 "compilers/imcc/imcc.y"
+  case 221:
+#line 2006 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
-  case 224:
-
-/* Line 1464 of yacc.c  */
-#line 2099 "compilers/imcc/imcc.y"
+  case 222:
+#line 2007 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
-  case 225:
-
-/* Line 1464 of yacc.c  */
-#line 2100 "compilers/imcc/imcc.y"
+  case 223:
+#line 2008 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
-  case 226:
-
-/* Line 1464 of yacc.c  */
-#line 2101 "compilers/imcc/imcc.y"
+  case 224:
+#line 2009 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"pow"; }
     break;
 
-  case 227:
-
-/* Line 1464 of yacc.c  */
-#line 2102 "compilers/imcc/imcc.y"
+  case 225:
+#line 2010 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
-  case 228:
-
-/* Line 1464 of yacc.c  */
-#line 2103 "compilers/imcc/imcc.y"
+  case 226:
+#line 2011 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"iseq"; }
     break;
 
-  case 229:
-
-/* Line 1464 of yacc.c  */
-#line 2104 "compilers/imcc/imcc.y"
+  case 227:
+#line 2012 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isne"; }
     break;
 
-  case 230:
-
-/* Line 1464 of yacc.c  */
-#line 2105 "compilers/imcc/imcc.y"
+  case 228:
+#line 2013 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isgt"; }
     break;
 
-  case 231:
-
-/* Line 1464 of yacc.c  */
-#line 2106 "compilers/imcc/imcc.y"
+  case 229:
+#line 2014 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isge"; }
     break;
 
-  case 232:
-
-/* Line 1464 of yacc.c  */
-#line 2107 "compilers/imcc/imcc.y"
+  case 230:
+#line 2015 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"islt"; }
     break;
 
-  case 233:
-
-/* Line 1464 of yacc.c  */
-#line 2108 "compilers/imcc/imcc.y"
+  case 231:
+#line 2016 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isle"; }
     break;
 
-  case 234:
-
-/* Line 1464 of yacc.c  */
-#line 2109 "compilers/imcc/imcc.y"
+  case 232:
+#line 2017 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
-  case 235:
-
-/* Line 1464 of yacc.c  */
-#line 2110 "compilers/imcc/imcc.y"
+  case 233:
+#line 2018 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
-  case 236:
-
-/* Line 1464 of yacc.c  */
-#line 2111 "compilers/imcc/imcc.y"
+  case 234:
+#line 2019 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
-  case 237:
-
-/* Line 1464 of yacc.c  */
-#line 2112 "compilers/imcc/imcc.y"
+  case 235:
+#line 2020 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"and"; }
     break;
 
-  case 238:
-
-/* Line 1464 of yacc.c  */
-#line 2113 "compilers/imcc/imcc.y"
+  case 236:
+#line 2021 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"or"; }
     break;
 
-  case 239:
-
-/* Line 1464 of yacc.c  */
-#line 2114 "compilers/imcc/imcc.y"
+  case 237:
+#line 2022 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"xor"; }
     break;
 
-  case 240:
-
-/* Line 1464 of yacc.c  */
-#line 2115 "compilers/imcc/imcc.y"
+  case 238:
+#line 2023 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
-  case 241:
-
-/* Line 1464 of yacc.c  */
-#line 2116 "compilers/imcc/imcc.y"
+  case 239:
+#line 2024 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
-  case 242:
-
-/* Line 1464 of yacc.c  */
-#line 2117 "compilers/imcc/imcc.y"
+  case 240:
+#line 2025 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
-  case 243:
-
-/* Line 1464 of yacc.c  */
-#line 2123 "compilers/imcc/imcc.y"
+  case 241:
+#line 2031 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            (yyval.i)->type &= ~ITCALL;
@@ -5101,115 +4566,83 @@
          }
     break;
 
-  case 244:
-
-/* Line 1464 of yacc.c  */
-#line 2128 "compilers/imcc/imcc.y"
+  case 242:
+#line 2036 "compilers/imcc/imcc.y"
     {  (yyval.i) = 0; }
     break;
 
-  case 245:
-
-/* Line 1464 of yacc.c  */
-#line 2135 "compilers/imcc/imcc.y"
+  case 243:
+#line 2043 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(2) - (3)].s), 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr)); }
     break;
 
-  case 246:
-
-/* Line 1464 of yacc.c  */
-#line 2139 "compilers/imcc/imcc.y"
+  case 244:
+#line 2047 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
-  case 247:
-
-/* Line 1464 of yacc.c  */
-#line 2140 "compilers/imcc/imcc.y"
+  case 245:
+#line 2048 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
-  case 248:
-
-/* Line 1464 of yacc.c  */
-#line 2141 "compilers/imcc/imcc.y"
+  case 246:
+#line 2049 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
-  case 249:
-
-/* Line 1464 of yacc.c  */
-#line 2142 "compilers/imcc/imcc.y"
+  case 247:
+#line 2050 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
-  case 250:
-
-/* Line 1464 of yacc.c  */
-#line 2143 "compilers/imcc/imcc.y"
+  case 248:
+#line 2051 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
-  case 251:
-
-/* Line 1464 of yacc.c  */
-#line 2144 "compilers/imcc/imcc.y"
+  case 249:
+#line 2052 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
-  case 252:
-
-/* Line 1464 of yacc.c  */
-#line 2145 "compilers/imcc/imcc.y"
+  case 250:
+#line 2053 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
-  case 253:
-
-/* Line 1464 of yacc.c  */
-#line 2146 "compilers/imcc/imcc.y"
+  case 251:
+#line 2054 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
-  case 254:
-
-/* Line 1464 of yacc.c  */
-#line 2147 "compilers/imcc/imcc.y"
+  case 252:
+#line 2055 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
-  case 255:
-
-/* Line 1464 of yacc.c  */
-#line 2148 "compilers/imcc/imcc.y"
+  case 253:
+#line 2056 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
-  case 256:
-
-/* Line 1464 of yacc.c  */
-#line 2149 "compilers/imcc/imcc.y"
+  case 254:
+#line 2057 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
-  case 257:
-
-/* Line 1464 of yacc.c  */
-#line 2150 "compilers/imcc/imcc.y"
+  case 255:
+#line 2058 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
-  case 258:
-
-/* Line 1464 of yacc.c  */
-#line 2151 "compilers/imcc/imcc.y"
+  case 256:
+#line 2059 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
-  case 259:
-
-/* Line 1464 of yacc.c  */
-#line 2157 "compilers/imcc/imcc.y"
+  case 257:
+#line 2065 "compilers/imcc/imcc.y"
     {
         (yyval.i) = func_ins(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (4)].sr), (yyvsp[(3) - (4)].s),
                       IMCC_INFO(interp) -> regs,
@@ -5219,31 +4652,23 @@
        }
     break;
 
-  case 260:
-
-/* Line 1464 of yacc.c  */
-#line 2167 "compilers/imcc/imcc.y"
+  case 258:
+#line 2075 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s));       mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 261:
-
-/* Line 1464 of yacc.c  */
-#line 2168 "compilers/imcc/imcc.y"
+  case 259:
+#line 2076 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 262:
-
-/* Line 1464 of yacc.c  */
-#line 2169 "compilers/imcc/imcc.y"
+  case 260:
+#line 2077 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));     mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 263:
-
-/* Line 1464 of yacc.c  */
-#line 2171 "compilers/imcc/imcc.y"
+  case 261:
+#line 2079 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
            if ((yyvsp[(1) - (1)].sr)->set != 'P')
@@ -5251,10 +4676,8 @@
          }
     break;
 
-  case 264:
-
-/* Line 1464 of yacc.c  */
-#line 2177 "compilers/imcc/imcc.y"
+  case 262:
+#line 2085 "compilers/imcc/imcc.y"
     {
             /* disallow bareword method names; SREG name constants are fine */
             const char * const name = (yyvsp[(3) - (3)].sr)->name;
@@ -5270,10 +4693,8 @@
         }
     break;
 
-  case 265:
-
-/* Line 1464 of yacc.c  */
-#line 2191 "compilers/imcc/imcc.y"
+  case 263:
+#line 2099 "compilers/imcc/imcc.y"
     {
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
             (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'U');
@@ -5281,10 +4702,8 @@
          }
     break;
 
-  case 266:
-
-/* Line 1464 of yacc.c  */
-#line 2197 "compilers/imcc/imcc.y"
+  case 264:
+#line 2105 "compilers/imcc/imcc.y"
     {
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
             (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'S');
@@ -5292,41 +4711,31 @@
          }
     break;
 
-  case 267:
-
-/* Line 1464 of yacc.c  */
-#line 2202 "compilers/imcc/imcc.y"
+  case 265:
+#line 2110 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); }
     break;
 
-  case 268:
-
-/* Line 1464 of yacc.c  */
-#line 2208 "compilers/imcc/imcc.y"
+  case 266:
+#line 2116 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            IMCC_itcall_sub(interp, (yyvsp[(1) - (1)].sr));
          }
     break;
 
-  case 269:
-
-/* Line 1464 of yacc.c  */
-#line 2212 "compilers/imcc/imcc.y"
+  case 267:
+#line 2120 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (5)].i); }
     break;
 
-  case 270:
-
-/* Line 1464 of yacc.c  */
-#line 2216 "compilers/imcc/imcc.y"
+  case 268:
+#line 2124 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 271:
-
-/* Line 1464 of yacc.c  */
-#line 2218 "compilers/imcc/imcc.y"
+  case 269:
+#line 2126 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -5338,10 +4747,8 @@
          }
     break;
 
-  case 272:
-
-/* Line 1464 of yacc.c  */
-#line 2228 "compilers/imcc/imcc.y"
+  case 270:
+#line 2136 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -5353,10 +4760,8 @@
          }
     break;
 
-  case 273:
-
-/* Line 1464 of yacc.c  */
-#line 2238 "compilers/imcc/imcc.y"
+  case 271:
+#line 2146 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
@@ -5365,20 +4770,16 @@
          }
     break;
 
-  case 274:
-
-/* Line 1464 of yacc.c  */
-#line 2245 "compilers/imcc/imcc.y"
+  case 272:
+#line 2153 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg_var(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));
          }
     break;
 
-  case 275:
-
-/* Line 1464 of yacc.c  */
-#line 2250 "compilers/imcc/imcc.y"
+  case 273:
+#line 2158 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
@@ -5387,73 +4788,53 @@
          }
     break;
 
-  case 276:
-
-/* Line 1464 of yacc.c  */
-#line 2259 "compilers/imcc/imcc.y"
+  case 274:
+#line 2167 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
-  case 277:
-
-/* Line 1464 of yacc.c  */
-#line 2263 "compilers/imcc/imcc.y"
+  case 275:
+#line 2171 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 278:
-
-/* Line 1464 of yacc.c  */
-#line 2264 "compilers/imcc/imcc.y"
+  case 276:
+#line 2172 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
-  case 279:
-
-/* Line 1464 of yacc.c  */
-#line 2268 "compilers/imcc/imcc.y"
+  case 277:
+#line 2176 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT;     }
     break;
 
-  case 280:
-
-/* Line 1464 of yacc.c  */
-#line 2269 "compilers/imcc/imcc.y"
+  case 278:
+#line 2177 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED;    }
     break;
 
-  case 281:
-
-/* Line 1464 of yacc.c  */
-#line 2270 "compilers/imcc/imcc.y"
+  case 279:
+#line 2178 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_CALL_SIG; }
     break;
 
-  case 282:
-
-/* Line 1464 of yacc.c  */
-#line 2273 "compilers/imcc/imcc.y"
-    { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
+  case 280:
+#line 2180 "compilers/imcc/imcc.y"
+    { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); mem_sys_free((yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
-  case 283:
-
-/* Line 1464 of yacc.c  */
-#line 2274 "compilers/imcc/imcc.y"
-    { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = 0; }
+  case 281:
+#line 2181 "compilers/imcc/imcc.y"
+    { adv_named_set(interp, (yyvsp[(3) - (4)].s));   mem_sys_free((yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
-  case 284:
-
-/* Line 1464 of yacc.c  */
-#line 2278 "compilers/imcc/imcc.y"
+  case 282:
+#line 2185 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
-  case 285:
-
-/* Line 1464 of yacc.c  */
-#line 2283 "compilers/imcc/imcc.y"
+  case 283:
+#line 2190 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -5465,10 +4846,8 @@
          }
     break;
 
-  case 286:
-
-/* Line 1464 of yacc.c  */
-#line 2293 "compilers/imcc/imcc.y"
+  case 284:
+#line 2200 "compilers/imcc/imcc.y"
     {
             add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call,
                     mk_const(interp, (yyvsp[(3) - (5)].s), 'S'), (yyvsp[(5) - (5)].sr));
@@ -5476,10 +4855,8 @@
          }
     break;
 
-  case 287:
-
-/* Line 1464 of yacc.c  */
-#line 2299 "compilers/imcc/imcc.y"
+  case 285:
+#line 2206 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -5491,179 +4868,133 @@
          }
     break;
 
-  case 288:
-
-/* Line 1464 of yacc.c  */
-#line 2309 "compilers/imcc/imcc.y"
+  case 286:
+#line 2216 "compilers/imcc/imcc.y"
     {
            add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(1) - (3)].s), 'S'), (yyvsp[(3) - (3)].sr));
            mem_sys_free((yyvsp[(1) - (3)].s));
          }
     break;
 
-  case 289:
-
-/* Line 1464 of yacc.c  */
-#line 2313 "compilers/imcc/imcc.y"
+  case 287:
+#line 2220 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 290:
-
-/* Line 1464 of yacc.c  */
-#line 2317 "compilers/imcc/imcc.y"
+  case 288:
+#line 2224 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
-  case 291:
-
-/* Line 1464 of yacc.c  */
-#line 2318 "compilers/imcc/imcc.y"
+  case 289:
+#line 2225 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
-  case 292:
-
-/* Line 1464 of yacc.c  */
-#line 2323 "compilers/imcc/imcc.y"
+  case 290:
+#line 2230 "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 293:
-
-/* Line 1464 of yacc.c  */
-#line 2327 "compilers/imcc/imcc.y"
+  case 291:
+#line 2234 "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 294:
-
-/* Line 1464 of yacc.c  */
-#line 2331 "compilers/imcc/imcc.y"
+  case 292:
+#line 2238 "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 295:
-
-/* Line 1464 of yacc.c  */
-#line 2338 "compilers/imcc/imcc.y"
+  case 293:
+#line 2245 "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 296:
-
-/* Line 1464 of yacc.c  */
-#line 2342 "compilers/imcc/imcc.y"
+  case 294:
+#line 2249 "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 297:
-
-/* Line 1464 of yacc.c  */
-#line 2346 "compilers/imcc/imcc.y"
+  case 295:
+#line 2253 "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 298:
-
-/* Line 1464 of yacc.c  */
-#line 2352 "compilers/imcc/imcc.y"
+  case 296:
+#line 2259 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 299:
-
-/* Line 1464 of yacc.c  */
-#line 2353 "compilers/imcc/imcc.y"
+  case 297:
+#line 2260 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 300:
-
-/* Line 1464 of yacc.c  */
-#line 2357 "compilers/imcc/imcc.y"
+  case 298:
+#line 2264 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"eq"; }
     break;
 
-  case 301:
-
-/* Line 1464 of yacc.c  */
-#line 2358 "compilers/imcc/imcc.y"
+  case 299:
+#line 2265 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ne"; }
     break;
 
-  case 302:
-
-/* Line 1464 of yacc.c  */
-#line 2359 "compilers/imcc/imcc.y"
+  case 300:
+#line 2266 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"gt"; }
     break;
 
-  case 303:
-
-/* Line 1464 of yacc.c  */
-#line 2360 "compilers/imcc/imcc.y"
+  case 301:
+#line 2267 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ge"; }
     break;
 
-  case 304:
-
-/* Line 1464 of yacc.c  */
-#line 2361 "compilers/imcc/imcc.y"
+  case 302:
+#line 2268 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lt"; }
     break;
 
-  case 305:
-
-/* Line 1464 of yacc.c  */
-#line 2362 "compilers/imcc/imcc.y"
+  case 303:
+#line 2269 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"le"; }
     break;
 
-  case 308:
-
-/* Line 1464 of yacc.c  */
-#line 2371 "compilers/imcc/imcc.y"
+  case 306:
+#line 2278 "compilers/imcc/imcc.y"
     { (yyval.sr) = NULL; }
     break;
 
-  case 309:
-
-/* Line 1464 of yacc.c  */
-#line 2372 "compilers/imcc/imcc.y"
+  case 307:
+#line 2279 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 310:
-
-/* Line 1464 of yacc.c  */
-#line 2376 "compilers/imcc/imcc.y"
+  case 308:
+#line 2283 "compilers/imcc/imcc.y"
     { (yyval.sr) = IMCC_INFO(interp)->regs[0]; }
     break;
 
-  case 312:
-
-/* Line 1464 of yacc.c  */
-#line 2381 "compilers/imcc/imcc.y"
+  case 310:
+#line 2288 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 313:
-
-/* Line 1464 of yacc.c  */
-#line 2383 "compilers/imcc/imcc.y"
+  case 311:
+#line 2290 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (4)].sr);
            IMCC_INFO(interp) -> keyvec |= KEY_BIT(IMCC_INFO(interp)->nargs);
@@ -5672,71 +5003,53 @@
          }
     break;
 
-  case 314:
-
-/* Line 1464 of yacc.c  */
-#line 2390 "compilers/imcc/imcc.y"
+  case 312:
+#line 2297 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(2) - (3)].sr);
            (yyval.sr) = (yyvsp[(2) - (3)].sr);
          }
     break;
 
-  case 316:
-
-/* Line 1464 of yacc.c  */
-#line 2397 "compilers/imcc/imcc.y"
+  case 314:
+#line 2304 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 317:
-
-/* Line 1464 of yacc.c  */
-#line 2398 "compilers/imcc/imcc.y"
+  case 315:
+#line 2305 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 318:
-
-/* Line 1464 of yacc.c  */
-#line 2402 "compilers/imcc/imcc.y"
+  case 316:
+#line 2309 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 319:
-
-/* Line 1464 of yacc.c  */
-#line 2403 "compilers/imcc/imcc.y"
+  case 317:
+#line 2310 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 320:
-
-/* Line 1464 of yacc.c  */
-#line 2407 "compilers/imcc/imcc.y"
+  case 318:
+#line 2314 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 321:
-
-/* Line 1464 of yacc.c  */
-#line 2408 "compilers/imcc/imcc.y"
+  case 319:
+#line 2315 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 326:
-
-/* Line 1464 of yacc.c  */
-#line 2422 "compilers/imcc/imcc.y"
+  case 324:
+#line 2329 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys    = 0;
          }
     break;
 
-  case 327:
-
-/* Line 1464 of yacc.c  */
-#line 2426 "compilers/imcc/imcc.y"
+  case 325:
+#line 2333 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -5744,19 +5057,15 @@
          }
     break;
 
-  case 328:
-
-/* Line 1464 of yacc.c  */
-#line 2434 "compilers/imcc/imcc.y"
+  case 326:
+#line 2341 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys = 0;
          }
     break;
 
-  case 329:
-
-/* Line 1464 of yacc.c  */
-#line 2438 "compilers/imcc/imcc.y"
+  case 327:
+#line 2345 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -5764,106 +5073,79 @@
          }
     break;
 
-  case 330:
-
-/* Line 1464 of yacc.c  */
-#line 2446 "compilers/imcc/imcc.y"
+  case 328:
+#line 2353 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 331:
-
-/* Line 1464 of yacc.c  */
-#line 2448 "compilers/imcc/imcc.y"
+  case 329:
+#line 2355 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) - (3)].sr);
            (yyval.sr) = IMCC_INFO(interp)->keys[0];
          }
     break;
 
-  case 332:
-
-/* Line 1464 of yacc.c  */
-#line 2456 "compilers/imcc/imcc.y"
+  case 330:
+#line 2363 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
          }
     break;
 
-  case 333:
-
-/* Line 1464 of yacc.c  */
-#line 2462 "compilers/imcc/imcc.y"
+  case 331:
+#line 2369 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); }
     break;
 
-  case 334:
-
-/* Line 1464 of yacc.c  */
-#line 2463 "compilers/imcc/imcc.y"
+  case 332:
+#line 2370 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); }
     break;
 
-  case 335:
-
-/* Line 1464 of yacc.c  */
-#line 2464 "compilers/imcc/imcc.y"
+  case 333:
+#line 2371 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); }
     break;
 
-  case 336:
-
-/* Line 1464 of yacc.c  */
-#line 2465 "compilers/imcc/imcc.y"
+  case 334:
+#line 2372 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); }
     break;
 
-  case 337:
-
-/* Line 1464 of yacc.c  */
-#line 2466 "compilers/imcc/imcc.y"
+  case 335:
+#line 2373 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 338:
-
-/* Line 1464 of yacc.c  */
-#line 2470 "compilers/imcc/imcc.y"
+  case 336:
+#line 2377 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 339:
-
-/* Line 1464 of yacc.c  */
-#line 2471 "compilers/imcc/imcc.y"
+  case 337:
+#line 2378 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'U'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 340:
-
-/* Line 1464 of yacc.c  */
-#line 2475 "compilers/imcc/imcc.y"
+  case 338:
+#line 2382 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 341:
-
-/* Line 1464 of yacc.c  */
-#line 2476 "compilers/imcc/imcc.y"
+  case 339:
+#line 2383 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 342:
-
-/* Line 1464 of yacc.c  */
-#line 2477 "compilers/imcc/imcc.y"
+  case 340:
+#line 2384 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (1)].sr); }
     break;
 
 
-
-/* Line 1464 of yacc.c  */
-#line 5856 "compilers/imcc/imcparser.c"
+/* Line 1267 of yacc.c.  */
+#line 5138 "compilers/imcc/imcparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5874,6 +5156,7 @@
 
   *++yyvsp = yyval;
 
+
   /* Now `shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
@@ -5938,7 +5221,7 @@
 
   if (yyerrstatus == 3)
     {
-      /* If just tried and failed to reuse lookahead token after an
+      /* If just tried and failed to reuse look-ahead token after an
 	 error, discard it.  */
 
       if (yychar <= YYEOF)
@@ -5955,7 +5238,7 @@
 	}
     }
 
-  /* Else will try to reuse lookahead token after shifting the error
+  /* Else will try to reuse look-ahead token after shifting the error
      token.  */
   goto yyerrlab1;
 
@@ -6012,6 +5295,9 @@
       YY_STACK_PRINT (yyss, yyssp);
     }
 
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
   *++yyvsp = yylval;
 
 
@@ -6036,7 +5322,7 @@
   yyresult = 1;
   goto yyreturn;
 
-#if !defined(yyoverflow) || YYERROR_VERBOSE
+#ifndef yyoverflow
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -6047,7 +5333,7 @@
 #endif
 
 yyreturn:
-  if (yychar != YYEMPTY)
+  if (yychar != YYEOF && yychar != YYEMPTY)
      yydestruct ("Cleanup: discarding lookahead",
 		 yytoken, &yylval, yyscanner, interp);
   /* Do not reclaim the symbols of the rule which action triggered
@@ -6073,9 +5359,7 @@
 }
 
 
-
-/* Line 1684 of yacc.c  */
-#line 2483 "compilers/imcc/imcc.y"
+#line 2390 "compilers/imcc/imcc.y"
 
 
 /* I need this prototype somewhere... */

Modified: branches/html_cleanup/compilers/imcc/imcparser.h
==============================================================================
--- branches/html_cleanup/compilers/imcc/imcparser.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/imcc/imcparser.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -9,25 +9,27 @@
  */
 /* HEADERIZER HFILE: none */
 /* HEADERIZER STOP */
-/* A Bison parser, made by GNU Bison 2.4.2.  */
+/* A Bison parser, made by GNU Bison 2.3.  */
 
 /* Skeleton interface for Bison's Yacc-like parsers in C
-   
-      Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software
-   Foundation, Inc.
-   
-   This program is free software: you can redistribute it and/or modify
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
@@ -38,11 +40,10 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-   
+
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
-
 /* Tokens.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
@@ -292,27 +293,21 @@
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
+#line 986 "compilers/imcc/imcc.y"
 {
-
-/* Line 1685 of yacc.c  */
-#line 1071 "compilers/imcc/imcc.y"
-
     IdList * idlist;
     int t;
     char * s;
     SymReg * sr;
     Instruction *i;
-
-
-
-/* Line 1685 of yacc.c  */
-#line 299 "compilers/imcc/imcparser.h"
-} YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
+}
+/* Line 1489 of yacc.c.  */
+#line 295 "compilers/imcc/imcparser.h"
+	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
 #endif
 
 
 
-

Modified: branches/html_cleanup/compilers/imcc/instructions.c
==============================================================================
--- branches/html_cleanup/compilers/imcc/instructions.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/imcc/instructions.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -10,6 +10,7 @@
 #include "pbc.h"
 #include "optimizer.h"
 #include "pmc/pmc_callcontext.h"
+#include "parrot/oplib/core_ops.h"
 
 /*
 
@@ -112,7 +113,7 @@
         ins->symregs[i]  = r[i];
 
     ins->flags = flags;
-    ins->opnum = -1;
+    ins->op    = NULL;
 
     return ins;
 }
@@ -133,19 +134,22 @@
 {
     ASSERT_ARGS(instruction_reads)
     int f, i;
+    op_lib_t *core_ops = PARROT_GET_CORE_OPLIB(NULL);
 
-    if (ins->opnum == PARROT_OP_set_args_pc
-    ||  ins->opnum == PARROT_OP_set_returns_pc) {
+    if (ins->op && ins->op->lib == core_ops) {
+        if (OP_INFO_OPNUM(ins->op) == PARROT_OP_set_args_pc
+        ||  OP_INFO_OPNUM(ins->op) == PARROT_OP_set_returns_pc) {
+
+            for (i = ins->symreg_count - 1; i >= 0; --i)
+                if (r == ins->symregs[i])
+                    return 1;
 
-        for (i = ins->symreg_count - 1; i >= 0; --i)
-            if (r == ins->symregs[i])
-                return 1;
-
-        return 0;
-    }
-    else if (ins->opnum == PARROT_OP_get_params_pc ||
-             ins->opnum == PARROT_OP_get_results_pc) {
-        return 0;
+            return 0;
+        }
+        else if (OP_INFO_OPNUM(ins->op) == PARROT_OP_get_params_pc ||
+                 OP_INFO_OPNUM(ins->op) == PARROT_OP_get_results_pc) {
+            return 0;
+        }
     }
 
     f = ins->flags;
@@ -172,7 +176,7 @@
 
     /* a sub call reads the previous args */
     if (ins->type & ITPCCSUB) {
-        while (ins && ins->opnum != PARROT_OP_set_args_pc)
+        while (ins && ins->op != &core_ops->op_info_table[PARROT_OP_set_args_pc])
             ins = ins->prev;
 
         if (!ins)
@@ -204,9 +208,10 @@
     ASSERT_ARGS(instruction_writes)
     const int f = ins->flags;
     int j;
+    op_lib_t *core_ops = PARROT_GET_CORE_OPLIB(NULL);
 
     /* a get_results opcode occurs after the actual sub call */
-    if (ins->opnum == PARROT_OP_get_results_pc) {
+    if (ins->op == &core_ops->op_info_table[PARROT_OP_get_results_pc]) {
         int i;
 
         /* but only if it isn't the get_results opcode of
@@ -231,7 +236,7 @@
          * and point to the most recent pcc_sub
          * structure
          */
-        while (ins && ins->opnum != PARROT_OP_get_results_pc)
+        while (ins && ins->op != &core_ops->op_info_table[PARROT_OP_get_results_pc])
             ins = ins->next;
 
         if (!ins)
@@ -245,7 +250,7 @@
         return 0;
     }
 
-    if (ins->opnum == PARROT_OP_get_params_pc) {
+    if (ins->op == &core_ops->op_info_table[PARROT_OP_get_params_pc]) {
         int i;
 
         for (i = ins->symreg_count - 1; i >= 0; --i) {
@@ -255,8 +260,8 @@
 
         return 0;
     }
-    else if (ins->opnum == PARROT_OP_set_args_pc
-         ||  ins->opnum == PARROT_OP_set_returns_pc) {
+    else if (ins->op == &core_ops->op_info_table[PARROT_OP_set_args_pc]
+         ||  ins->op == &core_ops->op_info_table[PARROT_OP_set_returns_pc]) {
         return 0;
     }
 
@@ -618,16 +623,6 @@
             snprintf(regb[i], REGB_SIZE, "%c%d", p->set, (int)p->color);
             regstr[i] = regb[i];
         }
-        else if (IMCC_INFO(interp)->allocated
-             && (IMCC_INFO(interp)->optimizer_level & OPT_J)
-             &&  p->set != 'K'
-             &&  p->color < 0
-             && REG_NEEDS_ALLOC(p)) {
-                    snprintf(regb[i], REGB_SIZE,
-                        "r%c%d", tolower((unsigned char)p->set),
-                        -1 -(int)p->color);
-                    regstr[i] = regb[i];
-        }
         else if (p->type & VTREGKEY) {
             const SymReg *k = p;
 
@@ -639,13 +634,6 @@
                 if (k->reg && k->reg->color >= 0)
                     snprintf(regb[i]+used, REGB_SIZE - used, "%c%d",
                             k->reg->set, (int)k->reg->color);
-                else if (IMCC_INFO(interp)->allocated
-                     && (IMCC_INFO(interp)->optimizer_level & OPT_J)
-                     && k->reg
-                     && k->reg->color < 0)
-                        snprintf(regb[i]+used, REGB_SIZE - used, "r%c%d",
-                            tolower((unsigned char)k->reg->set),
-                            -1 -(int)k->reg->color);
                 else
                     strncat(regb[i], k->name, REGB_SIZE - used - 1);
 

Modified: branches/html_cleanup/compilers/imcc/instructions.h
==============================================================================
--- branches/html_cleanup/compilers/imcc/instructions.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/imcc/instructions.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -16,10 +16,9 @@
     ITALIAS    =  0x100000, /*  set P,P  */
     ITADDR     =  0x200000, /*  set_addr P, addr*/
     ITRESULT   =  0x400000, /*  .get_results */
-    ITEXT      =  0x800000, /*  instruction is extcall in JIT */
-    ITSAVES    = 0x1000000, /*  saveall/restoreall in a bsr */
-    ITPCCSUB   = 0x2000000, /*  PCC sub call */
-    ITPCCYIELD = 0x4000000  /*  yield from PCC call instead of return */
+    ITSAVES    =  0x800000, /*  saveall/restoreall in a bsr */
+    ITPCCSUB   = 0x1000000, /*  PCC sub call */
+    ITPCCYIELD = 0x2000000  /*  yield from PCC call instead of return */
 };
 
 
@@ -35,7 +34,7 @@
     struct _Instruction *prev;
     struct _Instruction *next;
 
-    int     opnum;         /* parrot op number */
+    op_info_t *op;         /* parrot opcode */
     int     opsize;        /* parrot op size   */
     int     line;          /* source code line number */
     int     symreg_count;  /* count of regs in **symregs */

Modified: branches/html_cleanup/compilers/imcc/optimizer.c
==============================================================================
--- branches/html_cleanup/compilers/imcc/optimizer.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/imcc/optimizer.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -74,6 +74,7 @@
 #include "pbc.h"
 #include "optimizer.h"
 #include "pmc/pmc_callcontext.h"
+#include "parrot/oplib/core_ops.h"
 
 /* HEADERIZER HFILE: compilers/imcc/optimizer.h */
 
@@ -368,7 +369,7 @@
                     last->symregs[reg] = go;
                     tmp = INS(interp, unit, neg_op, "",
                               last->symregs, args, 0, 0);
-                    last->opnum = tmp->opnum;
+                    last->op = tmp->op;
                     last->opsize = tmp->opsize;
                     mem_sys_free(last->opname);
                     last->opname = mem_sys_strdup(tmp->opname);
@@ -409,6 +410,7 @@
     SymReg *r;
     int changes = 0;
     FLOATVAL f;
+    op_lib_t *core_ops = PARROT_GET_CORE_OPLIB(interp);
 
     IMCC_info(interp, 2, "\tstrength_reduce\n");
     for (ins = unit->instructions; ins; ins = ins->next) {
@@ -428,37 +430,37 @@
          * div Nx, Nx, Ny => sub Nx, Ny
          * fdiv Nx, Nx, Ny => sub Nx, Ny
          */
-        if (((ins->opnum == PARROT_OP_sub_i_i_i ||
-                ins->opnum == PARROT_OP_sub_i_i_ic ||
-                ins->opnum == PARROT_OP_sub_i_ic_i ||
-                ins->opnum == PARROT_OP_div_i_i_i ||
-                ins->opnum == PARROT_OP_div_i_i_ic ||
-                ins->opnum == PARROT_OP_div_i_ic_i ||
-                ins->opnum == PARROT_OP_fdiv_i_i_i ||
-                ins->opnum == PARROT_OP_fdiv_i_i_ic ||
-                ins->opnum == PARROT_OP_fdiv_i_ic_i ||
-                ins->opnum == PARROT_OP_sub_n_n_n ||
-                ins->opnum == PARROT_OP_sub_n_n_nc ||
-                ins->opnum == PARROT_OP_sub_n_nc_n ||
-                ins->opnum == PARROT_OP_div_n_n_n ||
-                ins->opnum == PARROT_OP_div_n_n_nc ||
-                ins->opnum == PARROT_OP_div_n_nc_n ||
-                ins->opnum == PARROT_OP_fdiv_n_n_n ||
-                ins->opnum == PARROT_OP_fdiv_n_n_nc ||
-                ins->opnum == PARROT_OP_fdiv_n_nc_n) &&
+        if (((ins->op == &core_ops->op_info_table[PARROT_OP_sub_i_i_i] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_sub_i_i_ic] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_sub_i_ic_i] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_div_i_i_i] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_div_i_i_ic] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_div_i_ic_i] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_i_i_i] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_i_i_ic] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_i_ic_i] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_sub_n_n_n] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_sub_n_n_nc] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_sub_n_nc_n] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_div_n_n_n] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_div_n_n_nc] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_div_n_nc_n] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_n_n_n] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_n_n_nc] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_n_nc_n]) &&
              ins->symregs[0] == ins->symregs[1])
-          || ((ins->opnum == PARROT_OP_add_i_i_i ||
-                ins->opnum == PARROT_OP_add_i_i_ic ||
-                ins->opnum == PARROT_OP_add_i_ic_i ||
-                ins->opnum == PARROT_OP_mul_i_i_i ||
-                ins->opnum == PARROT_OP_mul_i_i_ic ||
-                ins->opnum == PARROT_OP_mul_i_ic_i ||
-                ins->opnum == PARROT_OP_add_n_n_n ||
-                ins->opnum == PARROT_OP_add_n_n_nc ||
-                ins->opnum == PARROT_OP_add_n_nc_n ||
-                ins->opnum == PARROT_OP_mul_n_n_n ||
-                ins->opnum == PARROT_OP_mul_n_n_nc ||
-                ins->opnum == PARROT_OP_mul_n_nc_n) &&
+          || ((ins->op == &core_ops->op_info_table[PARROT_OP_add_i_i_i] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_add_i_i_ic] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_add_i_ic_i] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_mul_i_i_i] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_mul_i_i_ic] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_mul_i_ic_i] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_add_n_n_n] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_add_n_n_nc] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_add_n_nc_n] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_mul_n_n_n] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_mul_n_n_nc] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_mul_n_nc_n]) &&
              (ins->symregs[0] == ins->symregs[1] ||
               ins->symregs[0] == ins->symregs[2]))) {
             IMCC_debug(interp, DEBUG_OPT1, "opt1 %d => ", ins);
@@ -483,19 +485,19 @@
          * div Nx, 1     => delete
          * fdiv Nx, 1    => delete
          */
-        if (((ins->opnum == PARROT_OP_add_i_ic ||
-                ins->opnum == PARROT_OP_sub_i_ic) &&
+        if (((ins->op == &core_ops->op_info_table[PARROT_OP_add_i_ic] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_sub_i_ic]) &&
                       IMCC_int_from_reg(interp, ins->symregs[1]) == 0)
-          || ((ins->opnum == PARROT_OP_mul_i_ic ||
-                ins->opnum == PARROT_OP_div_i_ic ||
-                ins->opnum == PARROT_OP_fdiv_i_ic) &&
+          || ((ins->op == &core_ops->op_info_table[PARROT_OP_mul_i_ic] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_div_i_ic] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_i_ic]) &&
                       IMCC_int_from_reg(interp, ins->symregs[1]) == 1)
-          || ((ins->opnum == PARROT_OP_add_n_nc ||
-                ins->opnum == PARROT_OP_sub_n_nc) &&
+          || ((ins->op == &core_ops->op_info_table[PARROT_OP_add_n_nc] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_sub_n_nc]) &&
                 (f = atof(ins->symregs[1]->name), FLOAT_IS_ZERO(f)))
-          || ((ins->opnum  == PARROT_OP_mul_n_nc  ||
-                ins->opnum == PARROT_OP_div_n_nc ||
-                ins->opnum == PARROT_OP_fdiv_n_nc) &&
+          || ((ins->op  == &core_ops->op_info_table[PARROT_OP_mul_n_nc]  ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_div_n_nc] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_n_nc]) &&
                       atof(ins->symregs[1]->name) == 1.0)) {
             IMCC_debug(interp, DEBUG_OPT1, "opt1 %d => ", ins);
             ins = delete_ins(unit, ins);
@@ -513,16 +515,16 @@
          * sub Ix, 1     => dec Ix
          * sub Nx, 1     => dec Nx
          */
-        if (((ins->opnum == PARROT_OP_add_i_ic ||
-                ins->opnum == PARROT_OP_sub_i_ic) &&
+        if (((ins->op == &core_ops->op_info_table[PARROT_OP_add_i_ic] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_sub_i_ic]) &&
                       IMCC_int_from_reg(interp, ins->symregs[1]) == 1)
-          || ((ins->opnum == PARROT_OP_add_n_nc ||
-                ins->opnum == PARROT_OP_sub_n_nc) &&
+          || ((ins->op == &core_ops->op_info_table[PARROT_OP_add_n_nc] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_sub_n_nc]) &&
                       atof(ins->symregs[1]->name) == 1.0)) {
             IMCC_debug(interp, DEBUG_OPT1, "opt1 %d => ", ins);
             --ins->symregs[1]->use_count;
-            if (ins->opnum == PARROT_OP_add_i_ic ||
-                ins->opnum == PARROT_OP_add_n_nc)
+            if (ins->op == &core_ops->op_info_table[PARROT_OP_add_i_ic] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_add_n_nc])
                 tmp = INS(interp, unit, "inc", "", ins->symregs, 1, 0, 0);
             else
                 tmp = INS(interp, unit, "dec", "", ins->symregs, 1, 0, 0);
@@ -548,27 +550,27 @@
          * div Nx, Ny, 1 => set Nx, Ny
          * fdiv Nx, Ny, 1 => set Nx, Ny
          */
-        if (((ins->opnum == PARROT_OP_add_i_i_ic ||
-                ins->opnum == PARROT_OP_sub_i_i_ic) &&
+        if (((ins->op == &core_ops->op_info_table[PARROT_OP_add_i_i_ic] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_sub_i_i_ic]) &&
                       IMCC_int_from_reg(interp, ins->symregs[2]) == 0)
-          || (ins->opnum == PARROT_OP_add_i_ic_i &&
+          || (ins->op == &core_ops->op_info_table[PARROT_OP_add_i_ic_i] &&
                       IMCC_int_from_reg(interp, ins->symregs[1]) == 0)
-          || ((ins->opnum == PARROT_OP_mul_i_i_ic ||
-                ins->opnum == PARROT_OP_div_i_i_ic ||
-                ins->opnum == PARROT_OP_fdiv_i_i_ic) &&
+          || ((ins->op == &core_ops->op_info_table[PARROT_OP_mul_i_i_ic] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_div_i_i_ic] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_i_i_ic]) &&
                       IMCC_int_from_reg(interp, ins->symregs[2]) == 1)
-          || (ins->opnum == PARROT_OP_mul_i_ic_i &&
+          || (ins->op == &core_ops->op_info_table[PARROT_OP_mul_i_ic_i] &&
                       IMCC_int_from_reg(interp, ins->symregs[1]) == 1)
-          || ((ins->opnum == PARROT_OP_add_n_n_nc ||
-                ins->opnum == PARROT_OP_sub_n_n_nc) &&
+          || ((ins->op == &core_ops->op_info_table[PARROT_OP_add_n_n_nc] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_sub_n_n_nc]) &&
                 (f = atof(ins->symregs[2]->name), FLOAT_IS_ZERO(f)))
-          || (ins->opnum == PARROT_OP_add_n_nc_n &&
+          || (ins->op == &core_ops->op_info_table[PARROT_OP_add_n_nc_n] &&
              (f = atof(ins->symregs[1]->name), FLOAT_IS_ZERO(f)))
-          || ((ins->opnum == PARROT_OP_mul_n_n_nc ||
-                ins->opnum == PARROT_OP_div_n_n_nc ||
-                ins->opnum == PARROT_OP_fdiv_n_n_nc) &&
+          || ((ins->op == &core_ops->op_info_table[PARROT_OP_mul_n_n_nc] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_div_n_n_nc] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_n_n_nc]) &&
                       atof(ins->symregs[2]->name) == 1.0)
-          || (ins->opnum == PARROT_OP_mul_n_nc_n &&
+          || (ins->op == &core_ops->op_info_table[PARROT_OP_mul_n_nc_n] &&
                       atof(ins->symregs[1]->name) == 1.0)) {
             IMCC_debug(interp, DEBUG_OPT1, "opt1 %d => ", ins);
             if (ins->symregs[1]->type == VTCONST) {
@@ -590,15 +592,15 @@
          * mul Ix, 0, Iy => set Ix, 0
          * mul Ix, 0     => set Ix, 0
          */
-        if ((ins->opnum == PARROT_OP_mul_i_i_ic &&
+        if ((ins->op == &core_ops->op_info_table[PARROT_OP_mul_i_i_ic] &&
                       IMCC_int_from_reg(interp, ins->symregs[2]) == 0)
-          || ((ins->opnum == PARROT_OP_mul_i_ic_i ||
-                ins->opnum == PARROT_OP_mul_i_ic) &&
+          || ((ins->op == &core_ops->op_info_table[PARROT_OP_mul_i_ic_i] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_mul_i_ic]) &&
                       IMCC_int_from_reg(interp, ins->symregs[1]) == 0)
-          || (ins->opnum == PARROT_OP_mul_n_n_nc &&
+          || (ins->op == &core_ops->op_info_table[PARROT_OP_mul_n_n_nc] &&
              (f = atof(ins->symregs[2]->name), FLOAT_IS_ZERO(f)))
-          || ((ins->opnum == PARROT_OP_mul_n_nc_n ||
-                ins->opnum == PARROT_OP_mul_n_nc) &&
+          || ((ins->op == &core_ops->op_info_table[PARROT_OP_mul_n_nc_n] ||
+                ins->op == &core_ops->op_info_table[PARROT_OP_mul_n_nc]) &&
                 (f = atof(ins->symregs[1]->name), FLOAT_IS_ZERO(f)))) {
             IMCC_debug(interp, DEBUG_OPT1, "opt1 %d => ", ins);
             r = mk_const(interp, "0", ins->symregs[0]->set);
@@ -616,9 +618,9 @@
          * set Ix, 0     => null Ix
          * set Nx, 0     => null Nx
          */
-        if ((ins->opnum == PARROT_OP_set_i_ic &&
+        if ((ins->op == &core_ops->op_info_table[PARROT_OP_set_i_ic] &&
                       IMCC_int_from_reg(interp, ins->symregs[1]) == 0)
-          || (ins->opnum == PARROT_OP_set_n_nc &&
+          || (ins->op == &core_ops->op_info_table[PARROT_OP_set_n_nc] &&
              (f = atof(ins->symregs[1]->name), FLOAT_IS_ZERO(f)) &&
               ins->symregs[1]->name[0] != '-')) {
             IMCC_debug(interp, DEBUG_OPT1, "opt1 %d => ", ins);
@@ -714,16 +716,15 @@
                             }
                             else {
                                 char fullname[128];
-                                const int op = check_op(interp, fullname, ins2->opname,
+                                check_op(interp, &ins2->op, fullname, ins2->opname,
                                     ins2->symregs, ins2->symreg_count, ins2->keys);
-                                if (op < 0) {
+                                if (!ins2->op) {
                                     ins2->symregs[i] = old;
                                     IMCC_debug(interp, DEBUG_OPT2,
                                             " - no %s\n", fullname);
                                 }
                                 else {
                                     --old->use_count;
-                                    ins2->opnum = op;
                                     any = 1;
                                     IMCC_debug(interp, DEBUG_OPT2,
                                             " -> %d\n", ins2);
@@ -804,14 +805,11 @@
     opcode_t eval[4], *pc;
     int opnum;
     int i;
-    op_info_t *op_info;
-
-    opnum = interp->op_lib->op_code(interp, op, 1);
-    if (opnum < 0)
+    op_info_t *op_info = (op_info_t *)parrot_hash_get(interp, interp->op_hash, (void *)op);
+    if (!op_info || !STREQ(op_info->full_name, op))
         IMCC_fatal(interp, 1, "eval_ins: op '%s' not found\n", op);
-    op_info = interp->op_info_table + opnum;
     /* now fill registers */
-    eval[0] = opnum;
+    eval[0] = 0;
     for (i = 0; i < op_info->op_count - 1; i++) {
         switch (op_info->types[i]) {
           case PARROT_ARG_IC:
@@ -855,7 +853,7 @@
     if (setjmp(interp->current_runloop->resume))
         return -1;
 
-    pc = (interp->op_func_table[opnum]) (eval, interp);
+    pc = (OP_INFO_OPFUNC(op_info)) (eval, interp);
     free_runloop_jump_point(interp);
     /* the returned pc is either incremented by op_count or is eval,
      * as the branch offset is 0 - return true if it branched

Modified: branches/html_cleanup/compilers/imcc/parser_util.c
==============================================================================
--- branches/html_cleanup/compilers/imcc/parser_util.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/imcc/parser_util.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -64,6 +64,22 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
+static op_info_t * try_find_op(PARROT_INTERP,
+    ARGMOD(IMC_Unit *unit),
+    ARGIN(const char *name),
+    ARGMOD(SymReg **r),
+    int n,
+    int keyvec,
+    int emit)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*unit)
+        FUNC_MODIFIES(*r);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
 static const char * try_rev_cmp(ARGIN(const char *name), ARGMOD(SymReg **r))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -91,6 +107,11 @@
     , PARROT_ASSERT_ARG(r))
 #define ASSERT_ARGS_imcc_destroy_macro_values __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_try_find_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(unit) \
+    , PARROT_ASSERT_ARG(name) \
+    , PARROT_ASSERT_ARG(r))
 #define ASSERT_ARGS_try_rev_cmp __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(name) \
     , PARROT_ASSERT_ARG(r))
@@ -175,8 +196,8 @@
 
 /*
 
-=item C<int check_op(PARROT_INTERP, char *fullname, const char *name, SymReg *
-const * r, int narg, int keyvec)>
+=item C<void check_op(PARROT_INTERP, op_info_t **op_info, char *fullname, const
+char *name, SymReg * const * r, int narg, int keyvec)>
 
 Return opcode value for op name
 
@@ -184,15 +205,15 @@
 
 */
 
-PARROT_WARN_UNUSED_RESULT
-int
-check_op(PARROT_INTERP, ARGOUT(char *fullname), ARGIN(const char *name),
-        ARGIN(SymReg * const * r), int narg, int keyvec)
+void
+check_op(PARROT_INTERP, ARGOUT(op_info_t **op_info), ARGOUT(char *fullname),
+        ARGIN(const char *name), ARGIN(SymReg * const * r), int narg, int keyvec)
 {
     ASSERT_ARGS(check_op)
     op_fullname(fullname, name, r, narg, keyvec);
-
-    return interp->op_lib->op_code(interp, fullname, 1);
+    *op_info = (op_info_t *)parrot_hash_get(interp, interp->op_hash, fullname);
+    if (*op_info && !STREQ((*op_info)->full_name, fullname))
+        *op_info = NULL;
 }
 
 /*
@@ -210,8 +231,7 @@
 is_op(PARROT_INTERP, ARGIN(const char *name))
 {
     ASSERT_ARGS(is_op)
-    return interp->op_lib->op_code(interp, name, 0) >= 0
-        || interp->op_lib->op_code(interp, name, 1) >= 0;
+    return parrot_hash_exists(interp, interp->op_hash, (void *)name);
 }
 
 /*
@@ -234,7 +254,7 @@
         ARGMOD(SymReg **r), int n, int emit)
 {
     ASSERT_ARGS(var_arg_ins)
-    int op;
+    op_info_t *op;
     Instruction *ins;
     char fullname[64];
 
@@ -247,16 +267,18 @@
         IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
                     "The opcode '%s' needs arguments", name);
 
-    r[0]           = mk_const(interp, r[0]->name, 'P');
-    r[0]->pmc_type = enum_class_FixedIntegerArray;
+    if (r[0]->set == 'S') {
+        r[0]           = mk_const(interp, r[0]->name, 'P');
+        r[0]->pmc_type = enum_class_FixedIntegerArray;
+    }
 
     op_fullname(fullname, name, r, 1, 0);
-    op = interp->op_lib->op_code(interp, fullname, 1);
+    op = (op_info_t *)parrot_hash_get(interp, interp->op_hash, fullname);
 
-    PARROT_ASSERT(op >= 0);
+    PARROT_ASSERT(op && STREQ(op->full_name, fullname));
 
     ins         = _mk_instruction(name, "", n, r, dirs);
-    ins->opnum  = op;
+    ins->op     = op;
     ins->opsize = n + 1;
 
     if (emit)
@@ -309,33 +331,40 @@
         return var_arg_ins(interp, unit, name, r, n, emit);
     else {
         Instruction *ins;
-        int i, op, len;
+        int i, len;
         int dirs = 0;
-        op_info_t   *op_info;
+        op_info_t *op;
         char fullname[64] = "", format[128] = "";
 
         op_fullname(fullname, name, r, n, keyvec);
-        op = interp->op_lib->op_code(interp, fullname, 1);
+        op = (op_info_t *)parrot_hash_get(interp, interp->op_hash, fullname);
+        if (op && !STREQ(op->full_name, fullname))
+            op = NULL;
 
         /* maybe we have a fullname */
-        if (op < 0)
-            op = interp->op_lib->op_code(interp, name, 1);
+        if (!op) {
+            op = (op_info_t *)parrot_hash_get(interp, interp->op_hash, name);
+            if (op && !STREQ(op->full_name, name))
+                op = NULL;
+        }
 
         /* still wrong, try reverse compare */
-        if (op < 0) {
+        if (!op) {
             const char * const n_name = try_rev_cmp(name, r);
             if (n_name) {
                 name = n_name;
                 op_fullname(fullname, name, r, n, keyvec);
-                op   = interp->op_lib->op_code(interp, fullname, 1);
+                op = (op_info_t *)parrot_hash_get(interp, interp->op_hash, fullname);
+                if (op && !STREQ(op->full_name, fullname))
+                    op = NULL;
             }
         }
 
         /* still wrong, try to find an existing op */
-        if (op < 0)
+        if (!op)
             op = try_find_op(interp, unit, name, r, n, keyvec, emit);
 
-        if (op < 0) {
+        if (!op) {
             int ok = 0;
 
             /* check mixed constants */
@@ -356,26 +385,25 @@
         else
             strcpy(fullname, name);
 
-        if (op < 0)
+        if (!op)
             IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
                         "The opcode '%s' (%s<%d>) was not found. "
                         "Check the type and number of the arguments",
                         fullname, name, n);
 
-        op_info = &interp->op_info_table[op];
         *format = '\0';
 
         /* info->op_count is args + 1
          * build instruction format
          * set LV_in / out flags */
-        if (n != op_info->op_count - 1)
+        if (n != op->op_count - 1)
             IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
                     "arg count mismatch: op #%d '%s' needs %d given %d",
-                    op, fullname, op_info->op_count-1, n);
+                    op, fullname, op->op_count-1, n);
 
         /* XXX Speed up some by keep track of the end of format ourselves */
         for (i = 0; i < n; i++) {
-            switch (op_info->dirs[i]) {
+            switch (op->dirs[i]) {
               case PARROT_ARGDIR_INOUT:
                 dirs |= 1 << (16 + i);
                 /* go on */
@@ -422,7 +450,7 @@
         ins->keys  |= keyvec;
 
         /* fill in oplib's info */
-        ins->opnum  = op;
+        ins->op  = op;
         ins->opsize = n + 1;
 
         /* mark end as absolute branch */
@@ -443,8 +471,8 @@
 
         /* set up branch flags
          * mark registers that are labels */
-        for (i = 0; i < op_info->op_count - 1; i++) {
-            if (op_info->labels[i])
+        for (i = 0; i < op->op_count - 1; i++) {
+            if (op->labels[i])
                 ins->type |= ITBRANCH | (1 << i);
             else {
                 if (r[i]->type == VTADDRESS)
@@ -453,7 +481,7 @@
             }
         }
 
-        if (op_info->jump) {
+        if (op->jump) {
             ins->type |= ITBRANCH;
             /* TODO use opnum constants */
             if (STREQ(name, "branch")
@@ -805,7 +833,8 @@
         IMCC_INFO(interp) = imc_info;
     }
 
-    fs = string_make(interp, fullname, strlen(fullname), NULL, 0);
+    fs = Parrot_str_new_init(interp, fullname, strlen(fullname),
+            Parrot_default_encoding_ptr, 0);
 
     if (Parrot_stat_info_intval(interp, fs, STAT_ISDIR))
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
@@ -964,8 +993,8 @@
 
 /*
 
-=item C<int try_find_op(PARROT_INTERP, IMC_Unit *unit, const char *name, SymReg
-**r, int n, int keyvec, int emit)>
+=item C<static op_info_t * try_find_op(PARROT_INTERP, IMC_Unit *unit, const char
+*name, SymReg **r, int n, int keyvec, int emit)>
 
 Try to find valid op doing the same operation e.g.
 
@@ -980,7 +1009,8 @@
 */
 
 PARROT_WARN_UNUSED_RESULT
-int
+PARROT_CAN_RETURN_NULL
+static op_info_t *
 try_find_op(PARROT_INTERP, ARGMOD(IMC_Unit *unit), ARGIN(const char *name),
         ARGMOD(SymReg **r), int n, int keyvec, int emit)
 {
@@ -1016,11 +1046,15 @@
     }
 
     if (changed) {
+        op_info_t *op;
         op_fullname(fullname, name, r, n, keyvec);
-        return interp->op_lib->op_code(interp, fullname, 1);
+        op = (op_info_t *)parrot_hash_get(interp, interp->op_hash, fullname);
+        if (op && !STREQ(op->full_name, fullname))
+            op = NULL;
+        return op;
     }
 
-    return -1;
+    return NULL;
 }
 
 /*

Modified: branches/html_cleanup/compilers/imcc/pbc.c
==============================================================================
--- branches/html_cleanup/compilers/imcc/pbc.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/imcc/pbc.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -9,6 +9,7 @@
 #include "parrot/pmc_freeze.h"
 #include "pmc/pmc_sub.h"
 #include "pmc/pmc_callcontext.h"
+#include "parrot/oplib/core_ops.h"
 
 /* HEADERIZER HFILE: compilers/imcc/pbc.h */
 
@@ -360,11 +361,9 @@
     }
     else {
         /* initialize rlookup cache */
-        interp->code->const_table->string_hash =
-            Parrot_pmc_new_init_int(interp, enum_class_Hash, enum_type_INTVAL);
-        ((Hash *)VTABLE_get_pointer(interp, interp->code->const_table->string_hash))->compare =
-            (hash_comp_fn)hash_compare_string_distinct_enc;
-
+        interp->code->const_table->string_hash = parrot_create_hash(interp,
+                enum_type_INTVAL,
+                Hash_key_type_STRING_enc);
         interp->code->const_table->constants =
             mem_gc_allocate_n_zeroed_typed(interp, newcount, PackFile_Constant);
     }
@@ -642,6 +641,7 @@
     ASSERT_ARGS(get_code_size)
     Instruction *ins = unit->instructions;
     size_t       code_size;
+    op_lib_t    *core_ops = PARROT_GET_CORE_OPLIB(interp);
 
     /* run through instructions:
      * - sanity check
@@ -664,12 +664,12 @@
         }
         else if (ins->opname && *ins->opname) {
             (*src_lines)++;
-            if (ins->opnum < 0)
+            if (!ins->op)
                 IMCC_fatal(interp, 1, "get_code_size: "
                         "no opnum ins#%d %d\n",
                         ins->index, ins);
 
-            if (ins->opnum == PARROT_OP_set_p_pc) {
+            if (ins->op == &core_ops->op_info_table[PARROT_OP_set_p_pc]) {
                 /* set_p_pc opcode */
                 IMCC_debug(interp, DEBUG_PBC_FIXUP, "PMC constant %s\n",
                         ins->symregs[1]->name);
@@ -702,11 +702,10 @@
 
 static
 opcode_t
-bytecode_map_op(PARROT_INTERP, opcode_t op) {
+bytecode_map_op(PARROT_INTERP, op_info_t *info) {
     int i;
-    op_info_t         *info    = &interp->op_info_table[op];
     op_lib_t          *lib     = info->lib;
-    op_func_t         op_func  = interp->op_func_table[op];
+    op_func_t         op_func  = OP_INFO_OPFUNC(info);
     PackFile_ByteCode *bc      = interp->code;
     PackFile_ByteCode_OpMappingEntry *om;
 
@@ -857,6 +856,7 @@
     ASSERT_ARGS(fixup_globals)
     subs_t *s;
     int     jumppc = 0;
+    op_lib_t *core_ops = PARROT_GET_CORE_OPLIB(interp);
 
     for (s = IMCC_INFO(interp)->globals->cs->first; s; s = s->next) {
         const SymHash * const hsh = &s->fixup;
@@ -912,7 +912,7 @@
                     SymReg * const nam = mk_const(interp, fixup->name,
                             fixup->type & VT_ENCODED ? 'U' : 'S');
 
-                    const int op = interp->op_lib->op_code(interp, "find_sub_not_null_p_sc", 1);
+                    op_info_t *op = &core_ops->op_info_table[PARROT_OP_find_sub_not_null_p_sc];
                     PARROT_ASSERT(op);
 
                     interp->code->base.data[addr] = bytecode_map_op(interp, op);
@@ -973,9 +973,8 @@
          * get first part as charset, rest as string
          */
         STRING     *s;
-        const CHARSET *s_charset;
-        const ENCODING *s_encoding = NULL;
-        const ENCODING *src_encoding;
+        const STR_VTABLE *s_encoding;
+        const STR_VTABLE *src_encoding;
         #define MAX_NAME 31
         char charset_name[MAX_NAME + 1];
         char encoding_name[MAX_NAME + 1];
@@ -983,38 +982,38 @@
         char * p2 = strchr(r->name, ':');
         PARROT_ASSERT(p && p[-1] == ':');
         if (p2 < p -1) {
+            /* Handle the old 'encoding:charset' format by trying
+             * encoding as well as charset */
             strncpy(encoding_name, buf, p2 - buf);
             encoding_name[p2-buf] = '\0';
             strncpy(charset_name, p2 +1, p - p2 - 2);
             charset_name[p- p2 - 2] = '\0';
             /*fprintf(stderr, "%s:%s\n", charset_name, encoding_name);*/
-            s_charset = Parrot_find_charset(interp, charset_name);
-            if (s_charset == NULL)
-                Parrot_ex_throw_from_c_args(interp, NULL,
-                        EXCEPTION_INVALID_STRING_REPRESENTATION,
-                        "Unknown charset '%s'", charset_name);
             s_encoding = Parrot_find_encoding(interp, encoding_name);
-            if (s_encoding == NULL)
-                Parrot_ex_throw_from_c_args(interp, NULL,
-                        EXCEPTION_INVALID_STRING_REPRESENTATION,
-                        "Unknown encoding '%s'", encoding_name);
+            if (s_encoding == NULL) {
+                s_encoding = Parrot_find_encoding(interp, charset_name);
+                if (s_encoding == NULL)
+                    Parrot_ex_throw_from_c_args(interp, NULL,
+                            EXCEPTION_INVALID_STRING_REPRESENTATION,
+                            "Unknown encoding '%s:%s'",
+                            encoding_name, charset_name);
+            }
         }
         else {
-            strncpy(charset_name, buf, p - buf - 1);
-            charset_name[p - buf - 1] = '\0';
-            /*fprintf(stderr, "%s\n", charset_name);*/
-            s_charset = Parrot_find_charset(interp, charset_name);
-            if (s_charset == NULL)
+            strncpy(encoding_name, buf, p - buf - 1);
+            encoding_name[p - buf - 1] = '\0';
+            charset_name[0] = '\0';
+            /*fprintf(stderr, "%s\n", encoding_name);*/
+            s_encoding = Parrot_find_encoding(interp, encoding_name);
+            if (s_encoding == NULL)
                 Parrot_ex_throw_from_c_args(interp, NULL,
                         EXCEPTION_INVALID_STRING_REPRESENTATION,
-                        "Unknown charset '%s'", charset_name);
+                        "Unknown encoding '%s'", encoding_name);
         }
-        if (strcmp(charset_name, "unicode") == 0)
-            src_encoding = Parrot_utf8_encoding_ptr;
+        if (s_encoding->max_bytes_per_codepoint == 1)
+            src_encoding = Parrot_ascii_encoding_ptr;
         else
-            src_encoding = Parrot_fixed_8_encoding_ptr;
-        if (s_encoding == NULL)
-            s_encoding = src_encoding;
+            src_encoding = Parrot_utf8_encoding_ptr;
 
         /* past delim */
         buf     = p + 1;
@@ -1032,10 +1031,10 @@
             }
             {
                 STRING * aux = Parrot_str_new_init(interp, buf, p - buf,
-                        src_encoding, s_charset, 0);
+                        src_encoding, 0);
                 s = Parrot_str_unescape_string(interp, aux,
-                        s_charset, s_encoding, PObj_constant_FLAG);
-                if (!CHARSET_VALIDATE(interp, s))
+                        s_encoding, PObj_constant_FLAG);
+                if (!STRING_validate(interp, s))
                        Parrot_ex_throw_from_c_args(interp, NULL,
                                EXCEPTION_INVALID_STRING_REPRESENTATION,
                                "Malformed string");
@@ -1049,12 +1048,13 @@
     }
     else if (*buf == '\'') {   /* TODO handle python raw strings */
         buf++;
-        return string_make(interp, buf, strlen(buf) - 1, "ascii",
-                PObj_constant_FLAG);
+        return Parrot_str_new_init(interp, buf, strlen(buf) - 1,
+                Parrot_ascii_encoding_ptr, PObj_constant_FLAG);
     }
 
     /* unquoted bare name - ASCII only don't unescape it */
-    return string_make(interp, buf, strlen(buf), "ascii", PObj_constant_FLAG);
+    return Parrot_str_new_init(interp, buf, strlen(buf),
+            Parrot_ascii_encoding_ptr, PObj_constant_FLAG);
 }
 
 /*
@@ -1102,7 +1102,8 @@
     }
     else if (*buf == '\'') {
         buf++;
-        return string_make(interp, buf, strlen(buf) - 1, "ascii", PObj_constant_FLAG);
+        return Parrot_str_new_init(interp, buf, strlen(buf) - 1,
+                Parrot_ascii_encoding_ptr, PObj_constant_FLAG);
     }
     else {
         IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR, "Unknown STRING format: '%s'\n", buf);
@@ -1141,7 +1142,7 @@
         constant->type              = PFC_STRING;
         constant->u.string          = s;
 
-        VTABLE_set_integer_keyed_str(interp, table->string_hash, s, k);
+        parrot_hash_put(interp, table->string_hash, s, (void *)k);
 
         return k;
     }
@@ -1305,7 +1306,7 @@
         }
     }
 
-    if (!lex_info && (unit->outer || need_lex)) {
+    if (!lex_info && need_lex) {
         lex_info = Parrot_pmc_new_noinit(interp, lex_info_id);
         VTABLE_init_pmc(interp, lex_info, sub_pmc);
     }
@@ -1882,7 +1883,7 @@
     char   *src, *chr, *start;
     int     base;
 
-    if (s->encoding != Parrot_fixed_8_encoding_ptr)
+    if (STRING_max_bytes_per_codepoint(s) != 1)
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
             "unhandled string encoding in FixedIntegerArray initialization");
 
@@ -2226,9 +2227,10 @@
     ASSERT_ARGS(verify_signature)
     PMC    *changed_sig    = NULL;
     PMC    * const sig_arr = interp->code->const_table->constants[pc[-1]].u.key;
+    op_lib_t *core_ops = PARROT_GET_CORE_OPLIB(interp);
     int     needed         = 0;
-    int     no_consts      = (ins->opnum == PARROT_OP_get_results_pc
-                           || ins->opnum == PARROT_OP_get_params_pc);
+    int     no_consts      = (ins->op == &core_ops->op_info_table[PARROT_OP_get_results_pc]
+                           || ins->op == &core_ops->op_info_table[PARROT_OP_get_params_pc]);
 
     INTVAL  i, n;
 
@@ -2304,7 +2306,8 @@
 {
     ASSERT_ARGS(e_pbc_emit)
     int        ok = 0;
-    int        op, i;
+    int        i;
+    op_lib_t *core_ops = PARROT_GET_CORE_OPLIB(interp);
 
     /* first instruction, do initialisation ... */
     if (ins == unit->instructions) {
@@ -2376,7 +2379,7 @@
                     &interp->initial_pf->directory;
             interp->code->annotations = (PackFile_Annotations *)
                     PackFile_Segment_new_seg(interp, dir,
-                        PF_ANNOTATIONS_SEG, name, add);
+                        PF_ANNOTATIONS_SEG, name, 1);
             interp->code->annotations->code = interp->code;
 
             /* Create initial group. */
@@ -2428,16 +2431,14 @@
             IMCC_INFO(interp)->debug_seg->base.data[IMCC_INFO(interp)->ins_line++] =
                 (opcode_t)ins->line;
 
-        op = (opcode_t)ins->opnum;
-
         /* Get the info for that opcode */
-        op_info = &interp->op_info_table[op];
+        op_info = ins->op;
 
         IMCC_debug(interp, DEBUG_PBC, "%d %s", IMCC_INFO(interp)->npc,
             op_info->full_name);
 
         /* Start generating the bytecode */
-        *(IMCC_INFO(interp)->pc)++ = bytecode_map_op(interp, op);
+        *(IMCC_INFO(interp)->pc)++ = bytecode_map_op(interp, op_info);
 
         for (i = 0; i < op_info->op_count-1; i++) {
             switch (op_info->types[i]) {
@@ -2489,10 +2490,10 @@
                 break;
             }
         }
-        if (ins->opnum == PARROT_OP_set_args_pc
-        ||  ins->opnum == PARROT_OP_get_results_pc
-        ||  ins->opnum == PARROT_OP_get_params_pc
-        ||  ins->opnum == PARROT_OP_set_returns_pc) {
+        if (ins->op == &core_ops->op_info_table[PARROT_OP_set_args_pc]
+        ||  ins->op == &core_ops->op_info_table[PARROT_OP_get_results_pc]
+        ||  ins->op == &core_ops->op_info_table[PARROT_OP_get_params_pc]
+        ||  ins->op == &core_ops->op_info_table[PARROT_OP_set_returns_pc]) {
 
             /* TODO get rid of verify_signature - PIR call sigs are already
              * fixed, but PASM still needs it */

Modified: branches/html_cleanup/compilers/imcc/pcc.c
==============================================================================
--- branches/html_cleanup/compilers/imcc/pcc.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/imcc/pcc.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -29,6 +29,7 @@
 #include <string.h>
 #include "imc.h"
 #include "parser.h"
+#include "parrot/oplib/core_ops.h"
 
 /* HEADERIZER HFILE: compilers/imcc/imc.h */
 
@@ -353,7 +354,8 @@
         bufpos--;
     memcpy(buf+bufpos, subf, lensubf);
 
-    regs[0] = mk_const(interp, buf, 'S');
+    regs[0] = mk_const(interp, buf, 'P');
+    regs[0]->pmc_type = enum_class_FixedIntegerArray;
     ins     = insINS(interp, unit, ins, op_name, regs, n + 1);
 
     if (n >= PCC_GET_ARGS_LIMIT) {
@@ -675,6 +677,7 @@
     SymReg *regs[2];
     Instruction *get_params, *tmp_ins, *unused_ins;
     char *buf;
+    op_lib_t *core_ops = PARROT_GET_CORE_OPLIB(interp);
 
     if (!(unit->instructions->type & ITLABEL))
         return 0;
@@ -696,7 +699,7 @@
 
     get_params = unit->instructions->next;
 
-    if (get_params->opnum != PARROT_OP_get_params_pc)
+    if (get_params->op != &core_ops->op_info_table[PARROT_OP_get_params_pc])
         return 0;
 
     buf = (char *)malloc(strlen(this_sub->name) + 3);
@@ -749,7 +752,13 @@
         ins     = insINS(interp, unit, ins, "tailcall", regs, 1);
     }
 
+    /* don't leak this sub SymReg; it gets detached here */
+    if (regs[0]->pcc_sub)
+        free_pcc_sub(regs[0]->pcc_sub);
+
+    /* this register is always the symbol "self", global to this IMC_Unit */
     regs[0]->pcc_sub  = sub->pcc_sub;
+
     sub->pcc_sub      = NULL;
     ins->type        |= ITPCCSUB;
 }

Modified: branches/html_cleanup/compilers/imcc/reg_alloc.c
==============================================================================
--- branches/html_cleanup/compilers/imcc/reg_alloc.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/imcc/reg_alloc.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -167,8 +167,6 @@
                 (OPT_PRE|OPT_CFG|OPT_PASM)) && unit->pasm_file)
         goto done;
 
-    IMCC_INFO(interp)->allocated = 0;
-
     if (unit->instructions->symreg_count)
       function = unit->instructions->symregs[0]->name;
     else

Modified: branches/html_cleanup/compilers/imcc/symreg.c
==============================================================================
--- branches/html_cleanup/compilers/imcc/symreg.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/imcc/symreg.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -634,7 +634,7 @@
 
 /*
 
-=item C<SymReg * mk_ident(PARROT_INTERP, const char *name, int t)>
+=item C<SymReg * mk_ident(PARROT_INTERP, const char *name, int t, INTVAL type)>
 
 Makes a new identifier.
 
@@ -645,18 +645,17 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_IGNORABLE_RESULT
 SymReg *
-mk_ident(PARROT_INTERP, ARGIN(const char *name), int t)
+mk_ident(PARROT_INTERP, ARGIN(const char *name), int t, INTVAL type)
 {
     ASSERT_ARGS(mk_ident)
     char   * const fullname = _mk_fullname(interp, IMCC_INFO(interp)->namespace_stack, name);
     SymReg *r = get_sym_by_name(&(IMCC_INFO(interp)->cur_unit->hash), name);
-    if (r && r->set != t)
+    if (r && (r->set != t || r->type != type))
         IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
                 "syntax error, duplicated IDENTIFIER '%s'\n", fullname);
 
     r = mk_symreg(interp, fullname, t);
-    r->type = VTIDENTIFIER;
-
+    r->type = type;
 
     if (IMCC_INFO(interp)->namespace_stack) {
         Identifier * const ident = mem_gc_allocate_zeroed_typed(interp, Identifier);
@@ -768,16 +767,17 @@
                     "global PMC constant not allowed");
 
         r = _mk_symreg(interp, &IMCC_INFO(interp)->ghash, name, t);
+
+        r->type = VT_CONSTP;
     }
     else {
-        r = mk_ident(interp, name, t);
+        r = mk_ident(interp, name, t, VT_CONSTP);
 
         if (t == 'P')
             return mk_pmc_const_2(interp, IMCC_INFO(interp)->cur_unit, r, val);
     }
 
-    r->type = VT_CONSTP;
-    r->reg  = val;
+    r->reg = val;
 
     return r;
 }
@@ -1256,6 +1256,30 @@
 
 /*
 
+=item C<void free_pcc_sub(pcc_sub_t *sub)>
+
+Frees all memory of the given pcc_sub_t.
+
+=cut
+
+*/
+
+void
+free_pcc_sub(ARGMOD(pcc_sub_t *sub))
+{
+    ASSERT_ARGS(free_pcc_sub)
+
+    mem_sys_free(sub->multi);
+    mem_sys_free(sub->args);
+    mem_sys_free(sub->arg_flags);
+    mem_sys_free(sub->ret);
+    mem_sys_free(sub->ret_flags);
+    mem_sys_free(sub);
+}
+
+
+/*
+
 =item C<void free_sym(SymReg *r)>
 
 Frees all memory of the specified SymReg.  If it has a pcc_sub_t entry, frees
@@ -1271,14 +1295,8 @@
     ASSERT_ARGS(free_sym)
     pcc_sub_t * const sub = r->pcc_sub;
 
-    if (sub) {
-        mem_sys_free(sub->multi);
-        mem_sys_free(sub->args);
-        mem_sys_free(sub->arg_flags);
-        mem_sys_free(sub->ret);
-        mem_sys_free(sub->ret_flags);
-        mem_sys_free(sub);
-    }
+    if (sub)
+        free_pcc_sub(sub);
 
     if (r->set == 'K') {
         SymReg *key     = r->nextkey;

Modified: branches/html_cleanup/compilers/imcc/symreg.h
==============================================================================
--- branches/html_cleanup/compilers/imcc/symreg.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/imcc/symreg.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -84,6 +84,45 @@
     Identifier *idents;
 };
 
+typedef enum {
+    P_NONE           = 0x00,                  /* 0<<0 */
+    P_NEED_LEX       = 0x01,                  /* 1<<0 */
+    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_NSENTRY        = SUB_COMP_FLAG_NSENTRY  /* 1<<11 0x800 - 11       */
+} pragma_enum_t;
+
+typedef struct pcc_sub_t {
+    SymReg *sub;
+    SymReg *cc;
+    SymReg **args;
+    SymReg **multi;
+    SymReg **ret;
+    SymReg *object;
+    int    *arg_flags;    /* :slurpy, :optional, ... */
+    int    *ret_flags;    /* :slurpy, :optional, ... */
+    int     nargs;
+    int     nret;
+    int     nmulti;
+    int     yield;
+    int     tailcall;
+    int     label;
+    INTVAL  pragma;
+} pcc_sub_t;
+
+enum uniq_t {
+    U_add_once,
+    U_add_uniq_label,
+    U_add_uniq_sub,
+    U_add_all
+};
+
 /* functions */
 
 /* HEADERIZER BEGIN: compilers/imcc/symreg.c */
@@ -195,6 +234,10 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+void free_pcc_sub(ARGMOD(pcc_sub_t *sub))
+        __attribute__nonnull__(1)
+        FUNC_MODIFIES(*sub);
+
 void free_sym(ARGMOD(SymReg *r))
         __attribute__nonnull__(1)
         FUNC_MODIFIES(*r);
@@ -239,7 +282,10 @@
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_IGNORABLE_RESULT
-SymReg * mk_ident(PARROT_INTERP, ARGIN(const char *name), int t)
+SymReg * mk_ident(PARROT_INTERP,
+    ARGIN(const char *name),
+    int t,
+    INTVAL type)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -362,6 +408,8 @@
 #define ASSERT_ARGS_find_sym __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(name))
+#define ASSERT_ARGS_free_pcc_sub __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(sub))
 #define ASSERT_ARGS_free_sym __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(r))
 #define ASSERT_ARGS_get_sym __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -419,45 +467,6 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: compilers/imcc/symreg.c */
 
-typedef enum {
-    P_NONE           = 0x00,                  /* 0<<0 */
-    P_NEED_LEX       = 0x01,                  /* 1<<0 */
-    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_NSENTRY        = SUB_COMP_FLAG_NSENTRY  /* 1<<11 0x800 - 11       */
-} pragma_enum_t;
-
-typedef struct pcc_sub_t {
-    SymReg *sub;
-    SymReg *cc;
-    SymReg **args;
-    SymReg **multi;
-    SymReg **ret;
-    SymReg *object;
-    int    *arg_flags;    /* :slurpy, :optional, ... */
-    int    *ret_flags;    /* :slurpy, :optional, ... */
-    int     nargs;
-    int     nret;
-    int     nmulti;
-    int     yield;
-    int     tailcall;
-    int     label;
-    INTVAL  pragma;
-} pcc_sub_t;
-
-enum uniq_t {
-    U_add_once,
-    U_add_uniq_label,
-    U_add_uniq_sub,
-    U_add_all
-};
-
 #endif /* PARROT_IMCC_SYMREG_H_GUARD */
 
 /*

Modified: branches/html_cleanup/compilers/opsc/src/Ops/Emitter.pm
==============================================================================
--- branches/html_cleanup/compilers/opsc/src/Ops/Emitter.pm	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/opsc/src/Ops/Emitter.pm	Wed Sep 22 03:35:47 2010	(r49232)
@@ -256,7 +256,7 @@
     my $dispatch := self.trans.init_func_disaptch;
 
     # TODO There is a bug in NQP about \{
-    $fh.print(q|
+    $fh.print((self.flags<core> ?? 'PARROT_EXPORT' !! '') ~ q|
 op_lib_t *
 | ~ self.init_func ~ q|(PARROT_INTERP, long init) {
     /* initialize and return op_lib ptr */
@@ -359,7 +359,8 @@
 #include "parrot/oplib.h"
 #include "parrot/runcore_api.h"
 
-{self.sym_export} op_lib_t *{self.init_func}(PARROT_INTERP, long init);
+| ~ (self.flags<core> ?? 'PARROT_EXPORT' !! '') ~ qq|
+op_lib_t *{self.init_func}(PARROT_INTERP, long init);
 
 |);
 }

Modified: branches/html_cleanup/compilers/pct/src/PAST/Compiler.pir
==============================================================================
--- branches/html_cleanup/compilers/pct/src/PAST/Compiler.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/pct/src/PAST/Compiler.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -2087,7 +2087,7 @@
     $S0 = files
     sourceline = concat ' (', $S0
     concat sourceline, ':'
-    $I0 = source.'lineof'(pos)
+    $I0 = self.'lineof'(source, pos)
     inc $I0
     $S0 = $I0
     concat sourceline, $S0

Modified: branches/html_cleanup/compilers/pct/src/PCT/HLLCompiler.pir
==============================================================================
--- branches/html_cleanup/compilers/pct/src/PCT/HLLCompiler.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/pct/src/PCT/HLLCompiler.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -955,6 +955,70 @@
     .return ($P0)
 .end
 
+=item lineof(target, pos [, cache :named('cache')])
+
+Return the line number of offset C<pos> within C<target>.  The return
+value uses zero for the first line.  If C<cache> is true, then
+memoize the line offsets as a C<!lineof> property on C<target>.
+
+=cut
+
+.sub 'lineof' :method
+    .param pmc target
+    .param int pos
+    .param int cache           :optional :named('cache')
+    .local pmc linepos
+
+    # If we've previously cached C<linepos> for target, we use it.
+    unless cache goto linepos_build
+    linepos = getprop '!linepos', target
+    unless null linepos goto linepos_done
+
+    # calculate a new linepos array.
+  linepos_build:
+    linepos = new ['ResizableIntegerArray']
+    unless cache goto linepos_build_1
+    setprop target, '!linepos', linepos
+  linepos_build_1:
+    .local string s
+    .local int jpos, eos
+    s = target
+    eos = length s
+    jpos = 0
+    # Search for all of the newline markers in C<target>.  When we
+    # find one, mark the ending offset of the line in C<linepos>.
+  linepos_loop:
+    jpos = find_cclass .CCLASS_NEWLINE, s, jpos, eos
+    unless jpos < eos goto linepos_done
+    $I0 = ord s, jpos
+    inc jpos
+    push linepos, jpos
+    # Treat \r\n as a single logical newline.
+    if $I0 != 13 goto linepos_loop
+    $I0 = ord s, jpos
+    if $I0 != 10 goto linepos_loop
+    inc jpos
+    goto linepos_loop
+  linepos_done:
+
+    # We have C<linepos>, so now we search the array for the largest
+    # element that is not greater than C<pos>.  The index of that
+    # element is the line number to be returned.
+    # (Potential optimization: use a binary search.)
+    .local int line, count
+    count = elements linepos
+    line = 0
+  line_loop:
+    if line >= count goto line_done
+    $I0 = linepos[line]
+    if $I0 > pos goto line_done
+    inc line
+    goto line_loop
+  line_done:
+    .return (line)
+.end
+
+
 =item dumper(obj, name, options)
 
 Dump C<obj> with C<name> according to C<options>.

Modified: branches/html_cleanup/compilers/pct/src/POST/Compiler.pir
==============================================================================
--- branches/html_cleanup/compilers/pct/src/POST/Compiler.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/compilers/pct/src/POST/Compiler.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -130,9 +130,8 @@
     pos = cpost['pos']
     if null pos goto done_subline
     source = cpost['source']
-    $I0 = can source, 'lineof'
-    unless $I0 goto done_subline
-    line = source.'lineof'(pos)
+    if null source goto done_subline
+    line = self.'lineof'(source, pos, 'cache'=>1)
     inc line
   done_subline:
     self.'pir'(cpost)

Modified: branches/html_cleanup/config/auto/gcc.pm
==============================================================================
--- branches/html_cleanup/config/auto/gcc.pm	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/config/auto/gcc.pm	Wed Sep 22 03:35:47 2010	(r49232)
@@ -86,6 +86,7 @@
 
     $conf->data->set( sym_export => '__attribute__ ((visibility("default")))' )
         if $gccversion >= 4.0 && !$conf->data->get('sym_export');
+    $conf->data->set( noinline => '__attribute__ ((noinline))' );
 
     # sneaky check for g++
     my $gpp = (index($conf->data->get('cc'), '++') > 0) ? 1 : 0;

Modified: branches/html_cleanup/config/auto/msvc.pm
==============================================================================
--- branches/html_cleanup/config/auto/msvc.pm	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/config/auto/msvc.pm	Wed Sep 22 03:35:47 2010	(r49232)
@@ -89,6 +89,9 @@
         # for details.
         $conf->data->add( " ", "ccflags", "-D_CRT_SECURE_NO_DEPRECATE" );
     }
+
+    $conf->data->set( noinline   => '__declspec(noinline)' );
+
     return 1;
 }
 

Modified: branches/html_cleanup/config/auto/pcre.pm
==============================================================================
--- branches/html_cleanup/config/auto/pcre.pm	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/config/auto/pcre.pm	Wed Sep 22 03:35:47 2010	(r49232)
@@ -35,11 +35,10 @@
 
     my $without = $conf->options->get( qw| without-pcre | );
 
-    if ($without) {
-        $conf->data->set( HAS_PCRE => 0 );
-        $self->set_result('no');
-        return 1;
-    }
+    $self->set_result('no');
+    $conf->data->set( HAS_PCRE => 0 );
+
+    return 1 if ($without);
 
     my $osname = $conf->data->get('osname');
 
@@ -53,12 +52,12 @@
 
     $conf->cc_gen('config/auto/pcre/pcre_c.in');
     eval { $conf->cc_build( q{}, $extra_libs ) };
-    my $has_pcre = 0;
     if ( !$@ ) {
         my $test = $conf->cc_run();
-        $has_pcre = $self->_evaluate_cc_run($conf, $test);
+        if ( my $has_pcre = $self->_evaluate_cc_run($conf, $test) ) {
+        $conf->data->set( HAS_PCRE => $has_pcre);
+        }
     }
-    $conf->data->set( HAS_PCRE => $has_pcre);
 
     return 1;
 }

Modified: branches/html_cleanup/config/auto/readline.pm
==============================================================================
--- branches/html_cleanup/config/auto/readline.pm	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/config/auto/readline.pm	Wed Sep 22 03:35:47 2010	(r49232)
@@ -36,6 +36,14 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
+    my $without_opt = $conf->options->get('without-readline');
+
+    if ($without_opt) {
+        $conf->data->set('HAS_READLINE' => 0);
+        $self->set_result('not requested');
+        return 1;
+    }
+
     my $cc     = $conf->data->get('cc');
     my $osname = $conf->data->get('osname');
 

Modified: branches/html_cleanup/config/gen/config_h/config_h.in
==============================================================================
--- branches/html_cleanup/config/gen/config_h/config_h.in	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/config/gen/config_h/config_h.in	Wed Sep 22 03:35:47 2010	(r49232)
@@ -84,6 +84,8 @@
 #endif
 #endif
 
+#define PARROT_NOINLINE @noinline@
+
 #if defined(PARROT_IN_CORE)
 
 /* Put any other symbols here. */
@@ -150,8 +152,10 @@
 #define PARROT_ at jitcpu@ 1
 
 /* Oplib and dynamic ops related. */
-#define PARROT_CORE_OPLIB_NAME "core_ops"
-#define PARROT_CORE_OPLIB_INIT Parrot_DynOp_core_ at MAJOR@_ at MINOR@_ at PATCH@
+#define PARROT_CORE_OPLIB_NAME    "core_ops"
+#define PARROT_CORE_OPLIB_INIT    Parrot_DynOp_core_ at MAJOR@_ at MINOR@_ at PATCH@
+
+#define  PARROT_GET_CORE_OPLIB(i)  PARROT_CORE_OPLIB_INIT((i), 1)
 
 /* ICU. */
 #define PARROT_HAS_ICU @has_icu@

Modified: branches/html_cleanup/config/gen/makefiles/root.in
==============================================================================
--- branches/html_cleanup/config/gen/makefiles/root.in	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/config/gen/makefiles/root.in	Wed Sep 22 03:35:47 2010	(r49232)
@@ -368,7 +368,6 @@
 	$(INC_DIR)/interpreter.h \
 	$(INC_DIR)/datatypes.h \
 	$(INC_DIR)/encoding.h \
-	$(INC_DIR)/charset.h \
 	$(INC_DIR)/string.h \
 	$(INC_DIR)/string_primitives.h \
 	$(INC_DIR)/hash.h \
@@ -417,11 +416,20 @@
 GENERAL_H_FILES   = $(NONGEN_HEADERS) $(GEN_HEADERS) \
 
 
-CHARSET_O_FILES   = @TEMP_charset_o@
 CLASS_PMC_FILES   = @TEMP_pmc_classes_pmc@
 CLASS_O_FILES     = @TEMP_pmc_classes_o@
 CLASS_STR_FILES   = @TEMP_pmc_classes_str@
-ENCODING_O_FILES  = @TEMP_encoding_o@
+
+ENCODING_O_FILES = \
+    src/string/encoding/shared$(O) \
+    src/string/encoding/tables$(O) \
+    src/string/encoding/ascii$(O) \
+    src/string/encoding/latin1$(O) \
+    src/string/encoding/binary$(O) \
+    src/string/encoding/utf8$(O) \
+    src/string/encoding/utf16$(O) \
+    src/string/encoding/ucs2$(O) \
+    src/string/encoding/ucs4$(O)
 
 IO_O_FILES = \
     src/io/core$(O) \
@@ -440,7 +448,6 @@
     src/string/api$(O) \
     src/ops/core_ops$(O) \
 #IF(i386_has_gcc_cmpxchg):    src/atomic/gcc_x86$(O) \
-    src/string/charset$(O) \
     src/core_pmcs$(O) \
     src/datatypes$(O) \
     src/debug$(O) \
@@ -457,6 +464,7 @@
     src/gc/gc_inf$(O) \
     src/gc/mark_sweep$(O) \
     src/gc/system$(O) \
+    src/gc/string_gc$(O) \
     src/global_setup$(O) \
     src/hash$(O) \
     src/hll$(O) \
@@ -683,6 +691,7 @@
     src/nci/core_thunks.str \
 #IF(has_extra_nci_thunks): src/nci/extra_thunks.str \
     src/packfile.str \
+    src/packfile/pf_items.str \
     src/pmc.str \
     src/pmc_freeze.str \
     src/oo.str \
@@ -913,11 +922,17 @@
 src/oo$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_class.h src/oo.c \
     include/pmc/pmc_object.h src/oo.str $(INC_DIR)/oo_private.h
 
-src/scheduler$(O) : $(PARROT_H_HEADERS) src/scheduler.str src/scheduler.c \
-	include/pmc/pmc_scheduler.h include/pmc/pmc_task.h \
-	include/pmc/pmc_timer.h \
-	$(INC_DIR)/scheduler_private.h \
-	$(INC_DIR)/runcore_api.h
+src/scheduler$(O) : \
+    $(PARROT_H_HEADERS) \
+    src/scheduler.str \
+    src/scheduler.c \
+    include/pmc/pmc_scheduler.h \
+    include/pmc/pmc_task.h \
+    include/pmc/pmc_timer.h \
+    $(INC_DIR)/extend.h \
+    $(INC_DIR)/extend_vtable.h \
+    $(INC_DIR)/scheduler_private.h \
+    $(INC_DIR)/runcore_api.h
 
 src/io/core$(O) : $(PARROT_H_HEADERS) src/io/io_private.h src/io/core.c
 
@@ -934,7 +949,6 @@
 
 O_FILES = \
     $(INTERP_O_FILES) \
-    $(CHARSET_O_FILES) \
     $(IO_O_FILES) \
     $(CLASS_O_FILES) \
     $(ENCODING_O_FILES) \
@@ -1040,8 +1054,13 @@
     src/packdump$(O) @rpath_blib@ $(ALL_PARROT_LIBS) $(LINKFLAGS)
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;1
 
-src/pbc_dump$(O) : $(INC_DIR)/embed.h  $(INC_DIR)/oplib/ops.h \
-	$(PARROT_H_HEADERS) src/pbc_dump.c
+src/pbc_dump$(O) : \
+    $(INC_DIR)/embed.h \
+    $(INC_DIR)/oplib/ops.h \
+    $(INC_DIR)/oplib/core_ops.h \
+    $(PARROT_H_HEADERS) \
+    $(INC_DIR)/runcore_api.h \
+    src/pbc_dump.c
 
 $(INSTALLABLEPDUMP) : src/pbc_dump$(O) src/packdump$(O) \
 	src/install_config$(O) $(LIBPARROT)
@@ -1246,7 +1265,11 @@
 src/extend_vtable$(O) : $(PARROT_H_HEADERS) \
 	$(INC_DIR)/extend.h $(INC_DIR)/extend_vtable.h src/extend_vtable.c
 
-src/global_setup$(O) : $(PARROT_H_HEADERS) src/global_setup.str src/global_setup.c
+src/global_setup$(O) : $(PARROT_H_HEADERS) \
+    src/global_setup.str \
+    src/global_setup.c \
+    $(INC_DIR)/runcore_api.h \
+    $(INC_DIR)/oplib/core_ops.h
 
 src/namespace$(O) : $(PARROT_H_HEADERS) src/namespace.str src/namespace.c \
 	include/pmc/pmc_sub.h
@@ -1278,6 +1301,9 @@
 src/gc/alloc_resources$(O) : $(PARROT_H_HEADERS) \
 	src/gc/gc_private.h src/gc/alloc_resources.c
 
+src/gc/string_gc$(O) : $(PARROT_H_HEADERS) \
+	src/gc/gc_private.h src/gc/string_gc.c
+
 src/hll$(O) : $(PARROT_H_HEADERS) src/hll.str $(INC_DIR)/dynext.h src/hll.c
 
 src/platform$(O) : $(PARROT_H_HEADERS) src/platform.c
@@ -1293,14 +1319,21 @@
 src/debug$(O) : $(INC_DIR)/embed.h $(INC_DIR)/extend.h \
 	$(PARROT_H_HEADERS) src/debug.c \
 	$(INC_DIR)/oplib/ops.h \
+        $(INC_DIR)/oplib/core_ops.h \
 	$(INC_DIR)/runcore_api.h $(INC_DIR)/runcore_trace.h \
 	src/debug.str include/pmc/pmc_key.h \
 	include/pmc/pmc_continuation.h \
 	$(INC_DIR)/extend_vtable.h
 
-src/sub$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/oplib/ops.h \
-	src/sub.str src/sub.c \
-	include/pmc/pmc_sub.h include/pmc/pmc_continuation.h
+src/sub$(O) : \
+    $(PARROT_H_HEADERS) \
+    $(INC_DIR)/oplib/ops.h \
+    $(INC_DIR)/oplib/core_ops.h \
+    $(INC_DIR)/runcore_api.h \
+    src/sub.str \
+    src/sub.c \
+    include/pmc/pmc_sub.h \
+    include/pmc/pmc_continuation.h
 
 src/string/api$(O) : $(PARROT_H_HEADERS) src/string/api.str \
 	src/string/private_cstring.h src/string/api.c
@@ -1316,10 +1349,15 @@
 	src/exceptions.str src/exceptions.c \
 	include/pmc/pmc_continuation.h
 
-src/thread$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/atomic.h src/thread.c \
-	include/pmc/pmc_sub.h \
-	include/pmc/pmc_parrotinterpreter.h \
-	$(INC_DIR)/runcore_api.h
+src/thread$(O) : \
+    $(PARROT_H_HEADERS) \
+    $(INC_DIR)/atomic.h \
+    $(INC_DIR)/extend.h \
+    $(INC_DIR)/extend_vtable.h \
+    src/thread.c \
+    include/pmc/pmc_sub.h \
+    include/pmc/pmc_parrotinterpreter.h \
+    $(INC_DIR)/runcore_api.h
 
 ## SUFFIX OVERRIDE - dynloaded files need cc_shared
 src/extend$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/extend.h \
@@ -1364,6 +1402,8 @@
 
 src/interp/inter_cb$(O) : $(PARROT_H_HEADERS) \
 	include/pmc/pmc_parrotinterpreter.h \
+        $(INC_DIR)/extend.h \
+        $(INC_DIR)/extend_vtable.h \
 	src/interp/inter_cb.str src/interp/inter_cb.c
 
 src/interp/inter_misc$(O) : $(PARROT_H_HEADERS) \
@@ -1425,26 +1465,41 @@
 	src/main.c
 
 src/multidispatch$(O) : \
-	src/multidispatch.c \
-	src/multidispatch.str \
-	$(INC_DIR)/oplib/ops.h $(PARROT_H_HEADERS) \
-	include/pmc/pmc_nci.h include/pmc/pmc_sub.h
-
-src/packfile$(O) : src/packfile.str \
-	src/packfile.c \
-	include/pmc/pmc_sub.h include/pmc/pmc_key.h \
-	compilers/imcc/imc.h \
-	compilers/imcc/cfg.h \
-	compilers/imcc/debug.h \
-	compilers/imcc/instructions.h \
-	compilers/imcc/sets.h \
-	compilers/imcc/symreg.h \
-	compilers/imcc/unit.h \
-	$(INC_DIR)/oplib/ops.h \
-	$(INC_DIR)/embed.h $(INC_DIR)/extend.h $(INC_DIR)/extend_vtable.h \
-	$(PARROT_H_HEADERS) $(INC_DIR)/runcore_api.h
+    src/multidispatch.c \
+    src/multidispatch.str \
+    $(INC_DIR)/oplib/ops.h \
+    $(PARROT_H_HEADERS) \
+    include/pmc/pmc_nativepccmethod.h \
+    include/pmc/pmc_nci.h \
+    include/pmc/pmc_sub.h
 
-src/packfile/pf_items$(O) : $(PARROT_H_HEADERS) src/packfile/pf_items.c
+src/packfile$(O) : \
+    src/packfile.str \
+    src/packfile.c \
+    include/pmc/pmc_sub.h \
+    include/pmc/pmc_key.h \
+    include/pmc/pmc_parrotlibrary.h \
+    compilers/imcc/imc.h \
+    compilers/imcc/cfg.h \
+    compilers/imcc/debug.h \
+    compilers/imcc/instructions.h \
+    compilers/imcc/sets.h \
+    compilers/imcc/symreg.h \
+    compilers/imcc/unit.h \
+    $(INC_DIR)/oplib/ops.h \
+    $(INC_DIR)/oplib/core_ops.h \
+    $(INC_DIR)/dynext.h \
+    $(INC_DIR)/embed.h \
+    $(INC_DIR)/extend.h \
+    $(INC_DIR)/extend_vtable.h \
+    $(PARROT_H_HEADERS) \
+    $(INC_DIR)/runcore_api.h
+
+src/packfile/pf_items$(O) : \
+    $(PARROT_H_HEADERS) \
+    src/packfile/byteorder.h \
+    src/packfile/pf_items.str \
+    src/packfile/pf_items.c
 
 src/packout$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_key.h src/packout.c
 
@@ -1461,6 +1516,9 @@
 src/embed$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/embed.h \
         src/embed.c src/embed.str \
         $(INC_DIR)/oplib/ops.h $(INC_DIR)/runcore_api.h \
+        $(INC_DIR)/extend.h \
+        $(INC_DIR)/extend_vtable.h \
+        $(INC_DIR)/oplib/core_ops.h \
         compilers/imcc/imc.h \
         compilers/imcc/cfg.h \
         compilers/imcc/debug.h \
@@ -1503,7 +1561,12 @@
 
 src/misc$(O) : $(PARROT_H_HEADERS) src/misc.c
 
-src/utils$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_nci.h src/utils.c
+src/utils$(O) : \
+    $(PARROT_H_HEADERS) \
+    include/pmc/pmc_nci.h \
+    src/utils.c \
+    $(INC_DIR)/extend.h \
+    $(INC_DIR)/extend_vtable.h
 
 ## SUFFIX OVERRIDE
 src/spf_render$(O) : $(PARROT_H_HEADERS) src/spf_render.str src/spf_render.c
@@ -1513,19 +1576,37 @@
 
 src/string/encoding$(O) : $(PARROT_H_HEADERS) src/string/encoding.c
 
-src/string/charset$(O) : $(PARROT_H_HEADERS) src/string/charset.c \
-	src/string/encoding/fixed_8.h \
-	src/string/encoding/utf8.h \
-	src/string/encoding/utf16.h \
-	src/string/encoding/ucs2.h \
-	src/string/encoding/ucs4.h \
-	src/string/charset/ascii.h \
-	src/string/charset/binary.h \
-	src/string/charset/iso-8859-1.h \
-	src/string/charset/unicode.h
-
-src/pbc_merge$(O) : $(INC_DIR)/embed.h src/pbc_merge.c \
-	include/pmc/pmc_sub.h $(INC_DIR)/oplib/ops.h $(PARROT_H_HEADERS)
+src/string/encoding/tables$(O) : $(PARROT_H_HEADERS) \
+    src/string/encoding/tables.h
+src/string/encoding/shared$(O) : $(PARROT_H_HEADERS) \
+    src/string/encoding/shared.h \
+    src/string/encoding/tables.h
+src/string/encoding/ascii$(O) : $(PARROT_H_HEADERS) \
+    src/string/encoding/shared.h \
+    src/string/encoding/tables.h
+src/string/encoding/latin1$(O) : $(PARROT_H_HEADERS) \
+    src/string/encoding/shared.h \
+    src/string/encoding/tables.h
+src/string/encoding/binary$(O) : $(PARROT_H_HEADERS) \
+    src/string/encoding/shared.h
+src/string/encoding/utf8$(O) : $(PARROT_H_HEADERS) \
+    src/string/encoding/shared.h \
+    src/string/unicode.h
+src/string/encoding/utf16$(O) : $(PARROT_H_HEADERS) \
+    src/string/encoding/shared.h
+src/string/encoding/ucs2$(O) : $(PARROT_H_HEADERS) \
+    src/string/encoding/shared.h
+src/string/encoding/ucs4$(O) : $(PARROT_H_HEADERS) \
+    src/string/encoding/shared.h
+
+src/pbc_merge$(O) : \
+    $(INC_DIR)/embed.h \
+    src/pbc_merge.c \
+    include/pmc/pmc_sub.h \
+    $(INC_DIR)/oplib/ops.h \
+    $(INC_DIR)/oplib/core_ops.h \
+    $(INC_DIR)/runcore_api.h \
+    $(PARROT_H_HEADERS)
 
 src/io/filehandle$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_filehandle.h \
     src/io/io_private.h src/io/filehandle.c
@@ -1553,10 +1634,6 @@
 
 @TEMP_pmc_build@
 
- at TEMP_charset_build@
-
- at TEMP_encoding_build@
-
 # $(CONFIGURE_GENERATED_FILES) : Configure.pl
 #	$(PERL) Configure.pl
 
@@ -1671,6 +1748,7 @@
     t/configure/*.t \
     t/steps/*.t
 PBC_TEST_FILES = \
+#IF(has_icu):    t/op/testlib/test_strings.pbc \
     t/pmc/testlib/annotations.pbc \
     t/pmc/testlib/number.pbc
 
@@ -1683,6 +1761,9 @@
 t/pmc/testlib/annotations.pbc: t/pmc/testlib/annotations.pir
 	$(PARROT) -o t/pmc/testlib/annotations.pbc t/pmc/testlib/annotations.pir
 
+t/op/testlib/test_strings.pbc: t/op/testlib/test_strings.pir
+	$(PARROT) -o t/op/testlib/test_strings.pbc t/op/testlib/test_strings.pir
+
 # Common prep for all test targets.
 # We probably need a complete build before running the tests.
 test_prep : all pbctestfiles
@@ -2276,7 +2357,6 @@
     src/pmc \
     src/runcore \
     src/string \
-    src/string/charset \
     src/string/encoding \
     $(BUILD_DIR) \
     $(BUILD_DIR)/t/perl \
@@ -2443,7 +2523,7 @@
 src/nci_test$(O): $(PARROT_H_HEADERS) src/nci_test.c
 	$(CC) $(CFLAGS) @optimize::src/nci_test.c@ @ccwarn::src/nci_test.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/nci_test.c
 
-$(LIBNCI_TEST_SO): src/nci_test$(O) $(LIBPARROT)
+$(LIBNCI_TEST_SO): src/nci_test$(O)
 	$(LD) $(LD_LOAD_FLAGS) @ncilib_link_extra@ $(LDFLAGS) \
     @ld_out@$@ src/nci_test$(O) $(C_LIBS)
 

Modified: branches/html_cleanup/config/init/hints/mswin32.pm
==============================================================================
--- branches/html_cleanup/config/init/hints/mswin32.pm	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/config/init/hints/mswin32.pm	Wed Sep 22 03:35:47 2010	(r49232)
@@ -98,6 +98,7 @@
             libs                => 'kernel32.lib ws2_32.lib msvcrt.lib oldnames.lib ',
             libparrot_static    => 'libparrot' . $conf->data->get('a'),
             libparrot_shared    => "libparrot$share_ext",
+            ar                  => 'lib',
             ar_flags            => '',
             ar_out              => '-out:',
             slash               => '\\',

Deleted: branches/html_cleanup/config/inter/charset.pm
==============================================================================
--- branches/html_cleanup/config/inter/charset.pm	Wed Sep 22 03:35:47 2010	(r49231)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,96 +0,0 @@
-# Copyright (C) 2001-2003, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-config/inter/charset.pm - charset files
-
-=head1 DESCRIPTION
-
-Asks the user to select which charset files to include.
-
-=cut
-
-package inter::charset;
-
-use strict;
-use warnings;
-
-use File::Basename qw/basename/;
-
-use base qw(Parrot::Configure::Step);
-
-use Parrot::Configure::Utils ':inter';
-
-
-sub _init {
-    my $self = shift;
-    my %data;
-    $data{description} = q{Which charset files should be compiled in};
-    $data{result}      = q{};
-    return \%data;
-}
-
-my @charsets_defaults =
-    defined( $ENV{TEST_CHARSET} )
-    ? $ENV{TEST_CHARSET}
-    : sort map { basename($_) } glob "./src/string/charset/*.c";
-
-sub runstep {
-    my ( $self, $conf ) = @_;
-
-    my @charset = @charsets_defaults;
-
-    my $charset_list = join ( ' ', grep { defined $_ } @charset );
-
-    if ( $conf->options->get('ask') ) {
-        print <<"END";
-
-
-The following charsets are available:
-  @charset
-END
-        $charset_list = prompt(
-            'Which charsets would you like?',
-            $charset_list
-        );
-    }
-
-    # names of class files for src/pmc/Makefile
-    ( my $TEMP_charset_o = $charset_list ) =~ s/\.c/\$(O)/g;
-
-    my $TEMP_charset_build = <<"E_NOTE";
-
-# the following part of the Makefile was built by 'config/inter/charset.pm'
-
-E_NOTE
-
-    foreach my $charset ( split( /\s+/, $charset_list ) ) {
-        $charset =~ s/\.c$//;
-        $TEMP_charset_build .= <<END
-src/string/charset/$charset\$(O): src/string/charset/$charset.h src/string/charset/ascii.h src/string/charset/$charset.c src/string/charset/tables.h \$(NONGEN_HEADERS)
-
-
-END
-    }
-
-    # build list of libraries for link line in Makefile
-    $TEMP_charset_o =~ s{^| }{ src/string/charset/}g;
-
-    $conf->data->set(
-        charset            => $charset_list,
-        TEMP_charset_o     => $TEMP_charset_o,
-        TEMP_charset_build => $TEMP_charset_build,
-    );
-
-    return 1;
-}
-
-1;
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Deleted: branches/html_cleanup/config/inter/encoding.pm
==============================================================================
--- branches/html_cleanup/config/inter/encoding.pm	Wed Sep 22 03:35:47 2010	(r49231)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,96 +0,0 @@
-# Copyright (C) 2001-2003, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-config/inter/encoding.pm - encoding files
-
-=head1 DESCRIPTION
-
-Asks the user to select which encoding files to include.
-
-=cut
-
-package inter::encoding;
-
-use strict;
-use warnings;
-
-use base qw(Parrot::Configure::Step);
-
-use File::Basename qw/basename/;
-
-use Parrot::Configure::Utils ':inter';
-
-
-sub _init {
-    my $self = shift;
-    my %data;
-    $data{description} = q{Which encoding files should be compiled in};
-    $data{result}      = q{};
-    return \%data;
-}
-
-my @encodings_defaults =
-    defined( $ENV{TEST_ENCODING} )
-    ? $ENV{TEST_ENCODING}
-    : sort map { basename($_) } glob "./src/string/encoding/*.c";
-
-sub runstep {
-    my ( $self, $conf ) = @_;
-
-    my @encodings = @encodings_defaults;
-
-    my $encoding_list = join( ' ', grep { defined $_ } @encodings );
-
-    if ( $conf->options->get('ask') ) {
-        print <<"END";
-
-
-The following encodings are available:
-  @encodings
-END
-        $encoding_list = prompt(
-            'Which encodings would you like?',
-            $encoding_list
-        );
-    }
-
-    # names of class files for src/pmc/Makefile
-    ( my $TEMP_encoding_o = $encoding_list ) =~ s/\.c/\$(O)/g;
-
-    my $TEMP_encoding_build = <<"E_NOTE";
-
-# the following part of the Makefile was built by 'config/inter/encoding.pm'
-
-E_NOTE
-
-    foreach my $encoding ( split( /\s+/, $encoding_list ) ) {
-        $encoding =~ s/\.c$//;
-        $TEMP_encoding_build .= <<END
-src/string/encoding/$encoding\$(O): src/string/encoding/$encoding.h src/string/encoding/$encoding.c src/string/unicode.h \$(NONGEN_HEADERS)
-
-
-END
-    }
-
-    # build list of libraries for link line in Makefile
-    $TEMP_encoding_o =~ s{^| }{ src/string/encoding/}g;
-
-    $conf->data->set(
-        encoding            => $encoding_list,
-        TEMP_encoding_o     => $TEMP_encoding_o,
-        TEMP_encoding_build => $TEMP_encoding_build,
-    );
-
-    return 1;
-}
-
-1;
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/html_cleanup/config/inter/progs.pm
==============================================================================
--- branches/html_cleanup/config/inter/progs.pm	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/config/inter/progs.pm	Wed Sep 22 03:35:47 2010	(r49232)
@@ -103,13 +103,16 @@
     $conf->debug("\nccflags: $ccflags\n");
 
     $linkflags = $conf->data->get('linkflags');
-    $linkflags =~ s/-libpath:\S+//g;    # TT #854: No idea why.
+    # Remove the path to the Perl library (from Win32 config).
+    # See TT #854.
+    $linkflags =~ s/-libpath:\S+//g;
     $linkflags = integrate( $linkflags, $conf->options->get('linkflags') );
     $linkflags = prompt( "And flags for your linker?", $linkflags ) if $ask;
     $conf->data->set( linkflags => $linkflags );
 
     $ldflags = $conf->data->get('ldflags');
-    $ldflags =~ s/-libpath:\S+//g;      # TT #854: No idea why.
+    # For substitution below, see comment for $linkflags above.
+    $ldflags =~ s/-libpath:\S+//g;
     $ldflags = integrate( $ldflags, $conf->options->get('ldflags') );
     $ldflags = prompt( "And your $ld flags for building shared libraries?", $ldflags )
         if $ask;

Modified: branches/html_cleanup/docs/book/pct/ch04_pge.pod
==============================================================================
--- branches/html_cleanup/docs/book/pct/ch04_pge.pod	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/docs/book/pct/ch04_pge.pod	Wed Sep 22 03:35:47 2010	(r49232)
@@ -30,12 +30,12 @@
   sub <function_name> { <function_body> }
 
 A grammar is a collection of rules like the ones above that specify all the
-acceptable patterns in a language. Grammars group together these rules in
-much the same way that a groups together related data fields and methods
-N<In languages like Perl 6 for instance, a grammar is just a special kind
-of class and a rule is just a special kind of method.>. Each rule defines
-a pattern for matching one unit of text, and can be made up of various other
-rules which are called recursively to make a complete match.
+acceptable patterns in a language. Grammars group together these rules in much
+the same way that a class groups together related data fields and methods N<In
+languages like Perl 6 for instance, a grammar is just a special kind of class
+and a rule is just a special kind of method.>. Each rule defines a pattern for
+matching one unit of text, and can be made up of various other rules which are
+called recursively to make a complete match.
 
 A rule can contain regular expressions to match patterns of characters:
 

Modified: branches/html_cleanup/docs/book/pir/ch04_variables.pod
==============================================================================
--- branches/html_cleanup/docs/book/pir/ch04_variables.pod	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/docs/book/pir/ch04_variables.pod	Wed Sep 22 03:35:47 2010	(r49232)
@@ -966,17 +966,17 @@
 ways to represent various charsets in memory and on disk.
 
 Every string in Parrot has an associated encoding and character set. The default
-charset is 8-bit ASCII, which is almost universally supported.  Double-quoted
-string constants can have an optional prefix specifying the string's encoding
-and charset.N<As you might suspect, single-quoted strings do not support this.>
+format is 8-bit ASCII, which is almost universally supported.  Double-quoted
+string constants can have an optional prefix specifying the string's
+format.N<As you might suspect, single-quoted strings do not support this.>
 Parrot tracks information about encoding and charset internally, and
 automatically converts strings when necessary to preserve these
-characteristics. Strings constants may have prefixes of the form C<encoding:charset:>.
+characteristics. Strings constants may have prefixes of the form C<format:>.
 
 =begin PIR_FRAGMENT
 
-  $S0 = utf8:unicode:"Hello UTF-8 Unicode World!"
-  $S1 = utf16:unicode:"Hello UTF-16 Unicode World!"
+  $S0 = utf8:"Hello UTF-8 Unicode World!"
+  $S1 = utf16:"Hello UTF-16 Unicode World!"
   $S2 = ascii:"This is 8-bit ASCII"
   $S3 = binary:"This is raw, unformatted binary data"
 
@@ -987,11 +987,10 @@
 X<UCS-2 encoding>
 X<UTF-8 encoding>
 X<UTF-16 encoding>
-Parrot supports the character sets C<ascii>, C<binary>, C<iso-8859-1>
-(Latin 1), and C<unicode> and the encodings C<fixed_8>, C<ucs2>,
-C<utf8>, and C<utf16>.
+Parrot supports the formats C<ascii>, C<binary>, C<iso-8859-1>
+(Latin 1), C<utf8>, C<utf16>, C<ucs2>, and C<ucs4>.
 
-The C<binary> charset treats the string as a buffer of raw unformatted
+The C<binary> format treats the string as a buffer of raw unformatted
 binary data. It isn't really a string per se, because binary data
 contains no readable characters. This exists to support libraries which
 manipulate binary data that doesn't easily fit into any other primitive

Modified: branches/html_cleanup/docs/embed.pod
==============================================================================
--- branches/html_cleanup/docs/embed.pod	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/docs/embed.pod	Wed Sep 22 03:35:47 2010	(r49232)
@@ -559,18 +559,6 @@
 
 =item C<Parrot_char_digit_value>
 
-=item C<Parrot_charset_c_name>
-
-=item C<Parrot_charset_name>
-
-=item C<Parrot_charset_number>
-
-=item C<Parrot_charset_number_of_str>
-
-=item C<Parrot_charsets_encodings_deinit>
-
-=item C<Parrot_charsets_encodings_init>
-
 =item C<Parrot_clear_debug>
 
 =item C<Parrot_clear_flag>
@@ -643,8 +631,6 @@
 
 =item C<Parrot_cx_send_message>
 
-=item C<Parrot_default_charset>
-
 =item C<Parrot_default_encoding>
 
 =item C<Parrot_del_timer_event>
@@ -691,14 +677,8 @@
 
 =item C<Parrot_ex_throw_from_op_args>
 
-=item C<Parrot_find_charset>
-
-=item C<Parrot_find_charset_converter>
-
 =item C<Parrot_find_encoding>
 
-=item C<Parrot_find_encoding_converter>
-
 =item C<Parrot_ns_find_current_namespace_global>
 
 =item C<Parrot_find_global_k>
@@ -737,8 +717,6 @@
 
 =item C<Parrot_gc_mark_PObj_alive>
 
-=item C<Parrot_get_charset>
-
 =item C<Parrot_get_ctx_HLL_namespace>
 
 =item C<Parrot_get_ctx_HLL_type>
@@ -775,8 +753,6 @@
 
 =item C<Parrot_get_runtime_path>
 
-=item C<Parrot_get_runtime_prefix>
-
 =item C<Parrot_get_strreg>
 
 =item C<Parrot_get_vtable>
@@ -919,8 +895,6 @@
 
 =item C<Parrot_load_bytecode>
 
-=item C<Parrot_load_charset>
-
 =item C<Parrot_load_encoding>
 
 =item C<Parrot_load_language>
@@ -933,8 +907,6 @@
 
 =item C<Parrot_make_cb>
 
-=item C<Parrot_make_default_charset>
-
 =item C<Parrot_make_default_encoding>
 
 =item C<Parrot_ns_make_namespace_autobase>
@@ -957,8 +929,6 @@
 
 =item C<Parrot_new_cb_event>
 
-=item C<Parrot_new_charset>
-
 =item C<Parrot_new_encoding>
 
 =item C<Parrot_new_string>
@@ -1171,8 +1141,6 @@
 
 =item C<Parrot_PMC_i_floor_divide_int>
 
-=item C<Parrot_PMC_i_logical_not>
-
 =item C<Parrot_PMC_i_modulus>
 
 =item C<Parrot_PMC_i_modulus_float>
@@ -1229,14 +1197,6 @@
 
 =item C<Parrot_PMC_i_subtract_int>
 
-=item C<Parrot_PMC_logical_and>
-
-=item C<Parrot_PMC_logical_not>
-
-=item C<Parrot_PMC_logical_or>
-
-=item C<Parrot_PMC_logical_xor>
-
 =item C<Parrot_PMC_mark>
 
 =item C<Parrot_PMC_modulus>
@@ -1447,10 +1407,6 @@
 
 =item C<Parrot_regenerate_HLL_namespaces>
 
-=item C<Parrot_register_charset>
-
-=item C<Parrot_register_charset_converter>
-
 =item C<Parrot_register_encoding>
 
 =item C<Parrot_register_HLL>
@@ -1523,14 +1479,10 @@
 
 =item C<Parrot_str_byte_length>
 
-=item C<Parrot_str_change_charset>
-
 =item C<Parrot_str_change_encoding>
 
 =item C<Parrot_str_chopn>
 
-=item C<Parrot_str_chopn_inplace>
-
 =item C<Parrot_str_compare>
 
 =item C<Parrot_str_compose>
@@ -1541,8 +1493,6 @@
 
 =item C<Parrot_str_downcase>
 
-=item C<Parrot_str_downcase_inplace>
-
 =item C<Parrot_str_equal>
 
 =item C<Parrot_str_escape>
@@ -1581,8 +1531,6 @@
 
 =item C<Parrot_str_new_constant>
 
-=item C<Parrot_str_new_COW>
-
 =item C<Parrot_str_new_init>
 
 =item C<Parrot_str_new_noinit>
@@ -1595,20 +1543,12 @@
 
 =item C<Parrot_str_replace>
 
-=item C<Parrot_str_resize>
-
-=item C<Parrot_str_reuse_COW>
-
-=item C<Parrot_str_set>
-
 =item C<Parrot_str_split>
 
 =item C<Parrot_str_substr>
 
 =item C<Parrot_str_titlecase>
 
-=item C<Parrot_str_titlecase_inplace>
-
 =item C<Parrot_str_to_cstring>
 
 =item C<Parrot_str_to_hashval>
@@ -1623,10 +1563,6 @@
 
 =item C<Parrot_str_upcase>
 
-=item C<Parrot_str_upcase_inplace>
-
-=item C<Parrot_str_write_COW>
-
 =item C<Parrot_sub_new_from_c_func>
 
 =item C<Parrot_test_debug>
@@ -1667,20 +1603,14 @@
 
 =item C<PObj_custom_mark_SET>
 
-=item C<string_capacity>
-
 =item C<string_chr>
 
 =item C<string_make>
 
-=item C<string_make_from_charset>
-
 =item C<string_max_bytes>
 
 =item C<string_ord>
 
-=item C<string_primary_encoding_for_representation>
-
 =item C<string_rep_compatible>
 
 =item C<string_to_cstring_nullable>

Modified: branches/html_cleanup/docs/parrothist.pod
==============================================================================
--- branches/html_cleanup/docs/parrothist.pod	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/docs/parrothist.pod	Wed Sep 22 03:35:47 2010	(r49232)
@@ -113,5 +113,6 @@
 
  coke        2.6.0 *        2010-Jul-20     "Red-rumped"
  mikehh      2.7.0          2010-Aug-17     "Australian King"
+ Gerd        2.8.0          2010-Sep-21     "Tui Parakeet"
 
 =cut

Modified: branches/html_cleanup/docs/pdds/pdd17_pmc.pod
==============================================================================
--- branches/html_cleanup/docs/pdds/pdd17_pmc.pod	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/docs/pdds/pdd17_pmc.pod	Wed Sep 22 03:35:47 2010	(r49232)
@@ -1327,40 +1327,6 @@
 greater). The C<_num> version performs a numeric comparison, while the
 C<_string> version performs a string comparison.
 
-=item logical_or
-
-  PMC* logical_or(INTERP, PMC *self, PMC *value, PMC *dest)
-
-Performs a logical OR, returning I<self> if it is true, and I<value>
-otherwise.
-
-=item logical_and
-
-  PMC* logical_and(INTERP, PMC *self, PMC *value, PMC *dest)
-
-Performs a logical AND, returning a true value if both I<self> and
-I<value> are true, and a false value otherwise. (Currently implemented
-as: If I<self> is false, return it, since the entire expression is
-false. If I<self> is true, return value, since the truth or falsehood of
-I<value> will determine the truth or falsehood of the whole expression.)
-
-=item logical_xor
-
-  PMC* logical_xor(INTERP, PMC *self, PMC *value, PMC *dest)
-
-Performs a logical XOR, returning I<self> if it is true and I<value> is
-false, returning I<value> if it is true and I<self> is false, and
-returning a false value (PMC of the same type as I<self>, with the
-boolean value 0) if both are true or neither are true.
-
-=item logical_not
-
-  PMC* logical_not(INTERP, PMC *self, PMC *dest)
-  void i_logical_not(INTERP, PMC *self)
-
-Returns the logical negation of I<self>. The C<i_> variant performs an
-inplace negation, modifying the value of I<self>.
-
 =back
 
 =head4 String Vtable Functions

Modified: branches/html_cleanup/docs/pdds/pdd19_pir.pod
==============================================================================
--- branches/html_cleanup/docs/pdds/pdd19_pir.pod	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/docs/pdds/pdd19_pir.pod	Wed Sep 22 03:35:47 2010	(r49232)
@@ -134,9 +134,9 @@
 =item "double-quoted string constants"
 
 Are delimited by double-quotes (C<">). A C<"> inside a string must be escaped
-by C<\>. The default encoding for a double-quoted string constant is 7-bit
+by C<\>. The default format for a double-quoted string constant is 7-bit
 ASCII, other character sets and encodings must be marked explicitly using a
-charset or encoding flag.
+format flag.
 
 =item <<"heredoc",  <<'heredoc'
 
@@ -190,11 +190,18 @@
 
 =end PIR_FRAGMENT_TODO
 
-=item charset:"string constant"
+=item format:"string constant"
 
-Like above with a character set attached to the string. Valid character
-sets are currently: C<ascii> (the default), C<binary>, C<unicode>
-(with UTF-8 as the default encoding), and C<iso-8859-1>.
+Like above with a format attached to the string. Valid formats are
+currently: C<ascii> (the default), C<binary>, C<iso-8859-1>, C<utf8>,
+C<utf16>, C<ucs2>, and C<ucs4>.
+
+The format is attached to the string constant, and
+adopted by any string container the constant is assigned to.
+
+The standard escape sequences are honored within strings with an
+alternate format, so you can include a particular Unicode character
+as either a literal sequence of bytes, or as an escape sequence.
 
 =back
 
@@ -212,20 +219,6 @@
 
 =over 4
 
-=item encoding:charset:"string constant"
-
-Like above with an extra encoding attached to the string. For example:
-
-  set S0, utf8:unicode:"«"
-
-The encoding and charset are attached to the string constant, and
-adopted by any string container the constant is assigned to.
-
-The standard escape sequences are honored within strings with an
-alternate encoding, so in the example above, you can include a
-particular Unicode character as either a literal sequence of bytes, or
-as an escape sequence.
-
 =item numeric constants
 
 Both integers (C<42>) and numbers (C<3.14159>) may appear as constants.

Modified: branches/html_cleanup/docs/pdds/pdd23_exceptions.pod
==============================================================================
--- branches/html_cleanup/docs/pdds/pdd23_exceptions.pod	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/docs/pdds/pdd23_exceptions.pod	Wed Sep 22 03:35:47 2010	(r49232)
@@ -310,16 +310,6 @@
 argument or a string index that's outside the length of the string.  Payload
 is an array, first element being the string 'ord'.
 
-The C<find_charset> opcode throws C<exception;domain> if the charset name it's
-looking up doesn't exist.  Payload is an array: [0] string 'find_charset', [1]
-charset name that was not found.
-
-The C<trans_charset> opcode throws C<exception;domain> on "information loss"
-(presumably, this means when one charset doesn't have a one-to-one
-correspondence in the other charset).  Payload is an array: [0] string
-'trans_charset', [1] source charset name, [2] destination charset name, [3]
-untranslatable code point.
-
 The C<find_encoding> opcode throws C<exception;domain> if the encoding name
 it's looking up doesn't exist.  Payload is an array: [0] string
 'find_encoding', [1] encoding name that was not found.

Modified: branches/html_cleanup/docs/pdds/pdd28_strings.pod
==============================================================================
--- branches/html_cleanup/docs/pdds/pdd28_strings.pod	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/docs/pdds/pdd28_strings.pod	Wed Sep 22 03:35:47 2010	(r49232)
@@ -266,7 +266,6 @@
 	UINTVAL     strlen;
 	UINTVAL     hashval;
 	const struct _encoding *encoding;
-	const struct _charset  *charset;
 };
 
 The fields are:
@@ -302,23 +301,14 @@
 
 =item encoding
 
-How the data is encoded (e.g. fixed 8-bit characters, UTF-8, or UTF-32).  Note
-that this specifies encoding only -- it's valid to encode  EBCDIC characters
-with the UTF-8 algorithm. Silly, but valid.
+What sort of string data is in the buffer, for example ASCII, ISO-8859-1,
+UTF-8 or UTF-16.
 
 The encoding structure specifies the encoding (by index number and by name,
 for ease of lookup), the maximum number of bytes that a single character will
 occupy in that encoding, as well as functions for manipulating strings with
 that encoding.
 
-=item charset
-
-What sort of string data is in the buffer, for example ASCII, EBCDIC, or
-Unicode.
-
-The charset structure specifies the character set (by index number and by
-name) and provides functions for transcoding to and from that character set.
-
 =back
 
 {{DEPRECATION NOTE: the enum C<parrot_string_representation_t> will be removed
@@ -352,32 +342,9 @@
 Parrot's external API will be renamed for the standard "Parrot_*" naming
 conventions.
 
-=head4 Parrot_str_set (was string_set)
-
-Set one string to a copy of the value of another string.
-
-=head4 Parrot_str_new_COW (was Parrot_make_COW_reference)
-
-Create a new copy-on-write string. Creating a new string header, clone the
-struct members of the original string, and point to the same string buffer as
-the original string.
-
-=head4 Parrot_str_reuse_COW (was Parrot_reuse_COW_reference)
-
-Create a new copy-on-write string. Clone the struct members of the original
-string into a passed in string header, and point the reused string header to
-the same string buffer as the original string.
-
-=head4 Parrot_str_write_COW (was Parrot_unmake_COW)
-
-If the specified Parrot string is copy-on-write, copy the string's contents
-to a new string buffer and clear the copy-on-write flag.
-
 =head4 Parrot_str_concat (was string_concat)
 
-Concatenate two strings. Takes three arguments: two strings, and one integer
-value of flags. If both string arguments are null, return a new string created
-according to the integer flags.
+Concatenate two strings. Takes two strings as arguments.
 
 =head4 Parrot_str_new (was string_from_cstring)
 
@@ -397,11 +364,10 @@
 
 Returns a new string of the requested encoding, character set, and
 normalization form, initializing the string value to the value passed in.  The
-five arguments are a C string (C<char *>), an integer length of the string
-argument in bytes, and struct pointers for encoding, character set, and
-normalization form structs. If the C string (C<char *>) value is not passed,
-returns an empty string. If the encoding, character set, or normalization form
-are passed as null values, default values are used.
+three arguments are a C string (C<char *>), an integer length of the string
+argument in bytes, and a struct pointer for the encoding struct. If the C
+string (C<char *>) value is not passed, returns an empty string. If the
+encoding is passed as null value, a default value is used.
 
 {{ NOTE: the crippled version of this function, C<string_make>, used to accept
 a string name for the character set. This behavior is no longer supported, but
@@ -414,13 +380,6 @@
 *>) as an argument, the value of the constant string. The length of the C
 string is calculated internally.
 
-=head4 Parrot_str_resize (was string_grow)
-
-Resize the string buffer of the given string adding the number of bytes passed
-in the integer argument. If the argument is negative, remove the given number
-of bytes. Throws an exception if shrinking the string buffer size will
-truncate the string (if C<strlen> will be longer than C<buflen>).
-
 =head4 Parrot_str_length (was string_compute_strlen)
 
 Returns the number of characters in the string. Combining characters are each
@@ -505,11 +464,6 @@
 Chop the requested number of characters off the end of a string without
 modifying the original string.
 
-=head4 Parrot_str_chopn_inplace (was string_chopn_inplace).
-
-Chop the requested number of characters off the end of a string, modifying the
-original string.
-
 =head4 Parrot_str_grapheme_chopn
 
 Chop the requested number of graphemes off the end of a string without
@@ -545,6 +499,10 @@
 Compare two strings using NFG normalization, return 1 if they are equal, 0 if
 they are not equal.
 
+=head4 Parrot_str_split
+
+Splits the string C<str> at the delimiter C<delim>.
+
 =head3 Internal String Functions
 
 The following functions are used internally and are not part of the public
@@ -560,6 +518,10 @@
 Terminate and clean up Parrot's string subsystem, including string allocation
 and garbage collection.
 
+=head3 Deprecated String Functions
+
+The following string functions are slated to be deprecated.
+
 =head4 string_max_bytes
 
 Calculate the number of bytes needed to hold a given number of characters in a
@@ -568,10 +530,6 @@
 
 {{NOTE: pretty primitive and not very useful. May be deprecated.}}
 
-=head3 Deprecated String Functions
-
-The following string functions are slated to be deprecated.
-
 =head4 string_primary_encoding_for_representation
 
 Not useful, it only ever returned ASCII.
@@ -618,10 +576,6 @@
 
 Unsafe, and behavior handled by Parrot_str_to_cstring.
 
-=head4 Parrot_str_split
-
-Splits the string C<str> at the delimiter C<delim>.
-
 =head4 Parrot_str_free (was string_free)
 
 Unsafe and unuseful, let the garbage collector take care.

Modified: branches/html_cleanup/docs/pmc/subs.pod
==============================================================================
--- branches/html_cleanup/docs/pmc/subs.pod	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/docs/pmc/subs.pod	Wed Sep 22 03:35:47 2010	(r49232)
@@ -27,7 +27,6 @@
     Coroutine
     Eval
   Continuation
-    RetContinuation
     ExceptionHandler
 
 By "invokable" we mean that they can be supplied as the first argument to the

Modified: branches/html_cleanup/docs/project/release_manager_guide.pod
==============================================================================
--- branches/html_cleanup/docs/project/release_manager_guide.pod	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/docs/project/release_manager_guide.pod	Wed Sep 22 03:35:47 2010	(r49232)
@@ -118,9 +118,10 @@
 
 =item f
 
-Run C<./ops2c --core> (or C<make bootstrap-ops>, ignoring errors) followed by
-C<make reconfig> and C<make> to update the names of version-specific internal
-functions.
+To have parrot configured and have run C<make> with the old version number is
+condition for this step. Run C<./ops2c --core> (or C<make bootstrap-ops>,
+ignoring errors) followed by C<make reconfig> and C<make> to update the names
+of version-specific internal functions.
 
 =item g
 
@@ -406,11 +407,16 @@
 visible at
 L<http://www.google.com/calendar/render?cid=ldhctdamsgfg5a1cord52po9h8@group.calendar.google.com>.
 
- - Sep 21, 2010 - 2.8   - gerd
  - Oct 19, 2010 - 2.9*  - gerd
- - Nov 16, 2010 - 2.10  - ??
- - Dec 21, 2010 - 2.11  - ??
- - Jan 18, 2010 - 3.0*  - ??
+ - Nov 16, 2010 - 2.10  - tcurtis
+ - Dec 21, 2010 - 2.11  - whiteknight
+ - Jan 18, 2011 - 3.0*  - cotto
+ - Feb 15, 2011 - 3.1   - mikehh
+ - Mar 15, 2011 - 3.2   - ??
+ - Apr 19, 2011 - 3.3*  - ??
+ - May 17, 2011 - 3.4   - ??
+ - Jun 21, 2011 - 3.5   - ??
+ - Jul 19, 2011 - 3.6*  - kid51
 
 =cut
 

Modified: branches/html_cleanup/docs/tests.pod
==============================================================================
--- branches/html_cleanup/docs/tests.pod	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/docs/tests.pod	Wed Sep 22 03:35:47 2010	(r49232)
@@ -24,7 +24,7 @@
 =head2 Submitting smolder test results
 
 Parrot has a status page with smoke test results at
-L<http://smolder.plusthree.com/app/public_projects/details/8>.
+L<http://smolder.parrot.org/app/projects/smoke_reports/1>.
 
 You can supply new tests results by just running C<make smoke>.  It will run the
 same tests as C<make test> would, but will upload the test results to the

Modified: branches/html_cleanup/docs/vtables.pod
==============================================================================
--- branches/html_cleanup/docs/vtables.pod	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/docs/vtables.pod	Wed Sep 22 03:35:47 2010	(r49232)
@@ -280,17 +280,6 @@
 result in C<dest>. (Probably by calling its C<set_string> method) This is a
 string multimethod.
 
-=item C<logical_or>
-
-=item C<logical_and>
-
-Perform the given short-circuiting logical operations between your boolean
-value and the value passed in, storing the result in C<dest>.
-
-=item C<logical_not>
-
-Set yourself to be a logical negation of the value passed in.
-
 =item C<repeat>
 
 Repeat your string representation C<value> times and store the result in

Modified: branches/html_cleanup/editor/pir-mode.el
==============================================================================
--- branches/html_cleanup/editor/pir-mode.el	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/editor/pir-mode.el	Wed Sep 22 03:35:47 2010	(r49232)
@@ -155,7 +155,7 @@
     "ParrotIO" "ParrotInterpreter" "ParrotLibrary" "ParrotObject"
     "ParrotThread" "Pointer"
     "ResizableBooleanArray" "ResizableFloatArray" "ResizableIntegerArray"
-    "ResizablePMCArray" "ResizableStringArray" "RetContinuation"
+    "ResizablePMCArray" "ResizableStringArray"
     "Role" "Scalar" "String" "Sub" "Super"
     "Timer" "UnManagedStruct" "Undef" "VtableCache"))
 

Copied: branches/html_cleanup/examples/benchmarks/boolean.pir (from r49200, trunk/examples/benchmarks/boolean.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/html_cleanup/examples/benchmarks/boolean.pir	Wed Sep 22 03:35:47 2010	(r49232, copy of r49200, trunk/examples/benchmarks/boolean.pir)
@@ -0,0 +1,63 @@
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+examples/benchmarks/boolean.pir: Manipulate the Boolean PMC
+
+=head1 SYNOPSIS
+
+parrot examples/benchmarks/boolean.pir
+
+=head1 DESCRIPTION
+
+This benchmark operates on the Boolean PMC, allocating new ones, setting them,
+and performing logical operations on them.
+
+=cut
+
+.const num iterations = 10e6                    # Number of iterations.
+
+.sub main :main
+
+  .local num start_time, end_time
+  .local int counter
+  .local pmc a, b, c, result
+
+  print "Perform "
+  print iterations
+  say " iterations of various Boolean operations"
+
+  a = new 'Boolean', 1
+  start_time = time
+
+  counter = iterations
+LOOP:
+  b = new 'Boolean'
+  b = 1
+  c = new 'Boolean', b
+  result = not a
+  result = and result, b
+  result = or result, c
+  not result
+  if result goto TRUE
+  a = 0
+  goto NEXT
+TRUE:
+  a = 1
+NEXT:
+  dec counter
+  if counter > 0 goto LOOP
+
+  end_time = time
+  end_time = end_time - start_time
+  end_time = end_time / iterations
+  print "Elapsed time per iteration: "
+  say end_time
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/html_cleanup/examples/compilers/japhc.c
==============================================================================
--- branches/html_cleanup/examples/compilers/japhc.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/examples/compilers/japhc.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -147,8 +147,8 @@
     /* Allocate a new constant */
     consts->constants[--k] = PackFile_Constant_new(interp);
     consts->constants[k]->type = PFC_STRING;
-    consts->constants[k]->u.string =
-        string_make(interp, buf, (UINTVAL) l, "iso-8859-1", 0);
+    consts->constants[k]->u.string = Parrot_str_new_init(interp, buf,
+            (UINTVAL) l, Parrot_latin1_encoding_ptr, 0);
     free(o);
     return k;
 }

Modified: branches/html_cleanup/examples/config/file/configcompiler
==============================================================================
--- branches/html_cleanup/examples/config/file/configcompiler	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/examples/config/file/configcompiler	Wed Sep 22 03:35:47 2010	(r49232)
@@ -34,8 +34,6 @@
 init::optimize
 inter::shlibs
 inter::libparrot
-inter::charset
-inter::encoding
 inter::types
 auto::ops
 auto::pmc

Modified: branches/html_cleanup/examples/config/file/configwithfatalstep
==============================================================================
--- branches/html_cleanup/examples/config/file/configwithfatalstep	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/examples/config/file/configwithfatalstep	Wed Sep 22 03:35:47 2010	(r49232)
@@ -26,8 +26,6 @@
 init::optimize
 inter::shlibs
 inter::libparrot
-inter::charset
-inter::encoding
 inter::types
 auto::ops
 auto::pmc

Modified: branches/html_cleanup/examples/io/httpd.pir
==============================================================================
--- branches/html_cleanup/examples/io/httpd.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/examples/io/httpd.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -142,11 +142,11 @@
     req = ""
 MORE:
     buf = work.'recv'()
-    # charset I0, buf
-    # charsetname S1, I0
+    # encoding I0, buf
+    # encodingname S1, I0
     # print "\nret: "
     # print ret
-    # print "\ncharset of buf: "
+    # print "\nencoding of buf: "
     # print S1
     # print "\nbuf:"
     # print buf

Modified: branches/html_cleanup/examples/io/post.pir
==============================================================================
--- branches/html_cleanup/examples/io/post.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/examples/io/post.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -22,7 +22,7 @@
     push contents, 'username'
     push contents, 'parrot-autobot'
     push contents, 'password'
-    push contents, 'squ at wk'
+    push contents, 'qa_rocks'
     push contents, 'comments'
     push contents, "EXPERIMENTAL LWP.pir"
     push contents, 'report_file'
@@ -31,7 +31,7 @@
     $P0[0] = 'parrot_test_run.tar.gz'
     push contents, $P0
     load_bytecode 'LWP/UserAgent.pir'
-    .const string url = 'http://smolder.plusthree.com/app/projects/process_add_report/8'
+    .const string url = 'http://smolder.parrot.org/app/projects/process_add_report/1'
     .local pmc ua, response
     ua = new ['LWP';'UserAgent']
     ua.'env_proxy'()

Modified: branches/html_cleanup/examples/json/postalcodes.pir
==============================================================================
--- branches/html_cleanup/examples/json/postalcodes.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/examples/json/postalcodes.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -64,8 +64,8 @@
 END:
     close sock
 
-    $I1 = find_charset 'unicode'
-    json_result = trans_charset json_result, $I1
+    $I1 = find_encoding 'utf8'
+    json_result = trans_encoding json_result, $I1
 
     # Strip off http headers.
     $I0 = index json_result, "\r\n\r\n"

Modified: branches/html_cleanup/examples/namespace/namespace_dump.pir
==============================================================================
--- branches/html_cleanup/examples/namespace/namespace_dump.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/examples/namespace/namespace_dump.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -1,12 +1,13 @@
 # Copyright (C) 2006-2009, Parrot Foundation.
 # $Id$
 
+.include "interpinfo.pasm"
+.include "iterator.pasm"
+
 #
 # dump all namespaces and the contents recursively
 #
 .sub main :main
-    .include "interpinfo.pasm"
-    .include "iterator.pasm"
     .local pmc ns
     ns = get_root_namespace
     dump(ns, 0)
@@ -14,55 +15,82 @@
 
 # dump one namespace
 .sub dump
-    .param pmc ns
-    .param int lev
-    .local pmc it
-    .local string spac
+    .param pmc    ns
+    .param int    lev
+    .local pmc    it
+    .local string indent
+
+    $I0 = lev * 4
+    indent = repeat " ", $I0
 
     it = iter ns
     it = .ITERATE_FROM_START
-    $I2 = lev * 4
-    spac = repeat " ", $I2
-lp:
-    unless it goto ex
-    $S0 = shift it
-    $P0 = it[$S0]
-    # there might be a smy with the same name as a namespace
-    $P1 = ns.'get_sym'($S0)
-    if null $P1 goto no_sym
-    eq_addr $P0, $P1, no_sym
-    print spac
-    print $S0
-    print " => "
-    print $P1
-    print "\n"
-no_sym:
-    $I0 = isa $P0, 'NCI'
-    unless $I0 goto no_nci
-    $P0 = new 'String'
-    $P0 = "NCI"
-no_nci:
-    print spac
-    print $S0
+
+loop:
+    unless it goto return
+
+    .local string name
+    .local pmc    entry, sym_entry
+    name      = shift it
+    entry     = it[name]
+    # there might be a sym with the same name as a namespace
+    sym_entry = ns.'get_sym'(name)
+
+    if_null sym_entry,        done_sym
+    eq_addr sym_entry, entry, done_sym
+    dump_simple(name, sym_entry, indent)
+done_sym:
+
+    $I0 = isa entry, 'MultiSub'
+    if $I0 goto handle_multi
+
+    $I0 = isa entry, 'NameSpace'
+    if $I0 goto handle_ns
+
+    dump_simple(name, entry, indent)
+    goto loop
+
+handle_multi:
+    print indent
+    print name
     print " => "
-    $I0 = isa $P0, 'MultiSub'
-    unless $I0 goto no_multi
-    $I1 = lev + 1
+    $I0 = lev + 1
     print " Multi [\n"
-    dump_multi($P0, $I1)
-    print spac
+    dump_multi(entry, $I0)
+    print indent
     print "]\n"
-    goto lp
-no_multi:
-    print $P0
+    goto loop
+
+handle_ns:
+    dump_simple(name, entry, indent)
+    $I0 = lev + 1
+    dump(entry, $I0)
+    goto loop
+
+return:
+.end
+
+.sub dump_simple
+    .param string name
+    .param pmc    x
+    .param string indent
+    print indent
+    print name
+    print " => "
+
+    .local string val_str
+    push_eh no_get_string
+    val_str = x
+
+got_val_str:
+    pop_eh
+    print val_str
     print "\n"
-    $I0 = isa $P0, 'NameSpace'
-    unless $I0 goto no_ns
-    $I1 = lev + 1
-    dump($P0, $I1)
-no_ns:
-    goto lp
-ex:
+    .return ()
+
+no_get_string:
+    val_str = typeof x
+    goto got_val_str
 .end
 
 # dump the types of a MultiSub

Modified: branches/html_cleanup/ext/nqp-rx/src/stage0/HLL-s0.pir
==============================================================================
--- branches/html_cleanup/ext/nqp-rx/src/stage0/HLL-s0.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/ext/nqp-rx/src/stage0/HLL-s0.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -18,6 +18,7 @@
 ### .include 'src/cheats/hll-compiler.pir'
 # we have to overload PCT::HLLCompiler's parse method to support P6Regex grammars
 
+.include 'cclass.pasm'
 
 .namespace ['HLL';'Compiler']
 
@@ -123,6 +124,80 @@
 .end
 
 
+# Temporarily backport PCT::HLLCompiler's 'lineof' method
+# from Parrot r48866 into HLL::Compiler, so that nqp-rx can
+# continue to build from an older Parrot until parrot's trunk
+# is working again.  When we're able to bump PARROT_REVISION,
+# this code can go away to fall back to Parrot's version (DRY).
+
+=over 4
+
+=item lineof(target, pos [, cache :named('cache')])
+
+Return the line number of offset C<pos> within C<target>.  The return
+value uses zero for the first line.  If C<cache> is true, then
+memoize the line offsets as a C<!lineof> property on C<target>.
+
+=back
+
+=cut
+
+.sub 'lineof' :method
+    .param pmc target
+    .param int pos
+    .param int cache           :optional :named('cache')
+    .local pmc linepos
+
+    # If we've previously cached C<linepos> for target, we use it.
+    unless cache goto linepos_build
+    linepos = getprop '!linepos', target
+    unless null linepos goto linepos_done
+
+    # calculate a new linepos array.
+  linepos_build:
+    linepos = new ['ResizableIntegerArray']
+    unless cache goto linepos_build_1
+    setprop target, '!linepos', linepos
+  linepos_build_1:
+    .local string s
+    .local int jpos, eos
+    s = target
+    eos = length s
+    jpos = 0
+    # Search for all of the newline markers in C<target>.  When we
+    # find one, mark the ending offset of the line in C<linepos>.
+  linepos_loop:
+    jpos = find_cclass .CCLASS_NEWLINE, s, jpos, eos
+    unless jpos < eos goto linepos_done
+    $I0 = ord s, jpos
+    inc jpos
+    push linepos, jpos
+    # Treat \r\n as a single logical newline.
+    if $I0 != 13 goto linepos_loop
+    $I0 = ord s, jpos
+    if $I0 != 10 goto linepos_loop
+    inc jpos
+    goto linepos_loop
+  linepos_done:
+
+    # We have C<linepos>, so now we search the array for the largest
+    # element that is not greater than C<pos>.  The index of that
+    # element is the line number to be returned.
+    # (Potential optimization: use a binary search.)
+    .local int line, count
+    count = elements linepos
+    line = 0
+  line_loop:
+    if line >= count goto line_done
+    $I0 = linepos[line]
+    if $I0 > pos goto line_done
+    inc line
+    goto line_loop
+  line_done:
+    .return (line)
+.end
+
+
 # This sub serves as a cumulative "outer context" for code
 # executed in HLL::Compiler's interactive REPL.  It's invoked
 # exactly once upon load/init to obtain a context, and its
@@ -354,7 +429,8 @@
     pos = self.'pos'()
     target = getattribute self, '$!target'
 
-    $I1 = target.'lineof'(pos)
+    $P0 = get_hll_global ['HLL'], 'Compiler'
+    $I1 = $P0.'lineof'(target, pos)
     inc $I1
     push args, ' at line '
     push args, $I1
@@ -693,6 +769,11 @@
     if inprec <= preclim goto term_done
     inassoc = inO['assoc']
 
+    $P0 = inO['sub']
+    if null $P0 goto subprec_done
+    inO['prec'] = $P0
+  subprec_done:
+
   reduce_loop:
     unless opstack goto reduce_done
     $P0 = opstack[-1]
@@ -924,7 +1005,7 @@
 ### .include 'gen/hllgrammar-grammar.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1282323993.58127")
+.sub "_block11"  :anon :subid("10_1284728468.35267")
 .annotate 'line', 0
     get_hll_global $P14, ["HLL";"Grammar"], "_block13" 
     capture_lex $P14
@@ -941,15 +1022,15 @@
     $P332 = $P14()
 .annotate 'line', 1
     .return ($P332)
-    .const 'Sub' $P334 = "106_1282323993.58127" 
+    .const 'Sub' $P334 = "106_1284728468.35267" 
     .return ($P334)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post107") :outer("10_1282323993.58127")
+.sub "" :load :init :subid("post107") :outer("10_1284728468.35267")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1282323993.58127" 
+    .const 'Sub' $P12 = "10_1284728468.35267" 
     .local pmc block
     set block, $P12
     $P337 = get_root_global ["parrot"], "P6metaclass"
@@ -958,83 +1039,83 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block13"  :subid("11_1282323993.58127") :outer("10_1282323993.58127")
+.sub "_block13"  :subid("11_1284728468.35267") :outer("10_1284728468.35267")
 .annotate 'line', 5
-    .const 'Sub' $P319 = "103_1282323993.58127" 
+    .const 'Sub' $P319 = "103_1284728468.35267" 
     capture_lex $P319
-    .const 'Sub' $P313 = "101_1282323993.58127" 
+    .const 'Sub' $P313 = "101_1284728468.35267" 
     capture_lex $P313
-    .const 'Sub' $P300 = "98_1282323993.58127" 
+    .const 'Sub' $P300 = "98_1284728468.35267" 
     capture_lex $P300
-    .const 'Sub' $P268 = "93_1282323993.58127" 
+    .const 'Sub' $P268 = "93_1284728468.35267" 
     capture_lex $P268
-    .const 'Sub' $P262 = "91_1282323993.58127" 
+    .const 'Sub' $P262 = "91_1284728468.35267" 
     capture_lex $P262
-    .const 'Sub' $P257 = "89_1282323993.58127" 
+    .const 'Sub' $P257 = "89_1284728468.35267" 
     capture_lex $P257
-    .const 'Sub' $P251 = "87_1282323993.58127" 
+    .const 'Sub' $P251 = "87_1284728468.35267" 
     capture_lex $P251
-    .const 'Sub' $P245 = "85_1282323993.58127" 
+    .const 'Sub' $P245 = "85_1284728468.35267" 
     capture_lex $P245
-    .const 'Sub' $P240 = "83_1282323993.58127" 
+    .const 'Sub' $P240 = "83_1284728468.35267" 
     capture_lex $P240
-    .const 'Sub' $P235 = "81_1282323993.58127" 
+    .const 'Sub' $P235 = "81_1284728468.35267" 
     capture_lex $P235
-    .const 'Sub' $P230 = "79_1282323993.58127" 
+    .const 'Sub' $P230 = "79_1284728468.35267" 
     capture_lex $P230
-    .const 'Sub' $P225 = "77_1282323993.58127" 
+    .const 'Sub' $P225 = "77_1284728468.35267" 
     capture_lex $P225
-    .const 'Sub' $P220 = "75_1282323993.58127" 
+    .const 'Sub' $P220 = "75_1284728468.35267" 
     capture_lex $P220
-    .const 'Sub' $P215 = "73_1282323993.58127" 
+    .const 'Sub' $P215 = "73_1284728468.35267" 
     capture_lex $P215
-    .const 'Sub' $P210 = "71_1282323993.58127" 
+    .const 'Sub' $P210 = "71_1284728468.35267" 
     capture_lex $P210
-    .const 'Sub' $P205 = "69_1282323993.58127" 
+    .const 'Sub' $P205 = "69_1284728468.35267" 
     capture_lex $P205
-    .const 'Sub' $P195 = "65_1282323993.58127" 
+    .const 'Sub' $P195 = "65_1284728468.35267" 
     capture_lex $P195
-    .const 'Sub' $P182 = "63_1282323993.58127" 
+    .const 'Sub' $P182 = "63_1284728468.35267" 
     capture_lex $P182
-    .const 'Sub' $P170 = "61_1282323993.58127" 
+    .const 'Sub' $P170 = "61_1284728468.35267" 
     capture_lex $P170
-    .const 'Sub' $P164 = "59_1282323993.58127" 
+    .const 'Sub' $P164 = "59_1284728468.35267" 
     capture_lex $P164
-    .const 'Sub' $P157 = "57_1282323993.58127" 
+    .const 'Sub' $P157 = "57_1284728468.35267" 
     capture_lex $P157
-    .const 'Sub' $P151 = "55_1282323993.58127" 
+    .const 'Sub' $P151 = "55_1284728468.35267" 
     capture_lex $P151
-    .const 'Sub' $P144 = "53_1282323993.58127" 
+    .const 'Sub' $P144 = "53_1284728468.35267" 
     capture_lex $P144
-    .const 'Sub' $P138 = "51_1282323993.58127" 
+    .const 'Sub' $P138 = "51_1284728468.35267" 
     capture_lex $P138
-    .const 'Sub' $P131 = "49_1282323993.58127" 
+    .const 'Sub' $P131 = "49_1284728468.35267" 
     capture_lex $P131
-    .const 'Sub' $P125 = "47_1282323993.58127" 
+    .const 'Sub' $P125 = "47_1284728468.35267" 
     capture_lex $P125
-    .const 'Sub' $P119 = "45_1282323993.58127" 
+    .const 'Sub' $P119 = "45_1284728468.35267" 
     capture_lex $P119
-    .const 'Sub' $P110 = "43_1282323993.58127" 
+    .const 'Sub' $P110 = "43_1284728468.35267" 
     capture_lex $P110
-    .const 'Sub' $P102 = "41_1282323993.58127" 
+    .const 'Sub' $P102 = "41_1284728468.35267" 
     capture_lex $P102
-    .const 'Sub' $P92 = "40_1282323993.58127" 
+    .const 'Sub' $P92 = "40_1284728468.35267" 
     capture_lex $P92
-    .const 'Sub' $P86 = "38_1282323993.58127" 
+    .const 'Sub' $P86 = "38_1284728468.35267" 
     capture_lex $P86
-    .const 'Sub' $P81 = "36_1282323993.58127" 
+    .const 'Sub' $P81 = "36_1284728468.35267" 
     capture_lex $P81
-    .const 'Sub' $P73 = "34_1282323993.58127" 
+    .const 'Sub' $P73 = "34_1284728468.35267" 
     capture_lex $P73
-    .const 'Sub' $P67 = "32_1282323993.58127" 
+    .const 'Sub' $P67 = "32_1284728468.35267" 
     capture_lex $P67
-    .const 'Sub' $P61 = "30_1282323993.58127" 
+    .const 'Sub' $P61 = "30_1284728468.35267" 
     capture_lex $P61
-    .const 'Sub' $P55 = "28_1282323993.58127" 
+    .const 'Sub' $P55 = "28_1284728468.35267" 
     capture_lex $P55
-    .const 'Sub' $P22 = "14_1282323993.58127" 
+    .const 'Sub' $P22 = "14_1284728468.35267" 
     capture_lex $P22
-    .const 'Sub' $P15 = "12_1282323993.58127" 
+    .const 'Sub' $P15 = "12_1284728468.35267" 
     capture_lex $P15
     $P0 = find_dynamic_lex "$*CTXSAVE"
     if null $P0 goto ctxsave_done
@@ -1043,17 +1124,17 @@
     $P0."ctxsave"()
   ctxsave_done:
 .annotate 'line', 33
-    .const 'Sub' $P319 = "103_1282323993.58127" 
+    .const 'Sub' $P319 = "103_1284728468.35267" 
     capture_lex $P319
 .annotate 'line', 5
     .return ($P319)
-    .const 'Sub' $P329 = "105_1282323993.58127" 
+    .const 'Sub' $P329 = "105_1284728468.35267" 
     .return ($P329)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "ws"  :subid("12_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "ws"  :subid("12_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 5
     .local string rx16_tgt
     .local int rx16_pos
@@ -1153,7 +1234,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__ws"  :subid("13_1282323993.58127") :method
+.sub "!PREFIX__ws"  :subid("13_1284728468.35267") :method
 .annotate 'line', 5
     new $P18, "ResizablePMCArray"
     push $P18, ""
@@ -1162,7 +1243,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "termish"  :subid("14_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "termish"  :subid("14_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 5
     .local string rx23_tgt
     .local int rx23_pos
@@ -1284,7 +1365,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__termish"  :subid("15_1282323993.58127") :method
+.sub "!PREFIX__termish"  :subid("15_1284728468.35267") :method
 .annotate 'line', 5
     new $P25, "ResizablePMCArray"
     push $P25, ""
@@ -1293,7 +1374,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "term"  :subid("16_1282323993.58127") :method
+.sub "term"  :subid("16_1284728468.35267") :method
 .annotate 'line', 13
     $P32 = self."!protoregex"("term")
     .return ($P32)
@@ -1301,7 +1382,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__term"  :subid("17_1282323993.58127") :method
+.sub "!PREFIX__term"  :subid("17_1284728468.35267") :method
 .annotate 'line', 13
     $P34 = self."!PREFIX__!protoregex"("term")
     .return ($P34)
@@ -1309,7 +1390,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "infix"  :subid("18_1282323993.58127") :method
+.sub "infix"  :subid("18_1284728468.35267") :method
 .annotate 'line', 14
     $P36 = self."!protoregex"("infix")
     .return ($P36)
@@ -1317,7 +1398,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__infix"  :subid("19_1282323993.58127") :method
+.sub "!PREFIX__infix"  :subid("19_1284728468.35267") :method
 .annotate 'line', 14
     $P38 = self."!PREFIX__!protoregex"("infix")
     .return ($P38)
@@ -1325,7 +1406,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "prefix"  :subid("20_1282323993.58127") :method
+.sub "prefix"  :subid("20_1284728468.35267") :method
 .annotate 'line', 15
     $P40 = self."!protoregex"("prefix")
     .return ($P40)
@@ -1333,7 +1414,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__prefix"  :subid("21_1282323993.58127") :method
+.sub "!PREFIX__prefix"  :subid("21_1284728468.35267") :method
 .annotate 'line', 15
     $P42 = self."!PREFIX__!protoregex"("prefix")
     .return ($P42)
@@ -1341,7 +1422,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "postfix"  :subid("22_1282323993.58127") :method
+.sub "postfix"  :subid("22_1284728468.35267") :method
 .annotate 'line', 16
     $P44 = self."!protoregex"("postfix")
     .return ($P44)
@@ -1349,7 +1430,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__postfix"  :subid("23_1282323993.58127") :method
+.sub "!PREFIX__postfix"  :subid("23_1284728468.35267") :method
 .annotate 'line', 16
     $P46 = self."!PREFIX__!protoregex"("postfix")
     .return ($P46)
@@ -1357,7 +1438,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "circumfix"  :subid("24_1282323993.58127") :method
+.sub "circumfix"  :subid("24_1284728468.35267") :method
 .annotate 'line', 17
     $P48 = self."!protoregex"("circumfix")
     .return ($P48)
@@ -1365,7 +1446,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__circumfix"  :subid("25_1282323993.58127") :method
+.sub "!PREFIX__circumfix"  :subid("25_1284728468.35267") :method
 .annotate 'line', 17
     $P50 = self."!PREFIX__!protoregex"("circumfix")
     .return ($P50)
@@ -1373,7 +1454,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "postcircumfix"  :subid("26_1282323993.58127") :method
+.sub "postcircumfix"  :subid("26_1284728468.35267") :method
 .annotate 'line', 18
     $P52 = self."!protoregex"("postcircumfix")
     .return ($P52)
@@ -1381,7 +1462,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__postcircumfix"  :subid("27_1282323993.58127") :method
+.sub "!PREFIX__postcircumfix"  :subid("27_1284728468.35267") :method
 .annotate 'line', 18
     $P54 = self."!PREFIX__!protoregex"("postcircumfix")
     .return ($P54)
@@ -1389,7 +1470,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "term:sym<circumfix>"  :subid("28_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "term:sym<circumfix>"  :subid("28_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 5
     .local string rx56_tgt
     .local int rx56_pos
@@ -1461,7 +1542,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__term:sym<circumfix>"  :subid("29_1282323993.58127") :method
+.sub "!PREFIX__term:sym<circumfix>"  :subid("29_1284728468.35267") :method
 .annotate 'line', 5
     $P58 = self."!PREFIX__!subrule"("circumfix", "")
     new $P59, "ResizablePMCArray"
@@ -1471,7 +1552,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "infixish"  :subid("30_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "infixish"  :subid("30_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 5
     .local string rx62_tgt
     .local int rx62_pos
@@ -1543,7 +1624,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__infixish"  :subid("31_1282323993.58127") :method
+.sub "!PREFIX__infixish"  :subid("31_1284728468.35267") :method
 .annotate 'line', 5
     $P64 = self."!PREFIX__!subrule"("infix", "")
     new $P65, "ResizablePMCArray"
@@ -1553,7 +1634,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "prefixish"  :subid("32_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "prefixish"  :subid("32_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 5
     .local string rx68_tgt
     .local int rx68_pos
@@ -1630,7 +1711,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__prefixish"  :subid("33_1282323993.58127") :method
+.sub "!PREFIX__prefixish"  :subid("33_1284728468.35267") :method
 .annotate 'line', 5
     $P70 = self."!PREFIX__!subrule"("prefix", "")
     new $P71, "ResizablePMCArray"
@@ -1640,7 +1721,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "postfixish"  :subid("34_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "postfixish"  :subid("34_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 5
     .local string rx74_tgt
     .local int rx74_pos
@@ -1728,7 +1809,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__postfixish"  :subid("35_1282323993.58127") :method
+.sub "!PREFIX__postfixish"  :subid("35_1284728468.35267") :method
 .annotate 'line', 5
     $P76 = self."!PREFIX__!subrule"("postcircumfix", "")
     $P77 = self."!PREFIX__!subrule"("postfix", "")
@@ -1740,7 +1821,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "nullterm"  :subid("36_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "nullterm"  :subid("36_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 5
     .local string rx82_tgt
     .local int rx82_pos
@@ -1805,7 +1886,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__nullterm"  :subid("37_1282323993.58127") :method
+.sub "!PREFIX__nullterm"  :subid("37_1284728468.35267") :method
 .annotate 'line', 5
     new $P84, "ResizablePMCArray"
     push $P84, ""
@@ -1814,7 +1895,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "nullterm_alt"  :subid("38_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "nullterm_alt"  :subid("38_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 5
     .local string rx87_tgt
     .local int rx87_pos
@@ -1886,7 +1967,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__nullterm_alt"  :subid("39_1282323993.58127") :method
+.sub "!PREFIX__nullterm_alt"  :subid("39_1284728468.35267") :method
 .annotate 'line', 5
     $P89 = self."!PREFIX__!subrule"("nullterm", "")
     new $P90, "ResizablePMCArray"
@@ -1897,7 +1978,7 @@
 
 .namespace ["HLL";"Grammar"]
 .include "except_types.pasm"
-.sub "nulltermish"  :subid("40_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "nulltermish"  :subid("40_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     new $P94, 'ExceptionHandler'
     set_addr $P94, control_93
@@ -1924,7 +2005,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_delimited"  :subid("41_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "quote_delimited"  :subid("41_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx103_tgt
     .local int rx103_pos
@@ -2028,7 +2109,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_delimited"  :subid("42_1282323993.58127") :method
+.sub "!PREFIX__quote_delimited"  :subid("42_1284728468.35267") :method
 .annotate 'line', 33
     $P105 = self."!PREFIX__!subrule"("starter", "")
     new $P106, "ResizablePMCArray"
@@ -2038,7 +2119,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_atom"  :subid("43_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "quote_atom"  :subid("43_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx111_tgt
     .local int rx111_pos
@@ -2145,7 +2226,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_atom"  :subid("44_1282323993.58127") :method
+.sub "!PREFIX__quote_atom"  :subid("44_1284728468.35267") :method
 .annotate 'line', 33
     new $P113, "ResizablePMCArray"
     push $P113, ""
@@ -2154,7 +2235,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "decint"  :subid("45_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "decint"  :subid("45_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx120_tgt
     .local int rx120_pos
@@ -2242,7 +2323,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__decint"  :subid("46_1282323993.58127") :method
+.sub "!PREFIX__decint"  :subid("46_1284728468.35267") :method
 .annotate 'line', 33
     new $P122, "ResizablePMCArray"
     push $P122, ""
@@ -2251,7 +2332,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "decints"  :subid("47_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "decints"  :subid("47_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx126_tgt
     .local int rx126_pos
@@ -2351,7 +2432,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__decints"  :subid("48_1282323993.58127") :method
+.sub "!PREFIX__decints"  :subid("48_1284728468.35267") :method
 .annotate 'line', 33
     new $P128, "ResizablePMCArray"
     push $P128, ""
@@ -2360,7 +2441,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "hexint"  :subid("49_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "hexint"  :subid("49_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx132_tgt
     .local int rx132_pos
@@ -2458,7 +2539,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__hexint"  :subid("50_1282323993.58127") :method
+.sub "!PREFIX__hexint"  :subid("50_1284728468.35267") :method
 .annotate 'line', 33
     new $P134, "ResizablePMCArray"
     push $P134, ""
@@ -2467,7 +2548,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "hexints"  :subid("51_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "hexints"  :subid("51_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx139_tgt
     .local int rx139_pos
@@ -2567,7 +2648,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__hexints"  :subid("52_1282323993.58127") :method
+.sub "!PREFIX__hexints"  :subid("52_1284728468.35267") :method
 .annotate 'line', 33
     new $P141, "ResizablePMCArray"
     push $P141, ""
@@ -2576,7 +2657,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "octint"  :subid("53_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "octint"  :subid("53_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx145_tgt
     .local int rx145_pos
@@ -2674,7 +2755,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__octint"  :subid("54_1282323993.58127") :method
+.sub "!PREFIX__octint"  :subid("54_1284728468.35267") :method
 .annotate 'line', 33
     new $P147, "ResizablePMCArray"
     push $P147, ""
@@ -2683,7 +2764,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "octints"  :subid("55_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "octints"  :subid("55_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx152_tgt
     .local int rx152_pos
@@ -2783,7 +2864,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__octints"  :subid("56_1282323993.58127") :method
+.sub "!PREFIX__octints"  :subid("56_1284728468.35267") :method
 .annotate 'line', 33
     new $P154, "ResizablePMCArray"
     push $P154, ""
@@ -2792,7 +2873,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "binint"  :subid("57_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "binint"  :subid("57_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx158_tgt
     .local int rx158_pos
@@ -2890,7 +2971,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__binint"  :subid("58_1282323993.58127") :method
+.sub "!PREFIX__binint"  :subid("58_1284728468.35267") :method
 .annotate 'line', 33
     new $P160, "ResizablePMCArray"
     push $P160, ""
@@ -2899,7 +2980,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "binints"  :subid("59_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "binints"  :subid("59_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx165_tgt
     .local int rx165_pos
@@ -2999,7 +3080,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__binints"  :subid("60_1282323993.58127") :method
+.sub "!PREFIX__binints"  :subid("60_1284728468.35267") :method
 .annotate 'line', 33
     new $P167, "ResizablePMCArray"
     push $P167, ""
@@ -3008,7 +3089,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "integer"  :subid("61_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "integer"  :subid("61_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx171_tgt
     .local int rx171_pos
@@ -3170,7 +3251,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__integer"  :subid("62_1282323993.58127") :method
+.sub "!PREFIX__integer"  :subid("62_1284728468.35267") :method
 .annotate 'line', 33
     $P173 = self."!PREFIX__!subrule"("decint", "")
     $P174 = self."!PREFIX__!subrule"("decint", "0d")
@@ -3188,7 +3269,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "dec_number"  :subid("63_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "dec_number"  :subid("63_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx183_tgt
     .local int rx183_pos
@@ -3395,7 +3476,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__dec_number"  :subid("64_1282323993.58127") :method
+.sub "!PREFIX__dec_number"  :subid("64_1284728468.35267") :method
 .annotate 'line', 33
     new $P185, "ResizablePMCArray"
     push $P185, ""
@@ -3406,7 +3487,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "escale"  :subid("65_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "escale"  :subid("65_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx196_tgt
     .local int rx196_pos
@@ -3498,7 +3579,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__escale"  :subid("66_1282323993.58127") :method
+.sub "!PREFIX__escale"  :subid("66_1284728468.35267") :method
 .annotate 'line', 33
     new $P198, "ResizablePMCArray"
     push $P198, "e"
@@ -3508,7 +3589,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape"  :subid("67_1282323993.58127") :method
+.sub "quote_escape"  :subid("67_1284728468.35267") :method
 .annotate 'line', 79
     $P202 = self."!protoregex"("quote_escape")
     .return ($P202)
@@ -3516,7 +3597,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape"  :subid("68_1282323993.58127") :method
+.sub "!PREFIX__quote_escape"  :subid("68_1284728468.35267") :method
 .annotate 'line', 79
     $P204 = self."!PREFIX__!protoregex"("quote_escape")
     .return ($P204)
@@ -3524,7 +3605,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<backslash>"  :subid("69_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "quote_escape:sym<backslash>"  :subid("69_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx206_tgt
     .local int rx206_pos
@@ -3600,7 +3681,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<backslash>"  :subid("70_1282323993.58127") :method
+.sub "!PREFIX__quote_escape:sym<backslash>"  :subid("70_1284728468.35267") :method
 .annotate 'line', 33
     new $P208, "ResizablePMCArray"
     push $P208, "\\\\"
@@ -3609,7 +3690,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<stopper>"  :subid("71_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "quote_escape:sym<stopper>"  :subid("71_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx211_tgt
     .local int rx211_pos
@@ -3692,7 +3773,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<stopper>"  :subid("72_1282323993.58127") :method
+.sub "!PREFIX__quote_escape:sym<stopper>"  :subid("72_1284728468.35267") :method
 .annotate 'line', 33
     new $P213, "ResizablePMCArray"
     push $P213, "\\"
@@ -3701,7 +3782,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<bs>"  :subid("73_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "quote_escape:sym<bs>"  :subid("73_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx216_tgt
     .local int rx216_pos
@@ -3777,7 +3858,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<bs>"  :subid("74_1282323993.58127") :method
+.sub "!PREFIX__quote_escape:sym<bs>"  :subid("74_1284728468.35267") :method
 .annotate 'line', 33
     new $P218, "ResizablePMCArray"
     push $P218, "\\b"
@@ -3786,7 +3867,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<nl>"  :subid("75_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "quote_escape:sym<nl>"  :subid("75_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx221_tgt
     .local int rx221_pos
@@ -3862,7 +3943,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<nl>"  :subid("76_1282323993.58127") :method
+.sub "!PREFIX__quote_escape:sym<nl>"  :subid("76_1284728468.35267") :method
 .annotate 'line', 33
     new $P223, "ResizablePMCArray"
     push $P223, "\\n"
@@ -3871,7 +3952,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<cr>"  :subid("77_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "quote_escape:sym<cr>"  :subid("77_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx226_tgt
     .local int rx226_pos
@@ -3947,7 +4028,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<cr>"  :subid("78_1282323993.58127") :method
+.sub "!PREFIX__quote_escape:sym<cr>"  :subid("78_1284728468.35267") :method
 .annotate 'line', 33
     new $P228, "ResizablePMCArray"
     push $P228, "\\r"
@@ -3956,7 +4037,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<tab>"  :subid("79_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "quote_escape:sym<tab>"  :subid("79_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx231_tgt
     .local int rx231_pos
@@ -4032,7 +4113,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<tab>"  :subid("80_1282323993.58127") :method
+.sub "!PREFIX__quote_escape:sym<tab>"  :subid("80_1284728468.35267") :method
 .annotate 'line', 33
     new $P233, "ResizablePMCArray"
     push $P233, "\\t"
@@ -4041,7 +4122,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<ff>"  :subid("81_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "quote_escape:sym<ff>"  :subid("81_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx236_tgt
     .local int rx236_pos
@@ -4117,7 +4198,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<ff>"  :subid("82_1282323993.58127") :method
+.sub "!PREFIX__quote_escape:sym<ff>"  :subid("82_1284728468.35267") :method
 .annotate 'line', 33
     new $P238, "ResizablePMCArray"
     push $P238, "\\f"
@@ -4126,7 +4207,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<esc>"  :subid("83_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "quote_escape:sym<esc>"  :subid("83_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx241_tgt
     .local int rx241_pos
@@ -4202,7 +4283,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<esc>"  :subid("84_1282323993.58127") :method
+.sub "!PREFIX__quote_escape:sym<esc>"  :subid("84_1284728468.35267") :method
 .annotate 'line', 33
     new $P243, "ResizablePMCArray"
     push $P243, "\\e"
@@ -4211,7 +4292,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<hex>"  :subid("85_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "quote_escape:sym<hex>"  :subid("85_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx246_tgt
     .local int rx246_pos
@@ -4323,7 +4404,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<hex>"  :subid("86_1282323993.58127") :method
+.sub "!PREFIX__quote_escape:sym<hex>"  :subid("86_1284728468.35267") :method
 .annotate 'line', 33
     new $P248, "ResizablePMCArray"
     push $P248, unicode:"\\x"
@@ -4332,7 +4413,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<oct>"  :subid("87_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "quote_escape:sym<oct>"  :subid("87_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx252_tgt
     .local int rx252_pos
@@ -4444,7 +4525,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<oct>"  :subid("88_1282323993.58127") :method
+.sub "!PREFIX__quote_escape:sym<oct>"  :subid("88_1284728468.35267") :method
 .annotate 'line', 33
     new $P254, "ResizablePMCArray"
     push $P254, "\\o"
@@ -4453,7 +4534,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<chr>"  :subid("89_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "quote_escape:sym<chr>"  :subid("89_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx258_tgt
     .local int rx258_pos
@@ -4536,7 +4617,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<chr>"  :subid("90_1282323993.58127") :method
+.sub "!PREFIX__quote_escape:sym<chr>"  :subid("90_1284728468.35267") :method
 .annotate 'line', 33
     new $P260, "ResizablePMCArray"
     push $P260, "\\c"
@@ -4545,7 +4626,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<0>"  :subid("91_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "quote_escape:sym<0>"  :subid("91_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx263_tgt
     .local int rx263_pos
@@ -4642,7 +4723,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<0>"  :subid("92_1282323993.58127") :method
+.sub "!PREFIX__quote_escape:sym<0>"  :subid("92_1284728468.35267") :method
 .annotate 'line', 33
     new $P265, "ResizablePMCArray"
     push $P265, "\\0"
@@ -4651,13 +4732,13 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<misc>"  :subid("93_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "quote_escape:sym<misc>"  :subid("93_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
-    .const 'Sub' $P288 = "97_1282323993.58127" 
+    .const 'Sub' $P288 = "97_1284728468.35267" 
     capture_lex $P288
-    .const 'Sub' $P281 = "96_1282323993.58127" 
+    .const 'Sub' $P281 = "96_1284728468.35267" 
     capture_lex $P281
-    .const 'Sub' $P276 = "95_1282323993.58127" 
+    .const 'Sub' $P276 = "95_1284728468.35267" 
     capture_lex $P276
     .local string rx269_tgt
     .local int rx269_pos
@@ -4699,7 +4780,7 @@
     find_lex $P273, unicode:"$\x{a2}"
     $P274 = $P273."MATCH"()
     store_lex "$/", $P274
-    .const 'Sub' $P276 = "95_1282323993.58127" 
+    .const 'Sub' $P276 = "95_1284728468.35267" 
     capture_lex $P276
     $P277 = $P276()
   # rx literal  "\\"
@@ -4725,7 +4806,7 @@
 .annotate 'line', 104
   # rx subrule $P281 subtype=capture negate=
     rx269_cur."!cursor_pos"(rx269_pos)
-    .const 'Sub' $P281 = "96_1282323993.58127" 
+    .const 'Sub' $P281 = "96_1284728468.35267" 
     capture_lex $P281
     $P10 = rx269_cur.$P281()
     unless $P10, rx269_fail
@@ -4759,7 +4840,7 @@
     find_lex $P285, unicode:"$\x{a2}"
     $P286 = $P285."MATCH"()
     store_lex "$/", $P286
-    .const 'Sub' $P288 = "97_1282323993.58127" 
+    .const 'Sub' $P288 = "97_1284728468.35267" 
     capture_lex $P288
     $P298 = $P288()
   alt279_end:
@@ -4813,7 +4894,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<misc>"  :subid("94_1282323993.58127") :method
+.sub "!PREFIX__quote_escape:sym<misc>"  :subid("94_1284728468.35267") :method
 .annotate 'line', 33
     new $P271, "ResizablePMCArray"
     push $P271, ""
@@ -4822,14 +4903,14 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block275"  :anon :subid("95_1282323993.58127") :outer("93_1282323993.58127")
+.sub "_block275"  :anon :subid("95_1284728468.35267") :outer("93_1284728468.35267")
 .annotate 'line', 100
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block280"  :anon :subid("96_1282323993.58127") :method :outer("93_1282323993.58127")
+.sub "_block280"  :anon :subid("96_1284728468.35267") :method :outer("93_1284728468.35267")
 .annotate 'line', 104
     .local string rx282_tgt
     .local int rx282_pos
@@ -4898,7 +4979,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block287"  :anon :subid("97_1282323993.58127") :outer("93_1282323993.58127")
+.sub "_block287"  :anon :subid("97_1284728468.35267") :outer("93_1284728468.35267")
 .annotate 'line', 105
     find_lex $P289, "$/"
     $P290 = $P289."CURSOR"()
@@ -4921,9 +5002,9 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "charname"  :subid("98_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "charname"  :subid("98_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
-    .const 'Sub' $P310 = "100_1282323993.58127" 
+    .const 'Sub' $P310 = "100_1284728468.35267" 
     capture_lex $P310
     .local string rx301_tgt
     .local int rx301_pos
@@ -5007,7 +5088,7 @@
 .annotate 'line', 114
   # rx subrule "before" subtype=zerowidth negate=
     rx301_cur."!cursor_pos"(rx301_pos)
-    .const 'Sub' $P310 = "100_1282323993.58127" 
+    .const 'Sub' $P310 = "100_1284728468.35267" 
     capture_lex $P310
     $P10 = rx301_cur."before"($P310)
     unless $P10, rx301_fail
@@ -5040,7 +5121,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__charname"  :subid("99_1282323993.58127") :method
+.sub "!PREFIX__charname"  :subid("99_1284728468.35267") :method
 .annotate 'line', 33
     $P303 = self."!PREFIX__!subrule"("integer", "")
     new $P304, "ResizablePMCArray"
@@ -5102,7 +5183,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block309"  :anon :subid("100_1282323993.58127") :method :outer("98_1282323993.58127")
+.sub "_block309"  :anon :subid("100_1284728468.35267") :method :outer("98_1284728468.35267")
 .annotate 'line', 114
     .local string rx311_tgt
     .local int rx311_pos
@@ -5176,7 +5257,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "charnames"  :subid("101_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "charnames"  :subid("101_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx314_tgt
     .local int rx314_pos
@@ -5276,7 +5357,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__charnames"  :subid("102_1282323993.58127") :method
+.sub "!PREFIX__charnames"  :subid("102_1284728468.35267") :method
 .annotate 'line', 33
     new $P316, "ResizablePMCArray"
     push $P316, ""
@@ -5285,7 +5366,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "charspec"  :subid("103_1282323993.58127") :method :outer("11_1282323993.58127")
+.sub "charspec"  :subid("103_1284728468.35267") :method :outer("11_1284728468.35267")
 .annotate 'line', 33
     .local string rx320_tgt
     .local int rx320_pos
@@ -5431,7 +5512,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__charspec"  :subid("104_1282323993.58127") :method
+.sub "!PREFIX__charspec"  :subid("104_1284728468.35267") :method
 .annotate 'line', 33
     $P322 = self."!PREFIX__!subrule"("panic", "")
     $P323 = self."!PREFIX__!subrule"("charnames", "[")
@@ -5472,18 +5553,18 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block328" :load :anon :subid("105_1282323993.58127")
+.sub "_block328" :load :anon :subid("105_1284728468.35267")
 .annotate 'line', 5
-    .const 'Sub' $P330 = "11_1282323993.58127" 
+    .const 'Sub' $P330 = "11_1284728468.35267" 
     $P331 = $P330()
     .return ($P331)
 .end
 
 
 .namespace []
-.sub "_block333" :load :anon :subid("106_1282323993.58127")
+.sub "_block333" :load :anon :subid("106_1284728468.35267")
 .annotate 'line', 1
-    .const 'Sub' $P335 = "10_1282323993.58127" 
+    .const 'Sub' $P335 = "10_1284728468.35267" 
     $P336 = $P335()
     .return ($P336)
 .end
@@ -5491,7 +5572,7 @@
 ### .include 'gen/hllgrammar-actions.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1282323994.69928")
+.sub "_block11"  :anon :subid("10_1284728469.44803")
 .annotate 'line', 0
     get_hll_global $P14, ["HLL";"Actions"], "_block13" 
     capture_lex $P14
@@ -5508,15 +5589,15 @@
     $P627 = $P14()
 .annotate 'line', 1
     .return ($P627)
-    .const 'Sub' $P629 = "55_1282323994.69928" 
+    .const 'Sub' $P629 = "55_1284728469.44803" 
     .return ($P629)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post56") :outer("10_1282323994.69928")
+.sub "" :load :init :subid("post56") :outer("10_1284728469.44803")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1282323994.69928" 
+    .const 'Sub' $P12 = "10_1284728469.44803" 
     .local pmc block
     set block, $P12
     $P632 = get_root_global ["parrot"], "P6metaclass"
@@ -5525,75 +5606,75 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block13"  :subid("11_1282323994.69928") :outer("10_1282323994.69928")
+.sub "_block13"  :subid("11_1284728469.44803") :outer("10_1284728469.44803")
 .annotate 'line', 3
-    .const 'Sub' $P605 = "53_1282323994.69928" 
+    .const 'Sub' $P605 = "53_1284728469.44803" 
     capture_lex $P605
-    .const 'Sub' $P580 = "51_1282323994.69928" 
+    .const 'Sub' $P580 = "51_1284728469.44803" 
     capture_lex $P580
-    .const 'Sub' $P550 = "50_1282323994.69928" 
+    .const 'Sub' $P550 = "50_1284728469.44803" 
     capture_lex $P550
-    .const 'Sub' $P531 = "49_1282323994.69928" 
+    .const 'Sub' $P531 = "49_1284728469.44803" 
     capture_lex $P531
-    .const 'Sub' $P524 = "48_1282323994.69928" 
+    .const 'Sub' $P524 = "48_1284728469.44803" 
     capture_lex $P524
-    .const 'Sub' $P514 = "47_1282323994.69928" 
+    .const 'Sub' $P514 = "47_1284728469.44803" 
     capture_lex $P514
-    .const 'Sub' $P497 = "46_1282323994.69928" 
+    .const 'Sub' $P497 = "46_1284728469.44803" 
     capture_lex $P497
-    .const 'Sub' $P480 = "45_1282323994.69928" 
+    .const 'Sub' $P480 = "45_1284728469.44803" 
     capture_lex $P480
-    .const 'Sub' $P473 = "44_1282323994.69928" 
+    .const 'Sub' $P473 = "44_1284728469.44803" 
     capture_lex $P473
-    .const 'Sub' $P466 = "43_1282323994.69928" 
+    .const 'Sub' $P466 = "43_1284728469.44803" 
     capture_lex $P466
-    .const 'Sub' $P459 = "42_1282323994.69928" 
+    .const 'Sub' $P459 = "42_1284728469.44803" 
     capture_lex $P459
-    .const 'Sub' $P452 = "41_1282323994.69928" 
+    .const 'Sub' $P452 = "41_1284728469.44803" 
     capture_lex $P452
-    .const 'Sub' $P445 = "40_1282323994.69928" 
+    .const 'Sub' $P445 = "40_1284728469.44803" 
     capture_lex $P445
-    .const 'Sub' $P438 = "39_1282323994.69928" 
+    .const 'Sub' $P438 = "39_1284728469.44803" 
     capture_lex $P438
-    .const 'Sub' $P428 = "38_1282323994.69928" 
+    .const 'Sub' $P428 = "38_1284728469.44803" 
     capture_lex $P428
-    .const 'Sub' $P421 = "37_1282323994.69928" 
+    .const 'Sub' $P421 = "37_1284728469.44803" 
     capture_lex $P421
-    .const 'Sub' $P405 = "36_1282323994.69928" 
+    .const 'Sub' $P405 = "36_1284728469.44803" 
     capture_lex $P405
-    .const 'Sub' $P330 = "34_1282323994.69928" 
+    .const 'Sub' $P330 = "34_1284728469.44803" 
     capture_lex $P330
-    .const 'Sub' $P267 = "31_1282323994.69928" 
+    .const 'Sub' $P267 = "31_1284728469.44803" 
     capture_lex $P267
-    .const 'Sub' $P258 = "30_1282323994.69928" 
+    .const 'Sub' $P258 = "30_1284728469.44803" 
     capture_lex $P258
-    .const 'Sub' $P249 = "29_1282323994.69928" 
+    .const 'Sub' $P249 = "29_1284728469.44803" 
     capture_lex $P249
-    .const 'Sub' $P240 = "28_1282323994.69928" 
+    .const 'Sub' $P240 = "28_1284728469.44803" 
     capture_lex $P240
-    .const 'Sub' $P231 = "27_1282323994.69928" 
+    .const 'Sub' $P231 = "27_1284728469.44803" 
     capture_lex $P231
-    .const 'Sub' $P222 = "26_1282323994.69928" 
+    .const 'Sub' $P222 = "26_1284728469.44803" 
     capture_lex $P222
-    .const 'Sub' $P212 = "25_1282323994.69928" 
+    .const 'Sub' $P212 = "25_1284728469.44803" 
     capture_lex $P212
-    .const 'Sub' $P202 = "24_1282323994.69928" 
+    .const 'Sub' $P202 = "24_1284728469.44803" 
     capture_lex $P202
-    .const 'Sub' $P194 = "23_1282323994.69928" 
+    .const 'Sub' $P194 = "23_1284728469.44803" 
     capture_lex $P194
-    .const 'Sub' $P184 = "22_1282323994.69928" 
+    .const 'Sub' $P184 = "22_1284728469.44803" 
     capture_lex $P184
-    .const 'Sub' $P174 = "21_1282323994.69928" 
+    .const 'Sub' $P174 = "21_1284728469.44803" 
     capture_lex $P174
-    .const 'Sub' $P73 = "18_1282323994.69928" 
+    .const 'Sub' $P73 = "18_1284728469.44803" 
     capture_lex $P73
-    .const 'Sub' $P35 = "15_1282323994.69928" 
+    .const 'Sub' $P35 = "15_1284728469.44803" 
     capture_lex $P35
-    .const 'Sub' $P28 = "14_1282323994.69928" 
+    .const 'Sub' $P28 = "14_1284728469.44803" 
     capture_lex $P28
-    .const 'Sub' $P22 = "13_1282323994.69928" 
+    .const 'Sub' $P22 = "13_1284728469.44803" 
     capture_lex $P22
-    .const 'Sub' $P15 = "12_1282323994.69928" 
+    .const 'Sub' $P15 = "12_1284728469.44803" 
     capture_lex $P15
     $P0 = find_dynamic_lex "$*CTXSAVE"
     if null $P0 goto ctxsave_done
@@ -5602,18 +5683,18 @@
     $P0."ctxsave"()
   ctxsave_done:
 .annotate 'line', 225
-    .const 'Sub' $P605 = "53_1282323994.69928" 
+    .const 'Sub' $P605 = "53_1284728469.44803" 
     newclosure $P622, $P605
 .annotate 'line', 3
     .return ($P622)
-    .const 'Sub' $P624 = "54_1282323994.69928" 
+    .const 'Sub' $P624 = "54_1284728469.44803" 
     .return ($P624)
 .end
 
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "string_to_int"  :subid("12_1282323994.69928") :outer("11_1282323994.69928")
+.sub "string_to_int"  :subid("12_1284728469.44803") :outer("11_1284728469.44803")
     .param pmc param_18
     .param pmc param_19
 .annotate 'line', 3
@@ -5667,7 +5748,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "ints_to_string"  :subid("13_1282323994.69928") :outer("11_1282323994.69928")
+.sub "ints_to_string"  :subid("13_1284728469.44803") :outer("11_1284728469.44803")
     .param pmc param_25
 .annotate 'line', 37
     new $P24, 'ExceptionHandler'
@@ -5709,7 +5790,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "CTXSAVE"  :subid("14_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "CTXSAVE"  :subid("14_1284728469.44803") :method :outer("11_1284728469.44803")
 .annotate 'line', 62
     new $P30, 'ExceptionHandler'
     set_addr $P30, control_29
@@ -5739,10 +5820,10 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "SET_BLOCK_OUTER_CTX"  :subid("15_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "SET_BLOCK_OUTER_CTX"  :subid("15_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_38
 .annotate 'line', 76
-    .const 'Sub' $P48 = "16_1282323994.69928" 
+    .const 'Sub' $P48 = "16_1284728469.44803" 
     capture_lex $P48
     new $P37, 'ExceptionHandler'
     set_addr $P37, control_36
@@ -5777,7 +5858,7 @@
     set $P43, $I46
     goto if_44_end
   if_44:
-    .const 'Sub' $P48 = "16_1282323994.69928" 
+    .const 'Sub' $P48 = "16_1284728469.44803" 
     capture_lex $P48
     $P71 = $P48()
     set $P43, $P71
@@ -5794,9 +5875,9 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "_block47"  :anon :subid("16_1282323994.69928") :outer("15_1282323994.69928")
+.sub "_block47"  :anon :subid("16_1284728469.44803") :outer("15_1284728469.44803")
 .annotate 'line', 78
-    .const 'Sub' $P62 = "17_1282323994.69928" 
+    .const 'Sub' $P62 = "17_1284728469.44803" 
     capture_lex $P62
 .annotate 'line', 79
     $P49 = root_new ['parrot';'ResizablePMCArray']
@@ -5826,7 +5907,7 @@
     unless $P56, loop68_done
     shift $P60, $P56
   loop68_redo:
-    .const 'Sub' $P62 = "17_1282323994.69928" 
+    .const 'Sub' $P62 = "17_1284728469.44803" 
     capture_lex $P62
     $P62($P60)
   loop68_next:
@@ -5846,7 +5927,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block61"  :anon :subid("17_1282323994.69928") :outer("16_1282323994.69928")
+.sub "_block61"  :anon :subid("17_1284728469.44803") :outer("16_1284728469.44803")
     .param pmc param_63
 .annotate 'line', 82
     .lex "$_", param_63
@@ -5862,14 +5943,14 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "EXPR"  :subid("18_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "EXPR"  :subid("18_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_76
     .param pmc param_77 :optional
     .param int has_param_77 :opt_flag
 .annotate 'line', 89
-    .const 'Sub' $P156 = "20_1282323994.69928" 
+    .const 'Sub' $P156 = "20_1284728469.44803" 
     capture_lex $P156
-    .const 'Sub' $P123 = "19_1282323994.69928" 
+    .const 'Sub' $P123 = "19_1284728469.44803" 
     capture_lex $P123
     new $P75, 'ExceptionHandler'
     set_addr $P75, control_74
@@ -6004,7 +6085,7 @@
     find_lex $P120, "$past"
     $P121 = $P120."name"()
     if $P121, unless_119_end
-    .const 'Sub' $P123 = "19_1282323994.69928" 
+    .const 'Sub' $P123 = "19_1284728469.44803" 
     capture_lex $P123
     $P123()
   unless_119_end:
@@ -6028,7 +6109,7 @@
     unless $P150, loop167_done
     shift $P154, $P150
   loop167_redo:
-    .const 'Sub' $P156 = "20_1282323994.69928" 
+    .const 'Sub' $P156 = "20_1284728469.44803" 
     capture_lex $P156
     $P156($P154)
   loop167_next:
@@ -6073,7 +6154,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block122"  :anon :subid("19_1282323994.69928") :outer("18_1282323994.69928")
+.sub "_block122"  :anon :subid("19_1284728469.44803") :outer("18_1284728469.44803")
 .annotate 'line', 98
     new $P124, "Undef"
     .lex "$name", $P124
@@ -6123,7 +6204,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block155"  :anon :subid("20_1282323994.69928") :outer("18_1282323994.69928")
+.sub "_block155"  :anon :subid("20_1284728469.44803") :outer("18_1284728469.44803")
     .param pmc param_157
 .annotate 'line', 109
     .lex "$_", param_157
@@ -6147,7 +6228,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<circumfix>"  :subid("21_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "term:sym<circumfix>"  :subid("21_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_177
 .annotate 'line', 114
     new $P176, 'ExceptionHandler'
@@ -6178,7 +6259,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "termish"  :subid("22_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "termish"  :subid("22_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_187
 .annotate 'line', 116
     new $P186, 'ExceptionHandler'
@@ -6209,7 +6290,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "nullterm"  :subid("23_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "nullterm"  :subid("23_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_197
 .annotate 'line', 117
     new $P196, 'ExceptionHandler'
@@ -6232,7 +6313,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "nullterm_alt"  :subid("24_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "nullterm_alt"  :subid("24_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_205
 .annotate 'line', 118
     new $P204, 'ExceptionHandler'
@@ -6263,7 +6344,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "integer"  :subid("25_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "integer"  :subid("25_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_215
 .annotate 'line', 120
     new $P214, 'ExceptionHandler'
@@ -6294,7 +6375,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "dec_number"  :subid("26_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "dec_number"  :subid("26_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_225
 .annotate 'line', 122
     new $P224, 'ExceptionHandler'
@@ -6318,7 +6399,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "decint"  :subid("27_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "decint"  :subid("27_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_234
 .annotate 'line', 124
     new $P233, 'ExceptionHandler'
@@ -6342,7 +6423,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "hexint"  :subid("28_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "hexint"  :subid("28_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_243
 .annotate 'line', 125
     new $P242, 'ExceptionHandler'
@@ -6366,7 +6447,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "octint"  :subid("29_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "octint"  :subid("29_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_252
 .annotate 'line', 126
     new $P251, 'ExceptionHandler'
@@ -6390,7 +6471,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "binint"  :subid("30_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "binint"  :subid("30_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_261
 .annotate 'line', 127
     new $P260, 'ExceptionHandler'
@@ -6414,10 +6495,10 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_EXPR"  :subid("31_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "quote_EXPR"  :subid("31_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_270
 .annotate 'line', 129
-    .const 'Sub' $P286 = "32_1282323994.69928" 
+    .const 'Sub' $P286 = "32_1284728469.44803" 
     capture_lex $P286
     new $P269, 'ExceptionHandler'
     set_addr $P269, control_268
@@ -6449,7 +6530,7 @@
     $P282 = $P280."ACCEPTS"($P281)
     if $P282, if_279
 .annotate 'line', 135
-    .const 'Sub' $P286 = "32_1282323994.69928" 
+    .const 'Sub' $P286 = "32_1284728469.44803" 
     capture_lex $P286
     $P286()
     goto if_279_end
@@ -6489,9 +6570,9 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "_block285"  :anon :subid("32_1282323994.69928") :outer("31_1282323994.69928")
+.sub "_block285"  :anon :subid("32_1284728469.44803") :outer("31_1284728469.44803")
 .annotate 'line', 135
-    .const 'Sub' $P305 = "33_1282323994.69928" 
+    .const 'Sub' $P305 = "33_1284728469.44803" 
     capture_lex $P305
 .annotate 'line', 136
     $P287 = root_new ['parrot';'ResizablePMCArray']
@@ -6542,7 +6623,7 @@
     unless $P300, loop310_done
     shift $P303, $P300
   loop310_redo:
-    .const 'Sub' $P305 = "33_1282323994.69928" 
+    .const 'Sub' $P305 = "33_1284728469.44803" 
     capture_lex $P305
     $P305($P303)
   loop310_next:
@@ -6565,7 +6646,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block304"  :anon :subid("33_1282323994.69928") :outer("32_1282323994.69928")
+.sub "_block304"  :anon :subid("33_1284728469.44803") :outer("32_1284728469.44803")
     .param pmc param_306
 .annotate 'line', 139
     .lex "$_", param_306
@@ -6578,10 +6659,10 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_delimited"  :subid("34_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "quote_delimited"  :subid("34_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_333
 .annotate 'line', 152
-    .const 'Sub' $P345 = "35_1282323994.69928" 
+    .const 'Sub' $P345 = "35_1284728469.44803" 
     capture_lex $P345
     new $P332, 'ExceptionHandler'
     set_addr $P332, control_331
@@ -6624,7 +6705,7 @@
     unless $P339, loop377_done
     shift $P343, $P339
   loop377_redo:
-    .const 'Sub' $P345 = "35_1282323994.69928" 
+    .const 'Sub' $P345 = "35_1284728469.44803" 
     capture_lex $P345
     $P345($P343)
   loop377_next:
@@ -6702,7 +6783,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block344"  :anon :subid("35_1282323994.69928") :outer("34_1282323994.69928")
+.sub "_block344"  :anon :subid("35_1284728469.44803") :outer("34_1284728469.44803")
     .param pmc param_347
 .annotate 'line', 156
     new $P346, "Undef"
@@ -6772,7 +6853,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_atom"  :subid("36_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "quote_atom"  :subid("36_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_408
 .annotate 'line', 177
     new $P407, 'ExceptionHandler'
@@ -6822,7 +6903,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<backslash>"  :subid("37_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "quote_escape:sym<backslash>"  :subid("37_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_424
 .annotate 'line', 181
     new $P423, 'ExceptionHandler'
@@ -6844,7 +6925,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<stopper>"  :subid("38_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "quote_escape:sym<stopper>"  :subid("38_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_431
 .annotate 'line', 182
     new $P430, 'ExceptionHandler'
@@ -6875,7 +6956,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<bs>"  :subid("39_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "quote_escape:sym<bs>"  :subid("39_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_441
 .annotate 'line', 184
     new $P440, 'ExceptionHandler'
@@ -6897,7 +6978,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<nl>"  :subid("40_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "quote_escape:sym<nl>"  :subid("40_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_448
 .annotate 'line', 185
     new $P447, 'ExceptionHandler'
@@ -6919,7 +7000,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<cr>"  :subid("41_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "quote_escape:sym<cr>"  :subid("41_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_455
 .annotate 'line', 186
     new $P454, 'ExceptionHandler'
@@ -6941,7 +7022,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<tab>"  :subid("42_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "quote_escape:sym<tab>"  :subid("42_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_462
 .annotate 'line', 187
     new $P461, 'ExceptionHandler'
@@ -6963,7 +7044,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<ff>"  :subid("43_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "quote_escape:sym<ff>"  :subid("43_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_469
 .annotate 'line', 188
     new $P468, 'ExceptionHandler'
@@ -6985,7 +7066,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<esc>"  :subid("44_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "quote_escape:sym<esc>"  :subid("44_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_476
 .annotate 'line', 189
     new $P475, 'ExceptionHandler'
@@ -7007,7 +7088,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<hex>"  :subid("45_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "quote_escape:sym<hex>"  :subid("45_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_483
 .annotate 'line', 191
     new $P482, 'ExceptionHandler'
@@ -7066,7 +7147,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<oct>"  :subid("46_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "quote_escape:sym<oct>"  :subid("46_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_500
 .annotate 'line', 195
     new $P499, 'ExceptionHandler'
@@ -7125,7 +7206,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<chr>"  :subid("47_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "quote_escape:sym<chr>"  :subid("47_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_517
 .annotate 'line', 199
     new $P516, 'ExceptionHandler'
@@ -7158,7 +7239,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<0>"  :subid("48_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "quote_escape:sym<0>"  :subid("48_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_527
 .annotate 'line', 203
     new $P526, 'ExceptionHandler'
@@ -7182,7 +7263,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<misc>"  :subid("49_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "quote_escape:sym<misc>"  :subid("49_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_534
 .annotate 'line', 207
     new $P533, 'ExceptionHandler'
@@ -7241,7 +7322,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "charname"  :subid("50_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "charname"  :subid("50_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_553
 .annotate 'line', 211
     new $P552, 'ExceptionHandler'
@@ -7315,10 +7396,10 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "charnames"  :subid("51_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "charnames"  :subid("51_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_583
 .annotate 'line', 219
-    .const 'Sub' $P592 = "52_1282323994.69928" 
+    .const 'Sub' $P592 = "52_1284728469.44803" 
     capture_lex $P592
     new $P582, 'ExceptionHandler'
     set_addr $P582, control_581
@@ -7352,7 +7433,7 @@
     unless $P586, loop598_done
     shift $P590, $P586
   loop598_redo:
-    .const 'Sub' $P592 = "52_1282323994.69928" 
+    .const 'Sub' $P592 = "52_1284728469.44803" 
     capture_lex $P592
     $P592($P590)
   loop598_next:
@@ -7381,7 +7462,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block591"  :anon :subid("52_1282323994.69928") :outer("51_1282323994.69928")
+.sub "_block591"  :anon :subid("52_1284728469.44803") :outer("51_1284728469.44803")
     .param pmc param_593
 .annotate 'line', 221
     .lex "$_", param_593
@@ -7396,7 +7477,7 @@
 
 .namespace ["HLL";"Actions"]
 .include "except_types.pasm"
-.sub "charspec"  :subid("53_1282323994.69928") :method :outer("11_1282323994.69928")
+.sub "charspec"  :subid("53_1284728469.44803") :method :outer("11_1284728469.44803")
     .param pmc param_608
 .annotate 'line', 225
     new $P607, 'ExceptionHandler'
@@ -7446,18 +7527,18 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block623" :load :anon :subid("54_1282323994.69928")
+.sub "_block623" :load :anon :subid("54_1284728469.44803")
 .annotate 'line', 3
-    .const 'Sub' $P625 = "11_1282323994.69928" 
+    .const 'Sub' $P625 = "11_1284728469.44803" 
     $P626 = $P625()
     .return ($P626)
 .end
 
 
 .namespace []
-.sub "_block628" :load :anon :subid("55_1282323994.69928")
+.sub "_block628" :load :anon :subid("55_1284728469.44803")
 .annotate 'line', 1
-    .const 'Sub' $P630 = "10_1282323994.69928" 
+    .const 'Sub' $P630 = "10_1284728469.44803" 
     $P631 = $P630()
     .return ($P631)
 .end
@@ -7465,7 +7546,7 @@
 ### .include 'gen/hllcompiler.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1282323995.38516")
+.sub "_block11"  :anon :subid("10_1284728470.10282")
 .annotate 'line', 0
     get_hll_global $P14, ["HLL";"Compiler"], "_block13" 
     capture_lex $P14
@@ -7482,15 +7563,15 @@
     $P497 = $P14()
 .annotate 'line', 1
     .return ($P497)
-    .const 'Sub' $P499 = "36_1282323995.38516" 
+    .const 'Sub' $P499 = "36_1284728470.10282" 
     .return ($P499)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post37") :outer("10_1282323995.38516")
+.sub "" :load :init :subid("post37") :outer("10_1284728470.10282")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1282323995.38516" 
+    .const 'Sub' $P12 = "10_1284728470.10282" 
     .local pmc block
     set block, $P12
 .annotate 'line', 2
@@ -7504,36 +7585,36 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block13"  :subid("11_1282323995.38516") :outer("10_1282323995.38516")
+.sub "_block13"  :subid("11_1284728470.10282") :outer("10_1284728470.10282")
 .annotate 'line', 6
-    .const 'Sub' $P489 = "35_1282323995.38516" 
+    .const 'Sub' $P489 = "35_1284728470.10282" 
     capture_lex $P489
-    .const 'Sub' $P447 = "33_1282323995.38516" 
+    .const 'Sub' $P447 = "33_1284728470.10282" 
     capture_lex $P447
-    .const 'Sub' $P298 = "26_1282323995.38516" 
+    .const 'Sub' $P298 = "26_1284728470.10282" 
     capture_lex $P298
-    .const 'Sub' $P283 = "25_1282323995.38516" 
+    .const 'Sub' $P283 = "25_1284728470.10282" 
     capture_lex $P283
-    .const 'Sub' $P188 = "20_1282323995.38516" 
+    .const 'Sub' $P188 = "20_1284728470.10282" 
     capture_lex $P188
-    .const 'Sub' $P153 = "18_1282323995.38516" 
+    .const 'Sub' $P153 = "18_1284728470.10282" 
     capture_lex $P153
-    .const 'Sub' $P138 = "17_1282323995.38516" 
+    .const 'Sub' $P138 = "17_1284728470.10282" 
     capture_lex $P138
-    .const 'Sub' $P122 = "16_1282323995.38516" 
+    .const 'Sub' $P122 = "16_1284728470.10282" 
     capture_lex $P122
-    .const 'Sub' $P33 = "13_1282323995.38516" 
+    .const 'Sub' $P33 = "13_1284728470.10282" 
     capture_lex $P33
-    .const 'Sub' $P15 = "12_1282323995.38516" 
+    .const 'Sub' $P15 = "12_1284728470.10282" 
     capture_lex $P15
 .annotate 'line', 14
-    .const 'Sub' $P15 = "12_1282323995.38516" 
+    .const 'Sub' $P15 = "12_1284728470.10282" 
     newclosure $P31, $P15
     .lex "value_type", $P31
 .annotate 'line', 10
     find_lex $P32, "value_type"
 .annotate 'line', 165
-    .const 'Sub' $P489 = "35_1282323995.38516" 
+    .const 'Sub' $P489 = "35_1284728470.10282" 
     newclosure $P495, $P489
 .annotate 'line', 6
     .return ($P495)
@@ -7541,7 +7622,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "" :load :init :subid("post38") :outer("11_1282323995.38516")
+.sub "" :load :init :subid("post38") :outer("11_1284728470.10282")
 .annotate 'line', 6
     get_hll_global $P14, ["HLL";"Compiler"], "_block13" 
     .local pmc block
@@ -7554,7 +7635,7 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "value_type"  :subid("12_1282323995.38516") :outer("11_1282323995.38516")
+.sub "value_type"  :subid("12_1284728470.10282") :outer("11_1284728470.10282")
     .param pmc param_18
 .annotate 'line', 14
     new $P17, 'ExceptionHandler'
@@ -7599,15 +7680,15 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "get_exports"  :subid("13_1282323995.38516") :method :outer("11_1282323995.38516")
+.sub "get_exports"  :subid("13_1284728470.10282") :method :outer("11_1284728470.10282")
     .param pmc param_36
     .param pmc param_39 :slurpy
     .param pmc param_37 :optional :named("tagset")
     .param int has_param_37 :opt_flag
 .annotate 'line', 20
-    .const 'Sub' $P105 = "15_1282323995.38516" 
+    .const 'Sub' $P105 = "15_1284728470.10282" 
     capture_lex $P105
-    .const 'Sub' $P84 = "14_1282323995.38516" 
+    .const 'Sub' $P84 = "14_1284728470.10282" 
     capture_lex $P84
     new $P35, 'ExceptionHandler'
     set_addr $P35, control_34
@@ -7713,7 +7794,7 @@
     unless $P100, loop117_done
     shift $P103, $P100
   loop117_redo:
-    .const 'Sub' $P105 = "15_1282323995.38516" 
+    .const 'Sub' $P105 = "15_1284728470.10282" 
     capture_lex $P105
     $P105($P103)
   loop117_next:
@@ -7743,7 +7824,7 @@
     unless $P79, loop97_done
     shift $P82, $P79
   loop97_redo:
-    .const 'Sub' $P84 = "14_1282323995.38516" 
+    .const 'Sub' $P84 = "14_1284728470.10282" 
     capture_lex $P84
     $P84($P82)
   loop97_next:
@@ -7771,7 +7852,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block104"  :anon :subid("15_1282323995.38516") :outer("13_1282323995.38516")
+.sub "_block104"  :anon :subid("15_1284728470.10282") :outer("13_1284728470.10282")
     .param pmc param_107
 .annotate 'line', 40
     new $P106, "Undef"
@@ -7803,7 +7884,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block83"  :anon :subid("14_1282323995.38516") :outer("13_1282323995.38516")
+.sub "_block83"  :anon :subid("14_1284728470.10282") :outer("13_1284728470.10282")
     .param pmc param_86
 .annotate 'line', 34
     new $P85, "Undef"
@@ -7843,7 +7924,7 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "get_module"  :subid("16_1282323995.38516") :method :outer("11_1282323995.38516")
+.sub "get_module"  :subid("16_1284728470.10282") :method :outer("11_1284728470.10282")
     .param pmc param_125
 .annotate 'line', 47
     new $P124, 'ExceptionHandler'
@@ -7884,7 +7965,7 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "language"  :subid("17_1282323995.38516") :method :outer("11_1282323995.38516")
+.sub "language"  :subid("17_1284728470.10282") :method :outer("11_1284728470.10282")
     .param pmc param_141 :optional
     .param int has_param_141 :opt_flag
 .annotate 'line', 53
@@ -7929,10 +8010,10 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "load_module"  :subid("18_1282323995.38516") :method :outer("11_1282323995.38516")
+.sub "load_module"  :subid("18_1284728470.10282") :method :outer("11_1284728470.10282")
     .param pmc param_156
 .annotate 'line', 61
-    .const 'Sub' $P166 = "19_1282323995.38516" 
+    .const 'Sub' $P166 = "19_1284728470.10282" 
     capture_lex $P166
     new $P155, 'ExceptionHandler'
     set_addr $P155, control_154
@@ -7959,7 +8040,7 @@
     assign $P164, 0
     store_lex "$loaded", $P164
 .annotate 'line', 64
-    .const 'Sub' $P166 = "19_1282323995.38516" 
+    .const 'Sub' $P166 = "19_1284728470.10282" 
     capture_lex $P166
     $P166()
 .annotate 'line', 65
@@ -7989,7 +8070,7 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "_block165"  :anon :subid("19_1282323995.38516") :outer("18_1282323995.38516")
+.sub "_block165"  :anon :subid("19_1284728470.10282") :outer("18_1284728470.10282")
 .annotate 'line', 64
     new $P173, 'ExceptionHandler'
     set_addr $P173, control_172
@@ -8023,11 +8104,11 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "import"  :subid("20_1282323995.38516") :method :outer("11_1282323995.38516")
+.sub "import"  :subid("20_1284728470.10282") :method :outer("11_1284728470.10282")
     .param pmc param_191
     .param pmc param_192
 .annotate 'line', 69
-    .const 'Sub' $P198 = "21_1282323995.38516" 
+    .const 'Sub' $P198 = "21_1284728470.10282" 
     capture_lex $P198
     new $P190, 'ExceptionHandler'
     set_addr $P190, control_189
@@ -8049,7 +8130,7 @@
     unless $P193, loop279_done
     shift $P196, $P193
   loop279_redo:
-    .const 'Sub' $P198 = "21_1282323995.38516" 
+    .const 'Sub' $P198 = "21_1284728470.10282" 
     capture_lex $P198
     $P198($P196)
   loop279_next:
@@ -8075,14 +8156,14 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "_block197"  :anon :subid("21_1282323995.38516") :outer("20_1282323995.38516")
+.sub "_block197"  :anon :subid("21_1284728470.10282") :outer("20_1284728470.10282")
     .param pmc param_201
 .annotate 'line', 70
-    .const 'Sub' $P268 = "24_1282323995.38516" 
+    .const 'Sub' $P268 = "24_1284728470.10282" 
     capture_lex $P268
-    .const 'Sub' $P248 = "23_1282323995.38516" 
+    .const 'Sub' $P248 = "23_1284728470.10282" 
     capture_lex $P248
-    .const 'Sub' $P219 = "22_1282323995.38516" 
+    .const 'Sub' $P219 = "22_1284728470.10282" 
     capture_lex $P219
 .annotate 'line', 71
     new $P199, "Undef"
@@ -8130,7 +8211,7 @@
     unless $P263, loop276_done
     shift $P266, $P263
   loop276_redo:
-    .const 'Sub' $P268 = "24_1282323995.38516" 
+    .const 'Sub' $P268 = "24_1284728470.10282" 
     capture_lex $P268
     $P268($P266)
   loop276_next:
@@ -8162,7 +8243,7 @@
     unless $P243, loop260_done
     shift $P246, $P243
   loop260_redo:
-    .const 'Sub' $P248 = "23_1282323995.38516" 
+    .const 'Sub' $P248 = "23_1284728470.10282" 
     capture_lex $P248
     $P248($P246)
   loop260_next:
@@ -8196,7 +8277,7 @@
     unless $P214, loop232_done
     shift $P217, $P214
   loop232_redo:
-    .const 'Sub' $P219 = "22_1282323995.38516" 
+    .const 'Sub' $P219 = "22_1284728470.10282" 
     capture_lex $P219
     $P219($P217)
   loop232_next:
@@ -8219,7 +8300,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block267"  :anon :subid("24_1282323995.38516") :outer("21_1282323995.38516")
+.sub "_block267"  :anon :subid("24_1284728470.10282") :outer("21_1284728470.10282")
     .param pmc param_269
 .annotate 'line', 80
     .lex "$_", param_269
@@ -8239,7 +8320,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block247"  :anon :subid("23_1282323995.38516") :outer("21_1282323995.38516")
+.sub "_block247"  :anon :subid("23_1284728470.10282") :outer("21_1284728470.10282")
     .param pmc param_249
 .annotate 'line', 77
     .lex "$_", param_249
@@ -8259,7 +8340,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block218"  :anon :subid("22_1282323995.38516") :outer("21_1282323995.38516")
+.sub "_block218"  :anon :subid("22_1284728470.10282") :outer("21_1284728470.10282")
     .param pmc param_220
 .annotate 'line', 74
     .lex "$_", param_220
@@ -8281,7 +8362,7 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "autoprint"  :subid("25_1282323995.38516") :method :outer("11_1282323995.38516")
+.sub "autoprint"  :subid("25_1284728470.10282") :method :outer("11_1284728470.10282")
     .param pmc param_286
 .annotate 'line', 85
     new $P285, 'ExceptionHandler'
@@ -8325,10 +8406,10 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "interactive"  :subid("26_1282323995.38516") :method :outer("11_1282323995.38516")
+.sub "interactive"  :subid("26_1284728470.10282") :method :outer("11_1284728470.10282")
     .param pmc param_301 :slurpy :named
 .annotate 'line', 90
-    .const 'Sub' $P333 = "27_1282323995.38516" 
+    .const 'Sub' $P333 = "27_1284728470.10282" 
     capture_lex $P333
     new $P300, 'ExceptionHandler'
     set_addr $P300, control_299
@@ -8415,7 +8496,7 @@
     assign $P331, 1
     unless $P331, loop443_done
   loop443_redo:
-    .const 'Sub' $P333 = "27_1282323995.38516" 
+    .const 'Sub' $P333 = "27_1284728470.10282" 
     capture_lex $P333
     $P333()
   loop443_next:
@@ -8440,9 +8521,9 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "_block332"  :anon :subid("27_1282323995.38516") :outer("26_1282323995.38516")
+.sub "_block332"  :anon :subid("27_1284728470.10282") :outer("26_1284728470.10282")
 .annotate 'line', 102
-    .const 'Sub' $P365 = "28_1282323995.38516" 
+    .const 'Sub' $P365 = "28_1284728470.10282" 
     capture_lex $P365
 .annotate 'line', 105
     new $P334, "Undef"
@@ -8510,7 +8591,7 @@
     set $P361, $P363
     goto if_362_end
   if_362:
-    .const 'Sub' $P365 = "28_1282323995.38516" 
+    .const 'Sub' $P365 = "28_1284728470.10282" 
     capture_lex $P365
     $P442 = $P365()
     set $P361, $P442
@@ -8522,11 +8603,11 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "_block364"  :anon :subid("28_1282323995.38516") :outer("27_1282323995.38516")
+.sub "_block364"  :anon :subid("28_1284728470.10282") :outer("27_1284728470.10282")
 .annotate 'line', 115
-    .const 'Sub' $P398 = "31_1282323995.38516" 
+    .const 'Sub' $P398 = "31_1284728470.10282" 
     capture_lex $P398
-    .const 'Sub' $P371 = "29_1282323995.38516" 
+    .const 'Sub' $P371 = "29_1284728470.10282" 
     capture_lex $P371
 .annotate 'line', 117
     new $P366, "Undef"
@@ -8537,7 +8618,7 @@
     store_lex "$code", $P368
     find_lex $P369, "$output"
 .annotate 'line', 118
-    .const 'Sub' $P371 = "29_1282323995.38516" 
+    .const 'Sub' $P371 = "29_1284728470.10282" 
     capture_lex $P371
     $P371()
 .annotate 'line', 125
@@ -8550,7 +8631,7 @@
   vivify_67:
     defined $I396, $P395
     unless $I396, if_394_end
-    .const 'Sub' $P398 = "31_1282323995.38516" 
+    .const 'Sub' $P398 = "31_1284728470.10282" 
     capture_lex $P398
     $P398()
   if_394_end:
@@ -8604,9 +8685,9 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "_block370"  :anon :subid("29_1282323995.38516") :outer("28_1282323995.38516")
+.sub "_block370"  :anon :subid("29_1284728470.10282") :outer("28_1284728470.10282")
 .annotate 'line', 118
-    .const 'Sub' $P383 = "30_1282323995.38516" 
+    .const 'Sub' $P383 = "30_1284728470.10282" 
     capture_lex $P383
     new $P379, 'ExceptionHandler'
     set_addr $P379, control_378
@@ -8626,7 +8707,7 @@
 .annotate 'line', 120
     .local pmc exception 
     .get_results (exception) 
-    .const 'Sub' $P383 = "30_1282323995.38516" 
+    .const 'Sub' $P383 = "30_1284728470.10282" 
     newclosure $P391, $P383
     $P391(exception)
     new $P392, 'Integer'
@@ -8646,7 +8727,7 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "_block382"  :anon :subid("30_1282323995.38516") :outer("29_1282323995.38516")
+.sub "_block382"  :anon :subid("30_1284728470.10282") :outer("29_1284728470.10282")
     .param pmc param_384
 .annotate 'line', 120
     .lex "$_", param_384
@@ -8669,9 +8750,9 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "_block397"  :anon :subid("31_1282323995.38516") :outer("28_1282323995.38516")
+.sub "_block397"  :anon :subid("31_1284728470.10282") :outer("28_1284728470.10282")
 .annotate 'line', 125
-    .const 'Sub' $P409 = "32_1282323995.38516" 
+    .const 'Sub' $P409 = "32_1284728470.10282" 
     capture_lex $P409
 .annotate 'line', 126
     get_global $P399, "$interactive_ctx"
@@ -8708,7 +8789,7 @@
     unless $P403, loop416_done
     shift $P407, $P403
   loop416_redo:
-    .const 'Sub' $P409 = "32_1282323995.38516" 
+    .const 'Sub' $P409 = "32_1284728470.10282" 
     capture_lex $P409
     $P409($P407)
   loop416_next:
@@ -8731,7 +8812,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block408"  :anon :subid("32_1282323995.38516") :outer("31_1282323995.38516")
+.sub "_block408"  :anon :subid("32_1284728470.10282") :outer("31_1284728470.10282")
     .param pmc param_410
 .annotate 'line', 128
     .lex "$_", param_410
@@ -8753,12 +8834,12 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "eval"  :subid("33_1282323995.38516") :method :outer("11_1282323995.38516")
+.sub "eval"  :subid("33_1284728470.10282") :method :outer("11_1284728470.10282")
     .param pmc param_450
     .param pmc param_451 :slurpy
     .param pmc param_452 :slurpy :named
 .annotate 'line', 146
-    .const 'Sub' $P471 = "34_1282323995.38516" 
+    .const 'Sub' $P471 = "34_1284728470.10282" 
     capture_lex $P471
     new $P449, 'ExceptionHandler'
     set_addr $P449, control_448
@@ -8805,7 +8886,7 @@
     set $P460, $I469
   if_461_end:
     unless $P460, if_459_end
-    .const 'Sub' $P471 = "34_1282323995.38516" 
+    .const 'Sub' $P471 = "34_1284728470.10282" 
     capture_lex $P471
     $P471()
   if_459_end:
@@ -8822,7 +8903,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block470"  :anon :subid("34_1282323995.38516") :outer("33_1282323995.38516")
+.sub "_block470"  :anon :subid("34_1284728470.10282") :outer("33_1284728470.10282")
 .annotate 'line', 152
     new $P472, "Undef"
     .lex "$outer_ctx", $P472
@@ -8876,7 +8957,7 @@
 
 .namespace ["HLL";"Compiler"]
 .include "except_types.pasm"
-.sub "ctxsave"  :subid("35_1282323995.38516") :method :outer("11_1282323995.38516")
+.sub "ctxsave"  :subid("35_1284728470.10282") :method :outer("11_1284728470.10282")
 .annotate 'line', 165
     new $P491, 'ExceptionHandler'
     set_addr $P491, control_490
@@ -8904,9 +8985,9 @@
 
 
 .namespace []
-.sub "_block498" :load :anon :subid("36_1282323995.38516")
+.sub "_block498" :load :anon :subid("36_1284728470.10282")
 .annotate 'line', 1
-    .const 'Sub' $P500 = "10_1282323995.38516" 
+    .const 'Sub' $P500 = "10_1284728470.10282" 
     $P501 = $P500()
     .return ($P501)
 .end

Modified: branches/html_cleanup/ext/nqp-rx/src/stage0/NQP-s0.pir
==============================================================================
--- branches/html_cleanup/ext/nqp-rx/src/stage0/NQP-s0.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/ext/nqp-rx/src/stage0/NQP-s0.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -15,7 +15,7 @@
 ### .include 'gen/nqp-grammar.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1282324002.40722")
+.sub "_block11"  :anon :subid("10_1284728478.15265")
 .annotate 'line', 0
     get_hll_global $P14, ["NQP";"Grammar"], "_block13" 
     capture_lex $P14
@@ -29,341 +29,345 @@
 .annotate 'line', 4
     get_hll_global $P14, ["NQP";"Grammar"], "_block13" 
     capture_lex $P14
-    $P1423 = $P14()
+    $P1452 = $P14()
 .annotate 'line', 1
-    .return ($P1423)
-    .const 'Sub' $P1425 = "371_1282324002.40722" 
-    .return ($P1425)
+    .return ($P1452)
+    .const 'Sub' $P1454 = "377_1284728478.15265" 
+    .return ($P1454)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post372") :outer("10_1282324002.40722")
+.sub "" :load :init :subid("post378") :outer("10_1284728478.15265")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1282324002.40722" 
+    .const 'Sub' $P12 = "10_1284728478.15265" 
     .local pmc block
     set block, $P12
-    $P1428 = get_root_global ["parrot"], "P6metaclass"
-    $P1428."new_class"("NQP::Grammar", "HLL::Grammar" :named("parent"))
+    $P1457 = get_root_global ["parrot"], "P6metaclass"
+    $P1457."new_class"("NQP::Grammar", "HLL::Grammar" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block13"  :subid("11_1282324002.40722") :outer("10_1282324002.40722")
+.sub "_block13"  :subid("11_1284728478.15265") :outer("10_1284728478.15265")
 .annotate 'line', 4
-    get_hll_global $P1340, ["NQP";"Regex"], "_block1339" 
-    capture_lex $P1340
-    .const 'Sub' $P1326 = "348_1282324002.40722" 
-    capture_lex $P1326
-    .const 'Sub' $P1320 = "346_1282324002.40722" 
-    capture_lex $P1320
-    .const 'Sub' $P1314 = "344_1282324002.40722" 
-    capture_lex $P1314
-    .const 'Sub' $P1308 = "342_1282324002.40722" 
-    capture_lex $P1308
-    .const 'Sub' $P1302 = "340_1282324002.40722" 
-    capture_lex $P1302
-    .const 'Sub' $P1296 = "338_1282324002.40722" 
-    capture_lex $P1296
-    .const 'Sub' $P1289 = "336_1282324002.40722" 
-    capture_lex $P1289
-    .const 'Sub' $P1282 = "334_1282324002.40722" 
-    capture_lex $P1282
-    .const 'Sub' $P1275 = "332_1282324002.40722" 
-    capture_lex $P1275
-    .const 'Sub' $P1268 = "330_1282324002.40722" 
-    capture_lex $P1268
-    .const 'Sub' $P1262 = "328_1282324002.40722" 
-    capture_lex $P1262
-    .const 'Sub' $P1255 = "326_1282324002.40722" 
-    capture_lex $P1255
-    .const 'Sub' $P1248 = "324_1282324002.40722" 
-    capture_lex $P1248
-    .const 'Sub' $P1241 = "322_1282324002.40722" 
-    capture_lex $P1241
-    .const 'Sub' $P1234 = "320_1282324002.40722" 
-    capture_lex $P1234
-    .const 'Sub' $P1227 = "318_1282324002.40722" 
-    capture_lex $P1227
-    .const 'Sub' $P1220 = "316_1282324002.40722" 
-    capture_lex $P1220
-    .const 'Sub' $P1213 = "314_1282324002.40722" 
-    capture_lex $P1213
-    .const 'Sub' $P1206 = "312_1282324002.40722" 
-    capture_lex $P1206
-    .const 'Sub' $P1199 = "310_1282324002.40722" 
-    capture_lex $P1199
-    .const 'Sub' $P1192 = "308_1282324002.40722" 
-    capture_lex $P1192
-    .const 'Sub' $P1185 = "306_1282324002.40722" 
-    capture_lex $P1185
-    .const 'Sub' $P1178 = "304_1282324002.40722" 
-    capture_lex $P1178
-    .const 'Sub' $P1171 = "302_1282324002.40722" 
-    capture_lex $P1171
-    .const 'Sub' $P1164 = "300_1282324002.40722" 
-    capture_lex $P1164
-    .const 'Sub' $P1157 = "298_1282324002.40722" 
-    capture_lex $P1157
-    .const 'Sub' $P1150 = "296_1282324002.40722" 
-    capture_lex $P1150
-    .const 'Sub' $P1143 = "294_1282324002.40722" 
-    capture_lex $P1143
-    .const 'Sub' $P1136 = "292_1282324002.40722" 
-    capture_lex $P1136
-    .const 'Sub' $P1129 = "290_1282324002.40722" 
-    capture_lex $P1129
-    .const 'Sub' $P1122 = "288_1282324002.40722" 
-    capture_lex $P1122
-    .const 'Sub' $P1115 = "286_1282324002.40722" 
-    capture_lex $P1115
-    .const 'Sub' $P1108 = "284_1282324002.40722" 
-    capture_lex $P1108
-    .const 'Sub' $P1101 = "282_1282324002.40722" 
-    capture_lex $P1101
-    .const 'Sub' $P1094 = "280_1282324002.40722" 
-    capture_lex $P1094
-    .const 'Sub' $P1087 = "278_1282324002.40722" 
-    capture_lex $P1087
-    .const 'Sub' $P1080 = "276_1282324002.40722" 
-    capture_lex $P1080
-    .const 'Sub' $P1073 = "274_1282324002.40722" 
-    capture_lex $P1073
-    .const 'Sub' $P1066 = "272_1282324002.40722" 
-    capture_lex $P1066
-    .const 'Sub' $P1059 = "270_1282324002.40722" 
-    capture_lex $P1059
-    .const 'Sub' $P1053 = "268_1282324002.40722" 
-    capture_lex $P1053
-    .const 'Sub' $P1046 = "266_1282324002.40722" 
-    capture_lex $P1046
-    .const 'Sub' $P1039 = "264_1282324002.40722" 
-    capture_lex $P1039
-    .const 'Sub' $P1032 = "262_1282324002.40722" 
-    capture_lex $P1032
-    .const 'Sub' $P1025 = "260_1282324002.40722" 
-    capture_lex $P1025
-    .const 'Sub' $P1018 = "258_1282324002.40722" 
-    capture_lex $P1018
-    .const 'Sub' $P1011 = "256_1282324002.40722" 
-    capture_lex $P1011
-    .const 'Sub' $P1004 = "254_1282324002.40722" 
+    get_hll_global $P1369, ["NQP";"Regex"], "_block1368" 
+    capture_lex $P1369
+    .const 'Sub' $P1355 = "354_1284728478.15265" 
+    capture_lex $P1355
+    .const 'Sub' $P1349 = "352_1284728478.15265" 
+    capture_lex $P1349
+    .const 'Sub' $P1343 = "350_1284728478.15265" 
+    capture_lex $P1343
+    .const 'Sub' $P1337 = "348_1284728478.15265" 
+    capture_lex $P1337
+    .const 'Sub' $P1331 = "346_1284728478.15265" 
+    capture_lex $P1331
+    .const 'Sub' $P1325 = "344_1284728478.15265" 
+    capture_lex $P1325
+    .const 'Sub' $P1318 = "342_1284728478.15265" 
+    capture_lex $P1318
+    .const 'Sub' $P1311 = "340_1284728478.15265" 
+    capture_lex $P1311
+    .const 'Sub' $P1304 = "338_1284728478.15265" 
+    capture_lex $P1304
+    .const 'Sub' $P1297 = "336_1284728478.15265" 
+    capture_lex $P1297
+    .const 'Sub' $P1291 = "334_1284728478.15265" 
+    capture_lex $P1291
+    .const 'Sub' $P1284 = "332_1284728478.15265" 
+    capture_lex $P1284
+    .const 'Sub' $P1277 = "330_1284728478.15265" 
+    capture_lex $P1277
+    .const 'Sub' $P1270 = "328_1284728478.15265" 
+    capture_lex $P1270
+    .const 'Sub' $P1263 = "326_1284728478.15265" 
+    capture_lex $P1263
+    .const 'Sub' $P1256 = "324_1284728478.15265" 
+    capture_lex $P1256
+    .const 'Sub' $P1249 = "322_1284728478.15265" 
+    capture_lex $P1249
+    .const 'Sub' $P1242 = "320_1284728478.15265" 
+    capture_lex $P1242
+    .const 'Sub' $P1235 = "318_1284728478.15265" 
+    capture_lex $P1235
+    .const 'Sub' $P1228 = "316_1284728478.15265" 
+    capture_lex $P1228
+    .const 'Sub' $P1221 = "314_1284728478.15265" 
+    capture_lex $P1221
+    .const 'Sub' $P1214 = "312_1284728478.15265" 
+    capture_lex $P1214
+    .const 'Sub' $P1207 = "310_1284728478.15265" 
+    capture_lex $P1207
+    .const 'Sub' $P1200 = "308_1284728478.15265" 
+    capture_lex $P1200
+    .const 'Sub' $P1193 = "306_1284728478.15265" 
+    capture_lex $P1193
+    .const 'Sub' $P1186 = "304_1284728478.15265" 
+    capture_lex $P1186
+    .const 'Sub' $P1179 = "302_1284728478.15265" 
+    capture_lex $P1179
+    .const 'Sub' $P1172 = "300_1284728478.15265" 
+    capture_lex $P1172
+    .const 'Sub' $P1165 = "298_1284728478.15265" 
+    capture_lex $P1165
+    .const 'Sub' $P1158 = "296_1284728478.15265" 
+    capture_lex $P1158
+    .const 'Sub' $P1151 = "294_1284728478.15265" 
+    capture_lex $P1151
+    .const 'Sub' $P1144 = "292_1284728478.15265" 
+    capture_lex $P1144
+    .const 'Sub' $P1137 = "290_1284728478.15265" 
+    capture_lex $P1137
+    .const 'Sub' $P1130 = "288_1284728478.15265" 
+    capture_lex $P1130
+    .const 'Sub' $P1123 = "286_1284728478.15265" 
+    capture_lex $P1123
+    .const 'Sub' $P1116 = "284_1284728478.15265" 
+    capture_lex $P1116
+    .const 'Sub' $P1109 = "282_1284728478.15265" 
+    capture_lex $P1109
+    .const 'Sub' $P1102 = "280_1284728478.15265" 
+    capture_lex $P1102
+    .const 'Sub' $P1095 = "278_1284728478.15265" 
+    capture_lex $P1095
+    .const 'Sub' $P1088 = "276_1284728478.15265" 
+    capture_lex $P1088
+    .const 'Sub' $P1082 = "274_1284728478.15265" 
+    capture_lex $P1082
+    .const 'Sub' $P1075 = "272_1284728478.15265" 
+    capture_lex $P1075
+    .const 'Sub' $P1068 = "270_1284728478.15265" 
+    capture_lex $P1068
+    .const 'Sub' $P1061 = "268_1284728478.15265" 
+    capture_lex $P1061
+    .const 'Sub' $P1054 = "266_1284728478.15265" 
+    capture_lex $P1054
+    .const 'Sub' $P1047 = "264_1284728478.15265" 
+    capture_lex $P1047
+    .const 'Sub' $P1040 = "262_1284728478.15265" 
+    capture_lex $P1040
+    .const 'Sub' $P1033 = "260_1284728478.15265" 
+    capture_lex $P1033
+    .const 'Sub' $P1027 = "258_1284728478.15265" 
+    capture_lex $P1027
+    .const 'Sub' $P1021 = "256_1284728478.15265" 
+    capture_lex $P1021
+    .const 'Sub' $P1016 = "254_1284728478.15265" 
+    capture_lex $P1016
+    .const 'Sub' $P1010 = "252_1284728478.15265" 
+    capture_lex $P1010
+    .const 'Sub' $P1004 = "250_1284728478.15265" 
     capture_lex $P1004
-    .const 'Sub' $P998 = "252_1282324002.40722" 
-    capture_lex $P998
-    .const 'Sub' $P992 = "250_1282324002.40722" 
-    capture_lex $P992
-    .const 'Sub' $P987 = "248_1282324002.40722" 
-    capture_lex $P987
-    .const 'Sub' $P981 = "246_1282324002.40722" 
-    capture_lex $P981
-    .const 'Sub' $P975 = "244_1282324002.40722" 
-    capture_lex $P975
-    .const 'Sub' $P970 = "242_1282324002.40722" 
-    capture_lex $P970
-    .const 'Sub' $P965 = "240_1282324002.40722" 
-    capture_lex $P965
-    .const 'Sub' $P957 = "238_1282324002.40722" 
-    capture_lex $P957
-    .const 'Sub' $P948 = "236_1282324002.40722" 
-    capture_lex $P948
-    .const 'Sub' $P943 = "234_1282324002.40722" 
-    capture_lex $P943
-    .const 'Sub' $P938 = "232_1282324002.40722" 
-    capture_lex $P938
-    .const 'Sub' $P933 = "230_1282324002.40722" 
-    capture_lex $P933
-    .const 'Sub' $P925 = "228_1282324002.40722" 
+    .const 'Sub' $P999 = "248_1284728478.15265" 
+    capture_lex $P999
+    .const 'Sub' $P994 = "246_1284728478.15265" 
+    capture_lex $P994
+    .const 'Sub' $P986 = "244_1284728478.15265" 
+    capture_lex $P986
+    .const 'Sub' $P977 = "242_1284728478.15265" 
+    capture_lex $P977
+    .const 'Sub' $P972 = "240_1284728478.15265" 
+    capture_lex $P972
+    .const 'Sub' $P967 = "238_1284728478.15265" 
+    capture_lex $P967
+    .const 'Sub' $P962 = "236_1284728478.15265" 
+    capture_lex $P962
+    .const 'Sub' $P954 = "234_1284728478.15265" 
+    capture_lex $P954
+    .const 'Sub' $P946 = "232_1284728478.15265" 
+    capture_lex $P946
+    .const 'Sub' $P941 = "230_1284728478.15265" 
+    capture_lex $P941
+    .const 'Sub' $P936 = "228_1284728478.15265" 
+    capture_lex $P936
+    .const 'Sub' $P931 = "226_1284728478.15265" 
+    capture_lex $P931
+    .const 'Sub' $P925 = "224_1284728478.15265" 
     capture_lex $P925
-    .const 'Sub' $P917 = "226_1282324002.40722" 
-    capture_lex $P917
-    .const 'Sub' $P912 = "224_1282324002.40722" 
-    capture_lex $P912
-    .const 'Sub' $P907 = "222_1282324002.40722" 
+    .const 'Sub' $P919 = "222_1284728478.15265" 
+    capture_lex $P919
+    .const 'Sub' $P913 = "220_1284728478.15265" 
+    capture_lex $P913
+    .const 'Sub' $P907 = "218_1284728478.15265" 
     capture_lex $P907
-    .const 'Sub' $P902 = "220_1282324002.40722" 
-    capture_lex $P902
-    .const 'Sub' $P896 = "218_1282324002.40722" 
+    .const 'Sub' $P901 = "216_1284728478.15265" 
+    capture_lex $P901
+    .const 'Sub' $P896 = "214_1284728478.15265" 
     capture_lex $P896
-    .const 'Sub' $P890 = "216_1282324002.40722" 
-    capture_lex $P890
-    .const 'Sub' $P884 = "214_1282324002.40722" 
-    capture_lex $P884
-    .const 'Sub' $P878 = "212_1282324002.40722" 
-    capture_lex $P878
-    .const 'Sub' $P872 = "210_1282324002.40722" 
-    capture_lex $P872
-    .const 'Sub' $P867 = "208_1282324002.40722" 
-    capture_lex $P867
-    .const 'Sub' $P862 = "206_1282324002.40722" 
-    capture_lex $P862
-    .const 'Sub' $P850 = "202_1282324002.40722" 
-    capture_lex $P850
-    .const 'Sub' $P842 = "200_1282324002.40722" 
-    capture_lex $P842
-    .const 'Sub' $P836 = "198_1282324002.40722" 
+    .const 'Sub' $P891 = "212_1284728478.15265" 
+    capture_lex $P891
+    .const 'Sub' $P879 = "208_1284728478.15265" 
+    capture_lex $P879
+    .const 'Sub' $P871 = "206_1284728478.15265" 
+    capture_lex $P871
+    .const 'Sub' $P865 = "204_1284728478.15265" 
+    capture_lex $P865
+    .const 'Sub' $P858 = "202_1284728478.15265" 
+    capture_lex $P858
+    .const 'Sub' $P852 = "200_1284728478.15265" 
+    capture_lex $P852
+    .const 'Sub' $P844 = "198_1284728478.15265" 
+    capture_lex $P844
+    .const 'Sub' $P836 = "196_1284728478.15265" 
     capture_lex $P836
-    .const 'Sub' $P829 = "196_1282324002.40722" 
-    capture_lex $P829
-    .const 'Sub' $P823 = "194_1282324002.40722" 
-    capture_lex $P823
-    .const 'Sub' $P815 = "192_1282324002.40722" 
-    capture_lex $P815
-    .const 'Sub' $P807 = "190_1282324002.40722" 
-    capture_lex $P807
-    .const 'Sub' $P801 = "188_1282324002.40722" 
-    capture_lex $P801
-    .const 'Sub' $P795 = "186_1282324002.40722" 
-    capture_lex $P795
-    .const 'Sub' $P781 = "182_1282324002.40722" 
-    capture_lex $P781
-    .const 'Sub' $P744 = "180_1282324002.40722" 
-    capture_lex $P744
-    .const 'Sub' $P735 = "178_1282324002.40722" 
+    .const 'Sub' $P830 = "194_1284728478.15265" 
+    capture_lex $P830
+    .const 'Sub' $P824 = "192_1284728478.15265" 
+    capture_lex $P824
+    .const 'Sub' $P810 = "188_1284728478.15265" 
+    capture_lex $P810
+    .const 'Sub' $P773 = "186_1284728478.15265" 
+    capture_lex $P773
+    .const 'Sub' $P762 = "184_1284728478.15265" 
+    capture_lex $P762
+    .const 'Sub' $P750 = "180_1284728478.15265" 
+    capture_lex $P750
+    .const 'Sub' $P741 = "178_1284728478.15265" 
+    capture_lex $P741
+    .const 'Sub' $P735 = "176_1284728478.15265" 
     capture_lex $P735
-    .const 'Sub' $P729 = "176_1282324002.40722" 
-    capture_lex $P729
-    .const 'Sub' $P719 = "174_1282324002.40722" 
-    capture_lex $P719
-    .const 'Sub' $P706 = "172_1282324002.40722" 
-    capture_lex $P706
-    .const 'Sub' $P699 = "170_1282324002.40722" 
-    capture_lex $P699
-    .const 'Sub' $P691 = "168_1282324002.40722" 
-    capture_lex $P691
-    .const 'Sub' $P681 = "166_1282324002.40722" 
-    capture_lex $P681
-    .const 'Sub' $P657 = "162_1282324002.40722" 
-    capture_lex $P657
-    .const 'Sub' $P634 = "160_1282324002.40722" 
+    .const 'Sub' $P725 = "174_1284728478.15265" 
+    capture_lex $P725
+    .const 'Sub' $P712 = "172_1284728478.15265" 
+    capture_lex $P712
+    .const 'Sub' $P705 = "170_1284728478.15265" 
+    capture_lex $P705
+    .const 'Sub' $P697 = "168_1284728478.15265" 
+    capture_lex $P697
+    .const 'Sub' $P687 = "166_1284728478.15265" 
+    capture_lex $P687
+    .const 'Sub' $P660 = "162_1284728478.15265" 
+    capture_lex $P660
+    .const 'Sub' $P634 = "160_1284728478.15265" 
     capture_lex $P634
-    .const 'Sub' $P627 = "158_1282324002.40722" 
+    .const 'Sub' $P627 = "158_1284728478.15265" 
     capture_lex $P627
-    .const 'Sub' $P620 = "156_1282324002.40722" 
+    .const 'Sub' $P620 = "156_1284728478.15265" 
     capture_lex $P620
-    .const 'Sub' $P610 = "152_1282324002.40722" 
+    .const 'Sub' $P610 = "152_1284728478.15265" 
     capture_lex $P610
-    .const 'Sub' $P602 = "150_1282324002.40722" 
+    .const 'Sub' $P602 = "150_1284728478.15265" 
     capture_lex $P602
-    .const 'Sub' $P596 = "148_1282324002.40722" 
+    .const 'Sub' $P596 = "148_1284728478.15265" 
     capture_lex $P596
-    .const 'Sub' $P583 = "146_1282324002.40722" 
+    .const 'Sub' $P583 = "146_1284728478.15265" 
     capture_lex $P583
-    .const 'Sub' $P576 = "144_1282324002.40722" 
+    .const 'Sub' $P576 = "144_1284728478.15265" 
     capture_lex $P576
-    .const 'Sub' $P569 = "142_1282324002.40722" 
+    .const 'Sub' $P569 = "142_1284728478.15265" 
     capture_lex $P569
-    .const 'Sub' $P562 = "140_1282324002.40722" 
+    .const 'Sub' $P562 = "140_1284728478.15265" 
     capture_lex $P562
-    .const 'Sub' $P535 = "136_1282324002.40722" 
+    .const 'Sub' $P535 = "136_1284728478.15265" 
     capture_lex $P535
-    .const 'Sub' $P526 = "134_1282324002.40722" 
+    .const 'Sub' $P526 = "134_1284728478.15265" 
     capture_lex $P526
-    .const 'Sub' $P519 = "132_1282324002.40722" 
+    .const 'Sub' $P519 = "132_1284728478.15265" 
     capture_lex $P519
-    .const 'Sub' $P510 = "128_1282324002.40722" 
+    .const 'Sub' $P510 = "128_1284728478.15265" 
     capture_lex $P510
-    .const 'Sub' $P505 = "126_1282324002.40722" 
+    .const 'Sub' $P505 = "126_1284728478.15265" 
     capture_lex $P505
-    .const 'Sub' $P493 = "124_1282324002.40722" 
+    .const 'Sub' $P493 = "124_1284728478.15265" 
     capture_lex $P493
-    .const 'Sub' $P481 = "122_1282324002.40722" 
+    .const 'Sub' $P481 = "122_1284728478.15265" 
     capture_lex $P481
-    .const 'Sub' $P474 = "120_1282324002.40722" 
+    .const 'Sub' $P474 = "120_1284728478.15265" 
     capture_lex $P474
-    .const 'Sub' $P469 = "118_1282324002.40722" 
+    .const 'Sub' $P469 = "118_1284728478.15265" 
     capture_lex $P469
-    .const 'Sub' $P463 = "116_1282324002.40722" 
+    .const 'Sub' $P463 = "116_1284728478.15265" 
     capture_lex $P463
-    .const 'Sub' $P457 = "114_1282324002.40722" 
+    .const 'Sub' $P457 = "114_1284728478.15265" 
     capture_lex $P457
-    .const 'Sub' $P447 = "111_1282324002.40722" 
+    .const 'Sub' $P447 = "111_1284728478.15265" 
     capture_lex $P447
-    .const 'Sub' $P441 = "109_1282324002.40722" 
+    .const 'Sub' $P441 = "109_1284728478.15265" 
     capture_lex $P441
-    .const 'Sub' $P435 = "107_1282324002.40722" 
+    .const 'Sub' $P435 = "107_1284728478.15265" 
     capture_lex $P435
-    .const 'Sub' $P429 = "105_1282324002.40722" 
+    .const 'Sub' $P429 = "105_1284728478.15265" 
     capture_lex $P429
-    .const 'Sub' $P423 = "103_1282324002.40722" 
+    .const 'Sub' $P423 = "103_1284728478.15265" 
     capture_lex $P423
-    .const 'Sub' $P417 = "101_1282324002.40722" 
+    .const 'Sub' $P417 = "101_1284728478.15265" 
     capture_lex $P417
-    .const 'Sub' $P411 = "99_1282324002.40722" 
+    .const 'Sub' $P411 = "99_1284728478.15265" 
     capture_lex $P411
-    .const 'Sub' $P402 = "97_1282324002.40722" 
+    .const 'Sub' $P402 = "97_1284728478.15265" 
     capture_lex $P402
-    .const 'Sub' $P393 = "95_1282324002.40722" 
+    .const 'Sub' $P393 = "95_1284728478.15265" 
     capture_lex $P393
-    .const 'Sub' $P384 = "93_1282324002.40722" 
+    .const 'Sub' $P384 = "93_1284728478.15265" 
     capture_lex $P384
-    .const 'Sub' $P371 = "89_1282324002.40722" 
+    .const 'Sub' $P371 = "89_1284728478.15265" 
     capture_lex $P371
-    .const 'Sub' $P362 = "87_1282324002.40722" 
+    .const 'Sub' $P362 = "87_1284728478.15265" 
     capture_lex $P362
-    .const 'Sub' $P352 = "83_1282324002.40722" 
+    .const 'Sub' $P352 = "83_1284728478.15265" 
     capture_lex $P352
-    .const 'Sub' $P345 = "81_1282324002.40722" 
+    .const 'Sub' $P345 = "81_1284728478.15265" 
     capture_lex $P345
-    .const 'Sub' $P338 = "79_1282324002.40722" 
+    .const 'Sub' $P338 = "79_1284728478.15265" 
     capture_lex $P338
-    .const 'Sub' $P326 = "75_1282324002.40722" 
+    .const 'Sub' $P326 = "75_1284728478.15265" 
     capture_lex $P326
-    .const 'Sub' $P318 = "73_1282324002.40722" 
+    .const 'Sub' $P318 = "73_1284728478.15265" 
     capture_lex $P318
-    .const 'Sub' $P310 = "71_1282324002.40722" 
+    .const 'Sub' $P310 = "71_1284728478.15265" 
     capture_lex $P310
-    .const 'Sub' $P290 = "69_1282324002.40722" 
+    .const 'Sub' $P290 = "69_1284728478.15265" 
     capture_lex $P290
-    .const 'Sub' $P281 = "67_1282324002.40722" 
+    .const 'Sub' $P281 = "67_1284728478.15265" 
     capture_lex $P281
-    .const 'Sub' $P263 = "64_1282324002.40722" 
+    .const 'Sub' $P263 = "64_1284728478.15265" 
     capture_lex $P263
-    .const 'Sub' $P245 = "62_1282324002.40722" 
+    .const 'Sub' $P245 = "62_1284728478.15265" 
     capture_lex $P245
-    .const 'Sub' $P236 = "58_1282324002.40722" 
+    .const 'Sub' $P236 = "58_1284728478.15265" 
     capture_lex $P236
-    .const 'Sub' $P231 = "56_1282324002.40722" 
+    .const 'Sub' $P231 = "56_1284728478.15265" 
     capture_lex $P231
-    .const 'Sub' $P222 = "52_1282324002.40722" 
+    .const 'Sub' $P222 = "52_1284728478.15265" 
     capture_lex $P222
-    .const 'Sub' $P217 = "50_1282324002.40722" 
+    .const 'Sub' $P217 = "50_1284728478.15265" 
     capture_lex $P217
-    .const 'Sub' $P212 = "48_1282324002.40722" 
+    .const 'Sub' $P212 = "48_1284728478.15265" 
     capture_lex $P212
-    .const 'Sub' $P203 = "46_1282324002.40722" 
+    .const 'Sub' $P203 = "46_1284728478.15265" 
     capture_lex $P203
-    .const 'Sub' $P196 = "44_1282324002.40722" 
+    .const 'Sub' $P196 = "44_1284728478.15265" 
     capture_lex $P196
-    .const 'Sub' $P190 = "42_1282324002.40722" 
+    .const 'Sub' $P190 = "42_1284728478.15265" 
     capture_lex $P190
-    .const 'Sub' $P182 = "40_1282324002.40722" 
+    .const 'Sub' $P182 = "40_1284728478.15265" 
     capture_lex $P182
-    .const 'Sub' $P176 = "38_1282324002.40722" 
+    .const 'Sub' $P176 = "38_1284728478.15265" 
     capture_lex $P176
-    .const 'Sub' $P170 = "36_1282324002.40722" 
+    .const 'Sub' $P170 = "36_1284728478.15265" 
     capture_lex $P170
-    .const 'Sub' $P155 = "33_1282324002.40722" 
+    .const 'Sub' $P155 = "33_1284728478.15265" 
     capture_lex $P155
-    .const 'Sub' $P141 = "31_1282324002.40722" 
+    .const 'Sub' $P141 = "31_1284728478.15265" 
     capture_lex $P141
-    .const 'Sub' $P134 = "29_1282324002.40722" 
+    .const 'Sub' $P134 = "29_1284728478.15265" 
     capture_lex $P134
-    .const 'Sub' $P95 = "26_1282324002.40722" 
+    .const 'Sub' $P95 = "26_1284728478.15265" 
     capture_lex $P95
-    .const 'Sub' $P80 = "23_1282324002.40722" 
+    .const 'Sub' $P80 = "23_1284728478.15265" 
     capture_lex $P80
-    .const 'Sub' $P69 = "21_1282324002.40722" 
+    .const 'Sub' $P69 = "21_1284728478.15265" 
     capture_lex $P69
-    .const 'Sub' $P57 = "19_1282324002.40722" 
+    .const 'Sub' $P57 = "19_1284728478.15265" 
     capture_lex $P57
-    .const 'Sub' $P49 = "17_1282324002.40722" 
+    .const 'Sub' $P49 = "17_1284728478.15265" 
     capture_lex $P49
-    .const 'Sub' $P42 = "15_1282324002.40722" 
+    .const 'Sub' $P42 = "15_1284728478.15265" 
     capture_lex $P42
-    .const 'Sub' $P35 = "13_1282324002.40722" 
+    .const 'Sub' $P35 = "13_1284728478.15265" 
     capture_lex $P35
-    .const 'Sub' $P15 = "12_1282324002.40722" 
+    .const 'Sub' $P15 = "12_1284728478.15265" 
     capture_lex $P15
     $P0 = find_dynamic_lex "$*CTXSAVE"
     if null $P0 goto ctxsave_done
@@ -371,77 +375,77 @@
     unless $I0 goto ctxsave_done
     $P0."ctxsave"()
   ctxsave_done:
-.annotate 'line', 567
-    get_hll_global $P1340, ["NQP";"Regex"], "_block1339" 
-    capture_lex $P1340
-    $P1402 = $P1340()
+.annotate 'line', 574
+    get_hll_global $P1369, ["NQP";"Regex"], "_block1368" 
+    capture_lex $P1369
+    $P1431 = $P1369()
 .annotate 'line', 4
-    .return ($P1402)
-    .const 'Sub' $P1404 = "370_1282324002.40722" 
-    .return ($P1404)
+    .return ($P1431)
+    .const 'Sub' $P1433 = "376_1284728478.15265" 
+    .return ($P1433)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "" :load :init :subid("post373") :outer("11_1282324002.40722")
+.sub "" :load :init :subid("post379") :outer("11_1284728478.15265")
 .annotate 'line', 4
     get_hll_global $P14, ["NQP";"Grammar"], "_block13" 
     .local pmc block
     set block, $P14
-.annotate 'line', 448
-    get_hll_global $P1407, ["NQP"], "Grammar"
-    $P1407."O"(":prec<y=>, :assoc<unary>", "%methodop")
-.annotate 'line', 449
-    get_hll_global $P1408, ["NQP"], "Grammar"
-    $P1408."O"(":prec<x=>, :assoc<unary>", "%autoincrement")
-.annotate 'line', 450
-    get_hll_global $P1409, ["NQP"], "Grammar"
-    $P1409."O"(":prec<w=>, :assoc<left>", "%exponentiation")
-.annotate 'line', 451
-    get_hll_global $P1410, ["NQP"], "Grammar"
-    $P1410."O"(":prec<v=>, :assoc<unary>", "%symbolic_unary")
-.annotate 'line', 452
-    get_hll_global $P1411, ["NQP"], "Grammar"
-    $P1411."O"(":prec<u=>, :assoc<left>", "%multiplicative")
-.annotate 'line', 453
-    get_hll_global $P1412, ["NQP"], "Grammar"
-    $P1412."O"(":prec<t=>, :assoc<left>", "%additive")
-.annotate 'line', 454
-    get_hll_global $P1413, ["NQP"], "Grammar"
-    $P1413."O"(":prec<r=>, :assoc<left>", "%concatenation")
 .annotate 'line', 455
-    get_hll_global $P1414, ["NQP"], "Grammar"
-    $P1414."O"(":prec<m=>, :assoc<left>", "%relational")
+    get_hll_global $P1436, ["NQP"], "Grammar"
+    $P1436."O"(":prec<y=>, :assoc<unary>", "%methodop")
 .annotate 'line', 456
-    get_hll_global $P1415, ["NQP"], "Grammar"
-    $P1415."O"(":prec<l=>, :assoc<left>", "%tight_and")
+    get_hll_global $P1437, ["NQP"], "Grammar"
+    $P1437."O"(":prec<x=>, :assoc<unary>", "%autoincrement")
 .annotate 'line', 457
-    get_hll_global $P1416, ["NQP"], "Grammar"
-    $P1416."O"(":prec<k=>, :assoc<left>", "%tight_or")
+    get_hll_global $P1438, ["NQP"], "Grammar"
+    $P1438."O"(":prec<w=>, :assoc<left>", "%exponentiation")
 .annotate 'line', 458
-    get_hll_global $P1417, ["NQP"], "Grammar"
-    $P1417."O"(":prec<j=>, :assoc<right>", "%conditional")
+    get_hll_global $P1439, ["NQP"], "Grammar"
+    $P1439."O"(":prec<v=>, :assoc<unary>", "%symbolic_unary")
 .annotate 'line', 459
-    get_hll_global $P1418, ["NQP"], "Grammar"
-    $P1418."O"(":prec<i=>, :assoc<right>", "%assignment")
+    get_hll_global $P1440, ["NQP"], "Grammar"
+    $P1440."O"(":prec<u=>, :assoc<left>", "%multiplicative")
 .annotate 'line', 460
-    get_hll_global $P1419, ["NQP"], "Grammar"
-    $P1419."O"(":prec<g=>, :assoc<list>, :nextterm<nulltermish>", "%comma")
+    get_hll_global $P1441, ["NQP"], "Grammar"
+    $P1441."O"(":prec<t=>, :assoc<left>", "%additive")
 .annotate 'line', 461
-    get_hll_global $P1420, ["NQP"], "Grammar"
-    $P1420."O"(":prec<f=>, :assoc<list>", "%list_infix")
+    get_hll_global $P1442, ["NQP"], "Grammar"
+    $P1442."O"(":prec<r=>, :assoc<left>", "%concatenation")
 .annotate 'line', 462
-    get_hll_global $P1421, ["NQP"], "Grammar"
-    $P1421."O"(":prec<e=>, :assoc<unary>", "%list_prefix")
-.annotate 'line', 447
-    $P1422 = get_root_global ["parrot"], "P6metaclass"
-    $P1422."new_class"("NQP::Regex", "Regex::P6Regex::Grammar" :named("parent"))
+    get_hll_global $P1443, ["NQP"], "Grammar"
+    $P1443."O"(":prec<m=>, :assoc<left>", "%relational")
+.annotate 'line', 463
+    get_hll_global $P1444, ["NQP"], "Grammar"
+    $P1444."O"(":prec<l=>, :assoc<left>", "%tight_and")
+.annotate 'line', 464
+    get_hll_global $P1445, ["NQP"], "Grammar"
+    $P1445."O"(":prec<k=>, :assoc<left>", "%tight_or")
+.annotate 'line', 465
+    get_hll_global $P1446, ["NQP"], "Grammar"
+    $P1446."O"(":prec<j=>, :assoc<right>", "%conditional")
+.annotate 'line', 466
+    get_hll_global $P1447, ["NQP"], "Grammar"
+    $P1447."O"(":prec<i=>, :assoc<right>", "%assignment")
+.annotate 'line', 467
+    get_hll_global $P1448, ["NQP"], "Grammar"
+    $P1448."O"(":prec<g=>, :assoc<list>, :nextterm<nulltermish>", "%comma")
+.annotate 'line', 468
+    get_hll_global $P1449, ["NQP"], "Grammar"
+    $P1449."O"(":prec<f=>, :assoc<list>", "%list_infix")
+.annotate 'line', 469
+    get_hll_global $P1450, ["NQP"], "Grammar"
+    $P1450."O"(":prec<e=>, :assoc<unary>", "%list_prefix")
+.annotate 'line', 454
+    $P1451 = get_root_global ["parrot"], "P6metaclass"
+    $P1451."new_class"("NQP::Regex", "Regex::P6Regex::Grammar" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Grammar"]
 .include "except_types.pasm"
-.sub "TOP"  :subid("12_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "TOP"  :subid("12_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     new $P17, 'ExceptionHandler'
     set_addr $P17, control_16
@@ -459,55 +463,55 @@
     .lex "$*MULTINESS", $P20
 .annotate 'line', 4
     find_lex $P21, "%*LANG"
-    unless_null $P21, vivify_374
+    unless_null $P21, vivify_380
     get_hll_global $P21, "%LANG"
-    unless_null $P21, vivify_375
+    unless_null $P21, vivify_381
     die "Contextual %*LANG not found"
-  vivify_375:
-  vivify_374:
+  vivify_381:
+  vivify_380:
 .annotate 'line', 6
     get_hll_global $P22, ["NQP"], "Regex"
     find_lex $P23, "%*LANG"
-    unless_null $P23, vivify_376
+    unless_null $P23, vivify_382
     get_hll_global $P23, "%LANG"
-    unless_null $P23, vivify_377
+    unless_null $P23, vivify_383
     die "Contextual %*LANG not found"
-  vivify_377:
+  vivify_383:
     store_lex "%*LANG", $P23
-  vivify_376:
+  vivify_382:
     set $P23["Regex"], $P22
 .annotate 'line', 7
     get_hll_global $P24, ["NQP"], "RegexActions"
     find_lex $P25, "%*LANG"
-    unless_null $P25, vivify_378
+    unless_null $P25, vivify_384
     get_hll_global $P25, "%LANG"
-    unless_null $P25, vivify_379
+    unless_null $P25, vivify_385
     die "Contextual %*LANG not found"
-  vivify_379:
+  vivify_385:
     store_lex "%*LANG", $P25
-  vivify_378:
+  vivify_384:
     set $P25["Regex-actions"], $P24
 .annotate 'line', 8
     get_hll_global $P26, ["NQP"], "Grammar"
     find_lex $P27, "%*LANG"
-    unless_null $P27, vivify_380
+    unless_null $P27, vivify_386
     get_hll_global $P27, "%LANG"
-    unless_null $P27, vivify_381
+    unless_null $P27, vivify_387
     die "Contextual %*LANG not found"
-  vivify_381:
+  vivify_387:
     store_lex "%*LANG", $P27
-  vivify_380:
+  vivify_386:
     set $P27["MAIN"], $P26
 .annotate 'line', 9
     get_hll_global $P28, ["NQP"], "Actions"
     find_lex $P29, "%*LANG"
-    unless_null $P29, vivify_382
+    unless_null $P29, vivify_388
     get_hll_global $P29, "%LANG"
-    unless_null $P29, vivify_383
+    unless_null $P29, vivify_389
     die "Contextual %*LANG not found"
-  vivify_383:
+  vivify_389:
     store_lex "%*LANG", $P29
-  vivify_382:
+  vivify_388:
     set $P29["MAIN-actions"], $P28
 .annotate 'line', 10
     new $P30, "String"
@@ -531,7 +535,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "identifier"  :subid("13_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "identifier"  :subid("13_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx36_tgt
     .local int rx36_pos
@@ -553,9 +557,9 @@
     substr rx36_tgt, rx36_tgt, rx36_off
   rx36_start:
     eq $I10, 1, rx36_restart
-    if_null rx36_debug, debug_384
+    if_null rx36_debug, debug_390
     rx36_cur."!cursor_debug"("START", "identifier")
-  debug_384:
+  debug_390:
     $I10 = self.'from'()
     ne $I10, -1, rxscan40_done
     goto rxscan40_scan
@@ -598,15 +602,15 @@
   rxquantr41_done:
   # rx pass
     rx36_cur."!cursor_pass"(rx36_pos, "identifier")
-    if_null rx36_debug, debug_385
+    if_null rx36_debug, debug_391
     rx36_cur."!cursor_debug"("PASS", "identifier", " at pos=", rx36_pos)
-  debug_385:
+  debug_391:
     .return (rx36_cur)
   rx36_restart:
 .annotate 'line', 4
-    if_null rx36_debug, debug_386
+    if_null rx36_debug, debug_392
     rx36_cur."!cursor_debug"("NEXT", "identifier")
-  debug_386:
+  debug_392:
   rx36_fail:
     (rx36_rep, rx36_pos, $I10, $P10) = rx36_cur."!mark_fail"(0)
     lt rx36_pos, -1, rx36_done
@@ -614,16 +618,16 @@
     jump $I10
   rx36_done:
     rx36_cur."!cursor_fail"()
-    if_null rx36_debug, debug_387
+    if_null rx36_debug, debug_393
     rx36_cur."!cursor_debug"("FAIL", "identifier")
-  debug_387:
+  debug_393:
     .return (rx36_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__identifier"  :subid("14_1282324002.40722") :method
+.sub "!PREFIX__identifier"  :subid("14_1284728478.15265") :method
 .annotate 'line', 4
     $P38 = self."!PREFIX__!subrule"("ident", "")
     new $P39, "ResizablePMCArray"
@@ -633,7 +637,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "name"  :subid("15_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "name"  :subid("15_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx43_tgt
     .local int rx43_pos
@@ -656,9 +660,9 @@
     substr rx43_tgt, rx43_tgt, rx43_off
   rx43_start:
     eq $I10, 1, rx43_restart
-    if_null rx43_debug, debug_388
+    if_null rx43_debug, debug_394
     rx43_cur."!cursor_debug"("START", "name")
-  debug_388:
+  debug_394:
     $I10 = self.'from'()
     ne $I10, -1, rxscan46_done
     goto rxscan46_scan
@@ -704,15 +708,15 @@
   rxquantr47_done:
   # rx pass
     rx43_cur."!cursor_pass"(rx43_pos, "name")
-    if_null rx43_debug, debug_389
+    if_null rx43_debug, debug_395
     rx43_cur."!cursor_debug"("PASS", "name", " at pos=", rx43_pos)
-  debug_389:
+  debug_395:
     .return (rx43_cur)
   rx43_restart:
 .annotate 'line', 4
-    if_null rx43_debug, debug_390
+    if_null rx43_debug, debug_396
     rx43_cur."!cursor_debug"("NEXT", "name")
-  debug_390:
+  debug_396:
   rx43_fail:
     (rx43_rep, rx43_pos, $I10, $P10) = rx43_cur."!mark_fail"(0)
     lt rx43_pos, -1, rx43_done
@@ -720,16 +724,16 @@
     jump $I10
   rx43_done:
     rx43_cur."!cursor_fail"()
-    if_null rx43_debug, debug_391
+    if_null rx43_debug, debug_397
     rx43_cur."!cursor_debug"("FAIL", "name")
-  debug_391:
+  debug_397:
     .return (rx43_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__name"  :subid("16_1282324002.40722") :method
+.sub "!PREFIX__name"  :subid("16_1284728478.15265") :method
 .annotate 'line', 4
     new $P45, "ResizablePMCArray"
     push $P45, ""
@@ -738,7 +742,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "deflongname"  :subid("17_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "deflongname"  :subid("17_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx50_tgt
     .local int rx50_pos
@@ -761,9 +765,9 @@
     substr rx50_tgt, rx50_tgt, rx50_off
   rx50_start:
     eq $I10, 1, rx50_restart
-    if_null rx50_debug, debug_392
+    if_null rx50_debug, debug_398
     rx50_cur."!cursor_debug"("START", "deflongname")
-  debug_392:
+  debug_398:
     $I10 = self.'from'()
     ne $I10, -1, rxscan54_done
     goto rxscan54_scan
@@ -807,15 +811,15 @@
 .annotate 'line', 21
   # rx pass
     rx50_cur."!cursor_pass"(rx50_pos, "deflongname")
-    if_null rx50_debug, debug_393
+    if_null rx50_debug, debug_399
     rx50_cur."!cursor_debug"("PASS", "deflongname", " at pos=", rx50_pos)
-  debug_393:
+  debug_399:
     .return (rx50_cur)
   rx50_restart:
 .annotate 'line', 4
-    if_null rx50_debug, debug_394
+    if_null rx50_debug, debug_400
     rx50_cur."!cursor_debug"("NEXT", "deflongname")
-  debug_394:
+  debug_400:
   rx50_fail:
     (rx50_rep, rx50_pos, $I10, $P10) = rx50_cur."!mark_fail"(0)
     lt rx50_pos, -1, rx50_done
@@ -823,16 +827,16 @@
     jump $I10
   rx50_done:
     rx50_cur."!cursor_fail"()
-    if_null rx50_debug, debug_395
+    if_null rx50_debug, debug_401
     rx50_cur."!cursor_debug"("FAIL", "deflongname")
-  debug_395:
+  debug_401:
     .return (rx50_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__deflongname"  :subid("18_1282324002.40722") :method
+.sub "!PREFIX__deflongname"  :subid("18_1284728478.15265") :method
 .annotate 'line', 4
     $P52 = self."!PREFIX__!subrule"("identifier", "")
     new $P53, "ResizablePMCArray"
@@ -842,7 +846,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "ENDSTMT"  :subid("19_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "ENDSTMT"  :subid("19_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx58_tgt
     .local int rx58_pos
@@ -864,9 +868,9 @@
     substr rx58_tgt, rx58_tgt, rx58_off
   rx58_start:
     eq $I10, 1, rx58_restart
-    if_null rx58_debug, debug_396
+    if_null rx58_debug, debug_402
     rx58_cur."!cursor_debug"("START", "ENDSTMT")
-  debug_396:
+  debug_402:
     $I10 = self.'from'()
     ne $I10, -1, rxscan61_done
     goto rxscan61_scan
@@ -972,15 +976,15 @@
 .annotate 'line', 25
   # rx pass
     rx58_cur."!cursor_pass"(rx58_pos, "ENDSTMT")
-    if_null rx58_debug, debug_397
+    if_null rx58_debug, debug_403
     rx58_cur."!cursor_debug"("PASS", "ENDSTMT", " at pos=", rx58_pos)
-  debug_397:
+  debug_403:
     .return (rx58_cur)
   rx58_restart:
 .annotate 'line', 4
-    if_null rx58_debug, debug_398
+    if_null rx58_debug, debug_404
     rx58_cur."!cursor_debug"("NEXT", "ENDSTMT")
-  debug_398:
+  debug_404:
   rx58_fail:
     (rx58_rep, rx58_pos, $I10, $P10) = rx58_cur."!mark_fail"(0)
     lt rx58_pos, -1, rx58_done
@@ -988,16 +992,16 @@
     jump $I10
   rx58_done:
     rx58_cur."!cursor_fail"()
-    if_null rx58_debug, debug_399
+    if_null rx58_debug, debug_405
     rx58_cur."!cursor_debug"("FAIL", "ENDSTMT")
-  debug_399:
+  debug_405:
     .return (rx58_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__ENDSTMT"  :subid("20_1282324002.40722") :method
+.sub "!PREFIX__ENDSTMT"  :subid("20_1284728478.15265") :method
 .annotate 'line', 4
     new $P60, "ResizablePMCArray"
     push $P60, ""
@@ -1006,7 +1010,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "ws"  :subid("21_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "ws"  :subid("21_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx70_tgt
     .local int rx70_pos
@@ -1028,9 +1032,9 @@
     substr rx70_tgt, rx70_tgt, rx70_off
   rx70_start:
     eq $I10, 1, rx70_restart
-    if_null rx70_debug, debug_400
+    if_null rx70_debug, debug_406
     rx70_cur."!cursor_debug"("START", "ws")
-  debug_400:
+  debug_406:
     $I10 = self.'from'()
     ne $I10, -1, rxscan73_done
     goto rxscan73_scan
@@ -1154,15 +1158,15 @@
 .annotate 'line', 32
   # rx pass
     rx70_cur."!cursor_pass"(rx70_pos, "ws")
-    if_null rx70_debug, debug_401
+    if_null rx70_debug, debug_407
     rx70_cur."!cursor_debug"("PASS", "ws", " at pos=", rx70_pos)
-  debug_401:
+  debug_407:
     .return (rx70_cur)
   rx70_restart:
 .annotate 'line', 4
-    if_null rx70_debug, debug_402
+    if_null rx70_debug, debug_408
     rx70_cur."!cursor_debug"("NEXT", "ws")
-  debug_402:
+  debug_408:
   rx70_fail:
     (rx70_rep, rx70_pos, $I10, $P10) = rx70_cur."!mark_fail"(0)
     lt rx70_pos, -1, rx70_done
@@ -1170,16 +1174,16 @@
     jump $I10
   rx70_done:
     rx70_cur."!cursor_fail"()
-    if_null rx70_debug, debug_403
+    if_null rx70_debug, debug_409
     rx70_cur."!cursor_debug"("FAIL", "ws")
-  debug_403:
+  debug_409:
     .return (rx70_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__ws"  :subid("22_1282324002.40722") :method
+.sub "!PREFIX__ws"  :subid("22_1284728478.15265") :method
 .annotate 'line', 4
     new $P72, "ResizablePMCArray"
     push $P72, ""
@@ -1189,9 +1193,9 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "unv"  :subid("23_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "unv"  :subid("23_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .const 'Sub' $P88 = "25_1282324002.40722" 
+    .const 'Sub' $P88 = "25_1284728478.15265" 
     capture_lex $P88
     .local string rx81_tgt
     .local int rx81_pos
@@ -1213,9 +1217,9 @@
     substr rx81_tgt, rx81_tgt, rx81_off
   rx81_start:
     eq $I10, 1, rx81_restart
-    if_null rx81_debug, debug_404
+    if_null rx81_debug, debug_410
     rx81_cur."!cursor_debug"("START", "unv")
-  debug_404:
+  debug_410:
     $I10 = self.'from'()
     ne $I10, -1, rxscan84_done
     goto rxscan84_scan
@@ -1243,7 +1247,7 @@
   rxanchor86_done:
   # rx subrule "before" subtype=zerowidth negate=
     rx81_cur."!cursor_pos"(rx81_pos)
-    .const 'Sub' $P88 = "25_1282324002.40722" 
+    .const 'Sub' $P88 = "25_1284728478.15265" 
     capture_lex $P88
     $P10 = rx81_cur."before"($P88)
     unless $P10, rx81_fail
@@ -1306,15 +1310,15 @@
 .annotate 'line', 43
   # rx pass
     rx81_cur."!cursor_pass"(rx81_pos, "unv")
-    if_null rx81_debug, debug_409
+    if_null rx81_debug, debug_415
     rx81_cur."!cursor_debug"("PASS", "unv", " at pos=", rx81_pos)
-  debug_409:
+  debug_415:
     .return (rx81_cur)
   rx81_restart:
 .annotate 'line', 4
-    if_null rx81_debug, debug_410
+    if_null rx81_debug, debug_416
     rx81_cur."!cursor_debug"("NEXT", "unv")
-  debug_410:
+  debug_416:
   rx81_fail:
     (rx81_rep, rx81_pos, $I10, $P10) = rx81_cur."!mark_fail"(0)
     lt rx81_pos, -1, rx81_done
@@ -1322,16 +1326,16 @@
     jump $I10
   rx81_done:
     rx81_cur."!cursor_fail"()
-    if_null rx81_debug, debug_411
+    if_null rx81_debug, debug_417
     rx81_cur."!cursor_debug"("FAIL", "unv")
-  debug_411:
+  debug_417:
     .return (rx81_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__unv"  :subid("24_1282324002.40722") :method
+.sub "!PREFIX__unv"  :subid("24_1284728478.15265") :method
 .annotate 'line', 4
     new $P83, "ResizablePMCArray"
     push $P83, ""
@@ -1342,7 +1346,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block87"  :anon :subid("25_1282324002.40722") :method :outer("23_1282324002.40722")
+.sub "_block87"  :anon :subid("25_1284728478.15265") :method :outer("23_1284728478.15265")
 .annotate 'line', 46
     .local string rx89_tgt
     .local int rx89_pos
@@ -1364,9 +1368,9 @@
     substr rx89_tgt, rx89_tgt, rx89_off
   rx89_start:
     eq $I10, 1, rx89_restart
-    if_null rx89_debug, debug_405
+    if_null rx89_debug, debug_411
     rx89_cur."!cursor_debug"("START", "")
-  debug_405:
+  debug_411:
     $I10 = self.'from'()
     ne $I10, -1, rxscan90_done
     goto rxscan90_scan
@@ -1422,14 +1426,14 @@
   alt92_end:
   # rx pass
     rx89_cur."!cursor_pass"(rx89_pos, "")
-    if_null rx89_debug, debug_406
+    if_null rx89_debug, debug_412
     rx89_cur."!cursor_debug"("PASS", "", " at pos=", rx89_pos)
-  debug_406:
+  debug_412:
     .return (rx89_cur)
   rx89_restart:
-    if_null rx89_debug, debug_407
+    if_null rx89_debug, debug_413
     rx89_cur."!cursor_debug"("NEXT", "")
-  debug_407:
+  debug_413:
   rx89_fail:
     (rx89_rep, rx89_pos, $I10, $P10) = rx89_cur."!mark_fail"(0)
     lt rx89_pos, -1, rx89_done
@@ -1437,18 +1441,18 @@
     jump $I10
   rx89_done:
     rx89_cur."!cursor_fail"()
-    if_null rx89_debug, debug_408
+    if_null rx89_debug, debug_414
     rx89_cur."!cursor_debug"("FAIL", "")
-  debug_408:
+  debug_414:
     .return (rx89_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "pod_comment"  :subid("26_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "pod_comment"  :subid("26_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .const 'Sub' $P127 = "28_1282324002.40722" 
+    .const 'Sub' $P127 = "28_1284728478.15265" 
     capture_lex $P127
     .local string rx96_tgt
     .local int rx96_pos
@@ -1470,9 +1474,9 @@
     substr rx96_tgt, rx96_tgt, rx96_off
   rx96_start:
     eq $I10, 1, rx96_restart
-    if_null rx96_debug, debug_412
+    if_null rx96_debug, debug_418
     rx96_cur."!cursor_debug"("START", "pod_comment")
-  debug_412:
+  debug_418:
     $I10 = self.'from'()
     ne $I10, -1, rxscan99_done
     goto rxscan99_scan
@@ -1944,7 +1948,7 @@
   rxanchor125_done:
   # rx subrule "before" subtype=zerowidth negate=
     rx96_cur."!cursor_pos"(rx96_pos)
-    .const 'Sub' $P127 = "28_1282324002.40722" 
+    .const 'Sub' $P127 = "28_1284728478.15265" 
     capture_lex $P127
     $P10 = rx96_cur."before"($P127)
     unless $P10, rx96_fail
@@ -1978,15 +1982,15 @@
 .annotate 'line', 52
   # rx pass
     rx96_cur."!cursor_pass"(rx96_pos, "pod_comment")
-    if_null rx96_debug, debug_417
+    if_null rx96_debug, debug_423
     rx96_cur."!cursor_debug"("PASS", "pod_comment", " at pos=", rx96_pos)
-  debug_417:
+  debug_423:
     .return (rx96_cur)
   rx96_restart:
 .annotate 'line', 4
-    if_null rx96_debug, debug_418
+    if_null rx96_debug, debug_424
     rx96_cur."!cursor_debug"("NEXT", "pod_comment")
-  debug_418:
+  debug_424:
   rx96_fail:
     (rx96_rep, rx96_pos, $I10, $P10) = rx96_cur."!mark_fail"(0)
     lt rx96_pos, -1, rx96_done
@@ -1994,16 +1998,16 @@
     jump $I10
   rx96_done:
     rx96_cur."!cursor_fail"()
-    if_null rx96_debug, debug_419
+    if_null rx96_debug, debug_425
     rx96_cur."!cursor_debug"("FAIL", "pod_comment")
-  debug_419:
+  debug_425:
     .return (rx96_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__pod_comment"  :subid("27_1282324002.40722") :method
+.sub "!PREFIX__pod_comment"  :subid("27_1284728478.15265") :method
 .annotate 'line', 4
     new $P98, "ResizablePMCArray"
     push $P98, ""
@@ -2012,7 +2016,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block126"  :anon :subid("28_1282324002.40722") :method :outer("26_1282324002.40722")
+.sub "_block126"  :anon :subid("28_1284728478.15265") :method :outer("26_1284728478.15265")
 .annotate 'line', 69
     .local string rx128_tgt
     .local int rx128_pos
@@ -2034,9 +2038,9 @@
     substr rx128_tgt, rx128_tgt, rx128_off
   rx128_start:
     eq $I10, 1, rx128_restart
-    if_null rx128_debug, debug_413
+    if_null rx128_debug, debug_419
     rx128_cur."!cursor_debug"("START", "")
-  debug_413:
+  debug_419:
     $I10 = self.'from'()
     ne $I10, -1, rxscan129_done
     goto rxscan129_scan
@@ -2122,14 +2126,14 @@
 .annotate 'line', 69
   # rx pass
     rx128_cur."!cursor_pass"(rx128_pos, "")
-    if_null rx128_debug, debug_414
+    if_null rx128_debug, debug_420
     rx128_cur."!cursor_debug"("PASS", "", " at pos=", rx128_pos)
-  debug_414:
+  debug_420:
     .return (rx128_cur)
   rx128_restart:
-    if_null rx128_debug, debug_415
+    if_null rx128_debug, debug_421
     rx128_cur."!cursor_debug"("NEXT", "")
-  debug_415:
+  debug_421:
   rx128_fail:
     (rx128_rep, rx128_pos, $I10, $P10) = rx128_cur."!mark_fail"(0)
     lt rx128_pos, -1, rx128_done
@@ -2137,16 +2141,16 @@
     jump $I10
   rx128_done:
     rx128_cur."!cursor_fail"()
-    if_null rx128_debug, debug_416
+    if_null rx128_debug, debug_422
     rx128_cur."!cursor_debug"("FAIL", "")
-  debug_416:
+  debug_422:
     .return (rx128_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "comp_unit"  :subid("29_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "comp_unit"  :subid("29_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx135_tgt
     .local int rx135_pos
@@ -2168,9 +2172,9 @@
     substr rx135_tgt, rx135_tgt, rx135_off
   rx135_start:
     eq $I10, 1, rx135_restart
-    if_null rx135_debug, debug_420
+    if_null rx135_debug, debug_426
     rx135_cur."!cursor_debug"("START", "comp_unit")
-  debug_420:
+  debug_426:
     $I10 = self.'from'()
     ne $I10, -1, rxscan139_done
     goto rxscan139_scan
@@ -2220,15 +2224,15 @@
 .annotate 'line', 83
   # rx pass
     rx135_cur."!cursor_pass"(rx135_pos, "comp_unit")
-    if_null rx135_debug, debug_421
+    if_null rx135_debug, debug_427
     rx135_cur."!cursor_debug"("PASS", "comp_unit", " at pos=", rx135_pos)
-  debug_421:
+  debug_427:
     .return (rx135_cur)
   rx135_restart:
 .annotate 'line', 4
-    if_null rx135_debug, debug_422
+    if_null rx135_debug, debug_428
     rx135_cur."!cursor_debug"("NEXT", "comp_unit")
-  debug_422:
+  debug_428:
   rx135_fail:
     (rx135_rep, rx135_pos, $I10, $P10) = rx135_cur."!mark_fail"(0)
     lt rx135_pos, -1, rx135_done
@@ -2236,16 +2240,16 @@
     jump $I10
   rx135_done:
     rx135_cur."!cursor_fail"()
-    if_null rx135_debug, debug_423
+    if_null rx135_debug, debug_429
     rx135_cur."!cursor_debug"("FAIL", "comp_unit")
-  debug_423:
+  debug_429:
     .return (rx135_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__comp_unit"  :subid("30_1282324002.40722") :method
+.sub "!PREFIX__comp_unit"  :subid("30_1284728478.15265") :method
 .annotate 'line', 4
     $P137 = self."!PREFIX__!subrule"("newpad", "")
     new $P138, "ResizablePMCArray"
@@ -2255,7 +2259,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statementlist"  :subid("31_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "statementlist"  :subid("31_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx142_tgt
     .local int rx142_pos
@@ -2278,9 +2282,9 @@
     substr rx142_tgt, rx142_tgt, rx142_off
   rx142_start:
     eq $I10, 1, rx142_restart
-    if_null rx142_debug, debug_424
+    if_null rx142_debug, debug_430
     rx142_cur."!cursor_debug"("START", "statementlist")
-  debug_424:
+  debug_430:
     $I10 = self.'from'()
     ne $I10, -1, rxscan147_done
     goto rxscan147_scan
@@ -2354,15 +2358,15 @@
 .annotate 'line', 90
   # rx pass
     rx142_cur."!cursor_pass"(rx142_pos, "statementlist")
-    if_null rx142_debug, debug_425
+    if_null rx142_debug, debug_431
     rx142_cur."!cursor_debug"("PASS", "statementlist", " at pos=", rx142_pos)
-  debug_425:
+  debug_431:
     .return (rx142_cur)
   rx142_restart:
 .annotate 'line', 4
-    if_null rx142_debug, debug_426
+    if_null rx142_debug, debug_432
     rx142_cur."!cursor_debug"("NEXT", "statementlist")
-  debug_426:
+  debug_432:
   rx142_fail:
     (rx142_rep, rx142_pos, $I10, $P10) = rx142_cur."!mark_fail"(0)
     lt rx142_pos, -1, rx142_done
@@ -2370,16 +2374,16 @@
     jump $I10
   rx142_done:
     rx142_cur."!cursor_fail"()
-    if_null rx142_debug, debug_427
+    if_null rx142_debug, debug_433
     rx142_cur."!cursor_debug"("FAIL", "statementlist")
-  debug_427:
+  debug_433:
     .return (rx142_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statementlist"  :subid("32_1282324002.40722") :method
+.sub "!PREFIX__statementlist"  :subid("32_1284728478.15265") :method
 .annotate 'line', 4
     $P144 = self."!PREFIX__!subrule"("ws", "")
     $P145 = self."!PREFIX__!subrule"("ws", "")
@@ -2391,9 +2395,9 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement"  :subid("33_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "statement"  :subid("33_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .const 'Sub' $P161 = "35_1282324002.40722" 
+    .const 'Sub' $P161 = "35_1284728478.15265" 
     capture_lex $P161
     .local string rx156_tgt
     .local int rx156_pos
@@ -2416,9 +2420,9 @@
     substr rx156_tgt, rx156_tgt, rx156_off
   rx156_start:
     eq $I10, 1, rx156_restart
-    if_null rx156_debug, debug_428
+    if_null rx156_debug, debug_434
     rx156_cur."!cursor_debug"("START", "statement")
-  debug_428:
+  debug_434:
     $I10 = self.'from'()
     ne $I10, -1, rxscan159_done
     goto rxscan159_scan
@@ -2434,7 +2438,7 @@
 .annotate 'line', 96
   # rx subrule "before" subtype=zerowidth negate=1
     rx156_cur."!cursor_pos"(rx156_pos)
-    .const 'Sub' $P161 = "35_1282324002.40722" 
+    .const 'Sub' $P161 = "35_1284728478.15265" 
     capture_lex $P161
     $P10 = rx156_cur."before"($P161)
     if $P10, rx156_fail
@@ -2530,15 +2534,15 @@
 .annotate 'line', 95
   # rx pass
     rx156_cur."!cursor_pass"(rx156_pos, "statement")
-    if_null rx156_debug, debug_433
+    if_null rx156_debug, debug_439
     rx156_cur."!cursor_debug"("PASS", "statement", " at pos=", rx156_pos)
-  debug_433:
+  debug_439:
     .return (rx156_cur)
   rx156_restart:
 .annotate 'line', 4
-    if_null rx156_debug, debug_434
+    if_null rx156_debug, debug_440
     rx156_cur."!cursor_debug"("NEXT", "statement")
-  debug_434:
+  debug_440:
   rx156_fail:
     (rx156_rep, rx156_pos, $I10, $P10) = rx156_cur."!mark_fail"(0)
     lt rx156_pos, -1, rx156_done
@@ -2546,16 +2550,16 @@
     jump $I10
   rx156_done:
     rx156_cur."!cursor_fail"()
-    if_null rx156_debug, debug_435
+    if_null rx156_debug, debug_441
     rx156_cur."!cursor_debug"("FAIL", "statement")
-  debug_435:
+  debug_441:
     .return (rx156_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement"  :subid("34_1282324002.40722") :method
+.sub "!PREFIX__statement"  :subid("34_1284728478.15265") :method
 .annotate 'line', 4
     new $P158, "ResizablePMCArray"
     push $P158, ""
@@ -2564,7 +2568,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block160"  :anon :subid("35_1282324002.40722") :method :outer("33_1282324002.40722")
+.sub "_block160"  :anon :subid("35_1284728478.15265") :method :outer("33_1284728478.15265")
 .annotate 'line', 96
     .local string rx162_tgt
     .local int rx162_pos
@@ -2586,9 +2590,9 @@
     substr rx162_tgt, rx162_tgt, rx162_off
   rx162_start:
     eq $I10, 1, rx162_restart
-    if_null rx162_debug, debug_429
+    if_null rx162_debug, debug_435
     rx162_cur."!cursor_debug"("START", "")
-  debug_429:
+  debug_435:
     $I10 = self.'from'()
     ne $I10, -1, rxscan163_done
     goto rxscan163_scan
@@ -2618,14 +2622,14 @@
   alt164_end:
   # rx pass
     rx162_cur."!cursor_pass"(rx162_pos, "")
-    if_null rx162_debug, debug_430
+    if_null rx162_debug, debug_436
     rx162_cur."!cursor_debug"("PASS", "", " at pos=", rx162_pos)
-  debug_430:
+  debug_436:
     .return (rx162_cur)
   rx162_restart:
-    if_null rx162_debug, debug_431
+    if_null rx162_debug, debug_437
     rx162_cur."!cursor_debug"("NEXT", "")
-  debug_431:
+  debug_437:
   rx162_fail:
     (rx162_rep, rx162_pos, $I10, $P10) = rx162_cur."!mark_fail"(0)
     lt rx162_pos, -1, rx162_done
@@ -2633,16 +2637,16 @@
     jump $I10
   rx162_done:
     rx162_cur."!cursor_fail"()
-    if_null rx162_debug, debug_432
+    if_null rx162_debug, debug_438
     rx162_cur."!cursor_debug"("FAIL", "")
-  debug_432:
+  debug_438:
     .return (rx162_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "eat_terminator"  :subid("36_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "eat_terminator"  :subid("36_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx171_tgt
     .local int rx171_pos
@@ -2664,9 +2668,9 @@
     substr rx171_tgt, rx171_tgt, rx171_off
   rx171_start:
     eq $I10, 1, rx171_restart
-    if_null rx171_debug, debug_436
+    if_null rx171_debug, debug_442
     rx171_cur."!cursor_debug"("START", "eat_terminator")
-  debug_436:
+  debug_442:
     $I10 = self.'from'()
     ne $I10, -1, rxscan174_done
     goto rxscan174_scan
@@ -2718,15 +2722,15 @@
 .annotate 'line', 108
   # rx pass
     rx171_cur."!cursor_pass"(rx171_pos, "eat_terminator")
-    if_null rx171_debug, debug_437
+    if_null rx171_debug, debug_443
     rx171_cur."!cursor_debug"("PASS", "eat_terminator", " at pos=", rx171_pos)
-  debug_437:
+  debug_443:
     .return (rx171_cur)
   rx171_restart:
 .annotate 'line', 4
-    if_null rx171_debug, debug_438
+    if_null rx171_debug, debug_444
     rx171_cur."!cursor_debug"("NEXT", "eat_terminator")
-  debug_438:
+  debug_444:
   rx171_fail:
     (rx171_rep, rx171_pos, $I10, $P10) = rx171_cur."!mark_fail"(0)
     lt rx171_pos, -1, rx171_done
@@ -2734,16 +2738,16 @@
     jump $I10
   rx171_done:
     rx171_cur."!cursor_fail"()
-    if_null rx171_debug, debug_439
+    if_null rx171_debug, debug_445
     rx171_cur."!cursor_debug"("FAIL", "eat_terminator")
-  debug_439:
+  debug_445:
     .return (rx171_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__eat_terminator"  :subid("37_1282324002.40722") :method
+.sub "!PREFIX__eat_terminator"  :subid("37_1284728478.15265") :method
 .annotate 'line', 4
     new $P173, "ResizablePMCArray"
     push $P173, ""
@@ -2755,7 +2759,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "xblock"  :subid("38_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "xblock"  :subid("38_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx177_tgt
     .local int rx177_pos
@@ -2777,9 +2781,9 @@
     substr rx177_tgt, rx177_tgt, rx177_off
   rx177_start:
     eq $I10, 1, rx177_restart
-    if_null rx177_debug, debug_440
+    if_null rx177_debug, debug_446
     rx177_cur."!cursor_debug"("START", "xblock")
-  debug_440:
+  debug_446:
     $I10 = self.'from'()
     ne $I10, -1, rxscan181_done
     goto rxscan181_scan
@@ -2815,15 +2819,15 @@
 .annotate 'line', 115
   # rx pass
     rx177_cur."!cursor_pass"(rx177_pos, "xblock")
-    if_null rx177_debug, debug_441
+    if_null rx177_debug, debug_447
     rx177_cur."!cursor_debug"("PASS", "xblock", " at pos=", rx177_pos)
-  debug_441:
+  debug_447:
     .return (rx177_cur)
   rx177_restart:
 .annotate 'line', 4
-    if_null rx177_debug, debug_442
+    if_null rx177_debug, debug_448
     rx177_cur."!cursor_debug"("NEXT", "xblock")
-  debug_442:
+  debug_448:
   rx177_fail:
     (rx177_rep, rx177_pos, $I10, $P10) = rx177_cur."!mark_fail"(0)
     lt rx177_pos, -1, rx177_done
@@ -2831,16 +2835,16 @@
     jump $I10
   rx177_done:
     rx177_cur."!cursor_fail"()
-    if_null rx177_debug, debug_443
+    if_null rx177_debug, debug_449
     rx177_cur."!cursor_debug"("FAIL", "xblock")
-  debug_443:
+  debug_449:
     .return (rx177_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__xblock"  :subid("39_1282324002.40722") :method
+.sub "!PREFIX__xblock"  :subid("39_1284728478.15265") :method
 .annotate 'line', 4
     $P179 = self."!PREFIX__!subrule"("EXPR", "")
     new $P180, "ResizablePMCArray"
@@ -2850,7 +2854,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "pblock"  :subid("40_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "pblock"  :subid("40_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx183_tgt
     .local int rx183_pos
@@ -2872,9 +2876,9 @@
     substr rx183_tgt, rx183_tgt, rx183_off
   rx183_start:
     eq $I10, 1, rx183_restart
-    if_null rx183_debug, debug_444
+    if_null rx183_debug, debug_450
     rx183_cur."!cursor_debug"("START", "pblock")
-  debug_444:
+  debug_450:
     $I10 = self.'from'()
     ne $I10, -1, rxscan188_done
     goto rxscan188_scan
@@ -2926,7 +2930,6 @@
     rx183_cur."!mark_push"(0, rx183_pos, $I10)
 .annotate 'line', 124
   # rx enumcharlist negate=0 zerowidth
-    ge rx183_pos, rx183_eos, rx183_fail
     sub $I10, rx183_pos, rx183_off
     substr $S10, rx183_tgt, $I10, 1
     index $I11, "{", $S10
@@ -2958,15 +2961,15 @@
 .annotate 'line', 119
   # rx pass
     rx183_cur."!cursor_pass"(rx183_pos, "pblock")
-    if_null rx183_debug, debug_445
+    if_null rx183_debug, debug_451
     rx183_cur."!cursor_debug"("PASS", "pblock", " at pos=", rx183_pos)
-  debug_445:
+  debug_451:
     .return (rx183_cur)
   rx183_restart:
 .annotate 'line', 4
-    if_null rx183_debug, debug_446
+    if_null rx183_debug, debug_452
     rx183_cur."!cursor_debug"("NEXT", "pblock")
-  debug_446:
+  debug_452:
   rx183_fail:
     (rx183_rep, rx183_pos, $I10, $P10) = rx183_cur."!mark_fail"(0)
     lt rx183_pos, -1, rx183_done
@@ -2974,16 +2977,16 @@
     jump $I10
   rx183_done:
     rx183_cur."!cursor_fail"()
-    if_null rx183_debug, debug_447
+    if_null rx183_debug, debug_453
     rx183_cur."!cursor_debug"("FAIL", "pblock")
-  debug_447:
+  debug_453:
     .return (rx183_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__pblock"  :subid("41_1282324002.40722") :method
+.sub "!PREFIX__pblock"  :subid("41_1284728478.15265") :method
 .annotate 'line', 4
     $P185 = self."!PREFIX__!subrule"("panic", "")
     $P186 = self."!PREFIX__!subrule"("lambda", "")
@@ -2996,7 +2999,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "lambda"  :subid("42_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "lambda"  :subid("42_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx191_tgt
     .local int rx191_pos
@@ -3018,9 +3021,9 @@
     substr rx191_tgt, rx191_tgt, rx191_off
   rx191_start:
     eq $I10, 1, rx191_restart
-    if_null rx191_debug, debug_448
+    if_null rx191_debug, debug_454
     rx191_cur."!cursor_debug"("START", "lambda")
-  debug_448:
+  debug_454:
     $I10 = self.'from'()
     ne $I10, -1, rxscan194_done
     goto rxscan194_scan
@@ -3056,15 +3059,15 @@
   alt195_end:
   # rx pass
     rx191_cur."!cursor_pass"(rx191_pos, "lambda")
-    if_null rx191_debug, debug_449
+    if_null rx191_debug, debug_455
     rx191_cur."!cursor_debug"("PASS", "lambda", " at pos=", rx191_pos)
-  debug_449:
+  debug_455:
     .return (rx191_cur)
   rx191_restart:
 .annotate 'line', 4
-    if_null rx191_debug, debug_450
+    if_null rx191_debug, debug_456
     rx191_cur."!cursor_debug"("NEXT", "lambda")
-  debug_450:
+  debug_456:
   rx191_fail:
     (rx191_rep, rx191_pos, $I10, $P10) = rx191_cur."!mark_fail"(0)
     lt rx191_pos, -1, rx191_done
@@ -3072,16 +3075,16 @@
     jump $I10
   rx191_done:
     rx191_cur."!cursor_fail"()
-    if_null rx191_debug, debug_451
+    if_null rx191_debug, debug_457
     rx191_cur."!cursor_debug"("FAIL", "lambda")
-  debug_451:
+  debug_457:
     .return (rx191_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__lambda"  :subid("43_1282324002.40722") :method
+.sub "!PREFIX__lambda"  :subid("43_1284728478.15265") :method
 .annotate 'line', 4
     new $P193, "ResizablePMCArray"
     push $P193, "<->"
@@ -3091,7 +3094,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "block"  :subid("44_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "block"  :subid("44_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx197_tgt
     .local int rx197_pos
@@ -3113,9 +3116,9 @@
     substr rx197_tgt, rx197_tgt, rx197_off
   rx197_start:
     eq $I10, 1, rx197_restart
-    if_null rx197_debug, debug_452
+    if_null rx197_debug, debug_458
     rx197_cur."!cursor_debug"("START", "block")
-  debug_452:
+  debug_458:
     $I10 = self.'from'()
     ne $I10, -1, rxscan201_done
     goto rxscan201_scan
@@ -3133,7 +3136,6 @@
     set_addr $I10, alt202_1
     rx197_cur."!mark_push"(0, rx197_pos, $I10)
   # rx enumcharlist negate=0 zerowidth
-    ge rx197_pos, rx197_eos, rx197_fail
     sub $I10, rx197_pos, rx197_off
     substr $S10, rx197_tgt, $I10, 1
     index $I11, "{", $S10
@@ -3163,15 +3165,15 @@
 .annotate 'line', 132
   # rx pass
     rx197_cur."!cursor_pass"(rx197_pos, "block")
-    if_null rx197_debug, debug_453
+    if_null rx197_debug, debug_459
     rx197_cur."!cursor_debug"("PASS", "block", " at pos=", rx197_pos)
-  debug_453:
+  debug_459:
     .return (rx197_cur)
   rx197_restart:
 .annotate 'line', 4
-    if_null rx197_debug, debug_454
+    if_null rx197_debug, debug_460
     rx197_cur."!cursor_debug"("NEXT", "block")
-  debug_454:
+  debug_460:
   rx197_fail:
     (rx197_rep, rx197_pos, $I10, $P10) = rx197_cur."!mark_fail"(0)
     lt rx197_pos, -1, rx197_done
@@ -3179,16 +3181,16 @@
     jump $I10
   rx197_done:
     rx197_cur."!cursor_fail"()
-    if_null rx197_debug, debug_455
+    if_null rx197_debug, debug_461
     rx197_cur."!cursor_debug"("FAIL", "block")
-  debug_455:
+  debug_461:
     .return (rx197_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__block"  :subid("45_1282324002.40722") :method
+.sub "!PREFIX__block"  :subid("45_1284728478.15265") :method
 .annotate 'line', 4
     $P199 = self."!PREFIX__!subrule"("panic", "")
     new $P200, "ResizablePMCArray"
@@ -3199,7 +3201,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "blockoid"  :subid("46_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "blockoid"  :subid("46_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx204_tgt
     .local int rx204_pos
@@ -3221,9 +3223,9 @@
     substr rx204_tgt, rx204_tgt, rx204_off
   rx204_start:
     eq $I10, 1, rx204_restart
-    if_null rx204_debug, debug_456
+    if_null rx204_debug, debug_462
     rx204_cur."!cursor_debug"("START", "blockoid")
-  debug_456:
+  debug_462:
     $I10 = self.'from'()
     ne $I10, -1, rxscan208_done
     goto rxscan208_scan
@@ -3290,15 +3292,15 @@
 .annotate 'line', 138
   # rx pass
     rx204_cur."!cursor_pass"(rx204_pos, "blockoid")
-    if_null rx204_debug, debug_457
+    if_null rx204_debug, debug_463
     rx204_cur."!cursor_debug"("PASS", "blockoid", " at pos=", rx204_pos)
-  debug_457:
+  debug_463:
     .return (rx204_cur)
   rx204_restart:
 .annotate 'line', 4
-    if_null rx204_debug, debug_458
+    if_null rx204_debug, debug_464
     rx204_cur."!cursor_debug"("NEXT", "blockoid")
-  debug_458:
+  debug_464:
   rx204_fail:
     (rx204_rep, rx204_pos, $I10, $P10) = rx204_cur."!mark_fail"(0)
     lt rx204_pos, -1, rx204_done
@@ -3306,16 +3308,16 @@
     jump $I10
   rx204_done:
     rx204_cur."!cursor_fail"()
-    if_null rx204_debug, debug_459
+    if_null rx204_debug, debug_465
     rx204_cur."!cursor_debug"("FAIL", "blockoid")
-  debug_459:
+  debug_465:
     .return (rx204_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__blockoid"  :subid("47_1282324002.40722") :method
+.sub "!PREFIX__blockoid"  :subid("47_1284728478.15265") :method
 .annotate 'line', 4
     $P206 = self."!PREFIX__!subrule"("finishpad", "")
     new $P207, "ResizablePMCArray"
@@ -3325,7 +3327,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "newpad"  :subid("48_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "newpad"  :subid("48_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx213_tgt
     .local int rx213_pos
@@ -3347,9 +3349,9 @@
     substr rx213_tgt, rx213_tgt, rx213_off
   rx213_start:
     eq $I10, 1, rx213_restart
-    if_null rx213_debug, debug_460
+    if_null rx213_debug, debug_466
     rx213_cur."!cursor_debug"("START", "newpad")
-  debug_460:
+  debug_466:
     $I10 = self.'from'()
     ne $I10, -1, rxscan216_done
     goto rxscan216_scan
@@ -3365,15 +3367,15 @@
 .annotate 'line', 144
   # rx pass
     rx213_cur."!cursor_pass"(rx213_pos, "newpad")
-    if_null rx213_debug, debug_461
+    if_null rx213_debug, debug_467
     rx213_cur."!cursor_debug"("PASS", "newpad", " at pos=", rx213_pos)
-  debug_461:
+  debug_467:
     .return (rx213_cur)
   rx213_restart:
 .annotate 'line', 4
-    if_null rx213_debug, debug_462
+    if_null rx213_debug, debug_468
     rx213_cur."!cursor_debug"("NEXT", "newpad")
-  debug_462:
+  debug_468:
   rx213_fail:
     (rx213_rep, rx213_pos, $I10, $P10) = rx213_cur."!mark_fail"(0)
     lt rx213_pos, -1, rx213_done
@@ -3381,16 +3383,16 @@
     jump $I10
   rx213_done:
     rx213_cur."!cursor_fail"()
-    if_null rx213_debug, debug_463
+    if_null rx213_debug, debug_469
     rx213_cur."!cursor_debug"("FAIL", "newpad")
-  debug_463:
+  debug_469:
     .return (rx213_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__newpad"  :subid("49_1282324002.40722") :method
+.sub "!PREFIX__newpad"  :subid("49_1284728478.15265") :method
 .annotate 'line', 4
     new $P215, "ResizablePMCArray"
     push $P215, ""
@@ -3399,7 +3401,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "outerctx"  :subid("50_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "outerctx"  :subid("50_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx218_tgt
     .local int rx218_pos
@@ -3421,9 +3423,9 @@
     substr rx218_tgt, rx218_tgt, rx218_off
   rx218_start:
     eq $I10, 1, rx218_restart
-    if_null rx218_debug, debug_464
+    if_null rx218_debug, debug_470
     rx218_cur."!cursor_debug"("START", "outerctx")
-  debug_464:
+  debug_470:
     $I10 = self.'from'()
     ne $I10, -1, rxscan221_done
     goto rxscan221_scan
@@ -3439,15 +3441,15 @@
 .annotate 'line', 145
   # rx pass
     rx218_cur."!cursor_pass"(rx218_pos, "outerctx")
-    if_null rx218_debug, debug_465
+    if_null rx218_debug, debug_471
     rx218_cur."!cursor_debug"("PASS", "outerctx", " at pos=", rx218_pos)
-  debug_465:
+  debug_471:
     .return (rx218_cur)
   rx218_restart:
 .annotate 'line', 4
-    if_null rx218_debug, debug_466
+    if_null rx218_debug, debug_472
     rx218_cur."!cursor_debug"("NEXT", "outerctx")
-  debug_466:
+  debug_472:
   rx218_fail:
     (rx218_rep, rx218_pos, $I10, $P10) = rx218_cur."!mark_fail"(0)
     lt rx218_pos, -1, rx218_done
@@ -3455,16 +3457,16 @@
     jump $I10
   rx218_done:
     rx218_cur."!cursor_fail"()
-    if_null rx218_debug, debug_467
+    if_null rx218_debug, debug_473
     rx218_cur."!cursor_debug"("FAIL", "outerctx")
-  debug_467:
+  debug_473:
     .return (rx218_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__outerctx"  :subid("51_1282324002.40722") :method
+.sub "!PREFIX__outerctx"  :subid("51_1284728478.15265") :method
 .annotate 'line', 4
     new $P220, "ResizablePMCArray"
     push $P220, ""
@@ -3473,7 +3475,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "finishpad"  :subid("52_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "finishpad"  :subid("52_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx223_tgt
     .local int rx223_pos
@@ -3495,9 +3497,9 @@
     substr rx223_tgt, rx223_tgt, rx223_off
   rx223_start:
     eq $I10, 1, rx223_restart
-    if_null rx223_debug, debug_468
+    if_null rx223_debug, debug_474
     rx223_cur."!cursor_debug"("START", "finishpad")
-  debug_468:
+  debug_474:
     $I10 = self.'from'()
     ne $I10, -1, rxscan226_done
     goto rxscan226_scan
@@ -3513,15 +3515,15 @@
 .annotate 'line', 146
   # rx pass
     rx223_cur."!cursor_pass"(rx223_pos, "finishpad")
-    if_null rx223_debug, debug_469
+    if_null rx223_debug, debug_475
     rx223_cur."!cursor_debug"("PASS", "finishpad", " at pos=", rx223_pos)
-  debug_469:
+  debug_475:
     .return (rx223_cur)
   rx223_restart:
 .annotate 'line', 4
-    if_null rx223_debug, debug_470
+    if_null rx223_debug, debug_476
     rx223_cur."!cursor_debug"("NEXT", "finishpad")
-  debug_470:
+  debug_476:
   rx223_fail:
     (rx223_rep, rx223_pos, $I10, $P10) = rx223_cur."!mark_fail"(0)
     lt rx223_pos, -1, rx223_done
@@ -3529,16 +3531,16 @@
     jump $I10
   rx223_done:
     rx223_cur."!cursor_fail"()
-    if_null rx223_debug, debug_471
+    if_null rx223_debug, debug_477
     rx223_cur."!cursor_debug"("FAIL", "finishpad")
-  debug_471:
+  debug_477:
     .return (rx223_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__finishpad"  :subid("53_1282324002.40722") :method
+.sub "!PREFIX__finishpad"  :subid("53_1284728478.15265") :method
 .annotate 'line', 4
     new $P225, "ResizablePMCArray"
     push $P225, ""
@@ -3547,7 +3549,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator"  :subid("54_1282324002.40722") :method
+.sub "terminator"  :subid("54_1284728478.15265") :method
 .annotate 'line', 148
     $P228 = self."!protoregex"("terminator")
     .return ($P228)
@@ -3555,7 +3557,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator"  :subid("55_1282324002.40722") :method
+.sub "!PREFIX__terminator"  :subid("55_1284728478.15265") :method
 .annotate 'line', 148
     $P230 = self."!PREFIX__!protoregex"("terminator")
     .return ($P230)
@@ -3563,7 +3565,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator:sym<;>"  :subid("56_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "terminator:sym<;>"  :subid("56_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx232_tgt
     .local int rx232_pos
@@ -3585,9 +3587,9 @@
     substr rx232_tgt, rx232_tgt, rx232_off
   rx232_start:
     eq $I10, 1, rx232_restart
-    if_null rx232_debug, debug_472
+    if_null rx232_debug, debug_478
     rx232_cur."!cursor_debug"("START", "terminator:sym<;>")
-  debug_472:
+  debug_478:
     $I10 = self.'from'()
     ne $I10, -1, rxscan235_done
     goto rxscan235_scan
@@ -3602,22 +3604,21 @@
   rxscan235_done:
 .annotate 'line', 150
   # rx enumcharlist negate=0 zerowidth
-    ge rx232_pos, rx232_eos, rx232_fail
     sub $I10, rx232_pos, rx232_off
     substr $S10, rx232_tgt, $I10, 1
     index $I11, ";", $S10
     lt $I11, 0, rx232_fail
   # rx pass
     rx232_cur."!cursor_pass"(rx232_pos, "terminator:sym<;>")
-    if_null rx232_debug, debug_473
+    if_null rx232_debug, debug_479
     rx232_cur."!cursor_debug"("PASS", "terminator:sym<;>", " at pos=", rx232_pos)
-  debug_473:
+  debug_479:
     .return (rx232_cur)
   rx232_restart:
 .annotate 'line', 4
-    if_null rx232_debug, debug_474
+    if_null rx232_debug, debug_480
     rx232_cur."!cursor_debug"("NEXT", "terminator:sym<;>")
-  debug_474:
+  debug_480:
   rx232_fail:
     (rx232_rep, rx232_pos, $I10, $P10) = rx232_cur."!mark_fail"(0)
     lt rx232_pos, -1, rx232_done
@@ -3625,16 +3626,16 @@
     jump $I10
   rx232_done:
     rx232_cur."!cursor_fail"()
-    if_null rx232_debug, debug_475
+    if_null rx232_debug, debug_481
     rx232_cur."!cursor_debug"("FAIL", "terminator:sym<;>")
-  debug_475:
+  debug_481:
     .return (rx232_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator:sym<;>"  :subid("57_1282324002.40722") :method
+.sub "!PREFIX__terminator:sym<;>"  :subid("57_1284728478.15265") :method
 .annotate 'line', 4
     new $P234, "ResizablePMCArray"
     push $P234, ";"
@@ -3643,7 +3644,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator:sym<}>"  :subid("58_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "terminator:sym<}>"  :subid("58_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx237_tgt
     .local int rx237_pos
@@ -3665,9 +3666,9 @@
     substr rx237_tgt, rx237_tgt, rx237_off
   rx237_start:
     eq $I10, 1, rx237_restart
-    if_null rx237_debug, debug_476
+    if_null rx237_debug, debug_482
     rx237_cur."!cursor_debug"("START", "terminator:sym<}>")
-  debug_476:
+  debug_482:
     $I10 = self.'from'()
     ne $I10, -1, rxscan240_done
     goto rxscan240_scan
@@ -3682,22 +3683,21 @@
   rxscan240_done:
 .annotate 'line', 151
   # rx enumcharlist negate=0 zerowidth
-    ge rx237_pos, rx237_eos, rx237_fail
     sub $I10, rx237_pos, rx237_off
     substr $S10, rx237_tgt, $I10, 1
     index $I11, "}", $S10
     lt $I11, 0, rx237_fail
   # rx pass
     rx237_cur."!cursor_pass"(rx237_pos, "terminator:sym<}>")
-    if_null rx237_debug, debug_477
+    if_null rx237_debug, debug_483
     rx237_cur."!cursor_debug"("PASS", "terminator:sym<}>", " at pos=", rx237_pos)
-  debug_477:
+  debug_483:
     .return (rx237_cur)
   rx237_restart:
 .annotate 'line', 4
-    if_null rx237_debug, debug_478
+    if_null rx237_debug, debug_484
     rx237_cur."!cursor_debug"("NEXT", "terminator:sym<}>")
-  debug_478:
+  debug_484:
   rx237_fail:
     (rx237_rep, rx237_pos, $I10, $P10) = rx237_cur."!mark_fail"(0)
     lt rx237_pos, -1, rx237_done
@@ -3705,16 +3705,16 @@
     jump $I10
   rx237_done:
     rx237_cur."!cursor_fail"()
-    if_null rx237_debug, debug_479
+    if_null rx237_debug, debug_485
     rx237_cur."!cursor_debug"("FAIL", "terminator:sym<}>")
-  debug_479:
+  debug_485:
     .return (rx237_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator:sym<}>"  :subid("59_1282324002.40722") :method
+.sub "!PREFIX__terminator:sym<}>"  :subid("59_1284728478.15265") :method
 .annotate 'line', 4
     new $P239, "ResizablePMCArray"
     push $P239, "}"
@@ -3723,7 +3723,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control"  :subid("60_1282324002.40722") :method
+.sub "statement_control"  :subid("60_1284728478.15265") :method
 .annotate 'line', 155
     $P242 = self."!protoregex"("statement_control")
     .return ($P242)
@@ -3731,7 +3731,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control"  :subid("61_1282324002.40722") :method
+.sub "!PREFIX__statement_control"  :subid("61_1284728478.15265") :method
 .annotate 'line', 155
     $P244 = self."!PREFIX__!protoregex"("statement_control")
     .return ($P244)
@@ -3739,7 +3739,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<if>"  :subid("62_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "statement_control:sym<if>"  :subid("62_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx246_tgt
     .local int rx246_pos
@@ -3762,9 +3762,9 @@
     substr rx246_tgt, rx246_tgt, rx246_off
   rx246_start:
     eq $I10, 1, rx246_restart
-    if_null rx246_debug, debug_480
+    if_null rx246_debug, debug_486
     rx246_cur."!cursor_debug"("START", "statement_control:sym<if>")
-  debug_480:
+  debug_486:
     $I10 = self.'from'()
     ne $I10, -1, rxscan249_done
     goto rxscan249_scan
@@ -3925,15 +3925,15 @@
 .annotate 'line', 157
   # rx pass
     rx246_cur."!cursor_pass"(rx246_pos, "statement_control:sym<if>")
-    if_null rx246_debug, debug_481
+    if_null rx246_debug, debug_487
     rx246_cur."!cursor_debug"("PASS", "statement_control:sym<if>", " at pos=", rx246_pos)
-  debug_481:
+  debug_487:
     .return (rx246_cur)
   rx246_restart:
 .annotate 'line', 4
-    if_null rx246_debug, debug_482
+    if_null rx246_debug, debug_488
     rx246_cur."!cursor_debug"("NEXT", "statement_control:sym<if>")
-  debug_482:
+  debug_488:
   rx246_fail:
     (rx246_rep, rx246_pos, $I10, $P10) = rx246_cur."!mark_fail"(0)
     lt rx246_pos, -1, rx246_done
@@ -3941,16 +3941,16 @@
     jump $I10
   rx246_done:
     rx246_cur."!cursor_fail"()
-    if_null rx246_debug, debug_483
+    if_null rx246_debug, debug_489
     rx246_cur."!cursor_debug"("FAIL", "statement_control:sym<if>")
-  debug_483:
+  debug_489:
     .return (rx246_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<if>"  :subid("63_1282324002.40722") :method
+.sub "!PREFIX__statement_control:sym<if>"  :subid("63_1284728478.15265") :method
 .annotate 'line', 4
     new $P248, "ResizablePMCArray"
     push $P248, "if"
@@ -3959,9 +3959,9 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<unless>"  :subid("64_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "statement_control:sym<unless>"  :subid("64_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .const 'Sub' $P274 = "66_1282324002.40722" 
+    .const 'Sub' $P274 = "66_1284728478.15265" 
     capture_lex $P274
     .local string rx264_tgt
     .local int rx264_pos
@@ -3983,9 +3983,9 @@
     substr rx264_tgt, rx264_tgt, rx264_off
   rx264_start:
     eq $I10, 1, rx264_restart
-    if_null rx264_debug, debug_484
+    if_null rx264_debug, debug_490
     rx264_cur."!cursor_debug"("START", "statement_control:sym<unless>")
-  debug_484:
+  debug_490:
     $I10 = self.'from'()
     ne $I10, -1, rxscan267_done
     goto rxscan267_scan
@@ -4055,7 +4055,7 @@
     rx264_pos = $P10."pos"()
   # rx subrule "before" subtype=zerowidth negate=1
     rx264_cur."!cursor_pos"(rx264_pos)
-    .const 'Sub' $P274 = "66_1282324002.40722" 
+    .const 'Sub' $P274 = "66_1284728478.15265" 
     capture_lex $P274
     $P10 = rx264_cur."before"($P274)
     if $P10, rx264_fail
@@ -4090,15 +4090,15 @@
 .annotate 'line', 164
   # rx pass
     rx264_cur."!cursor_pass"(rx264_pos, "statement_control:sym<unless>")
-    if_null rx264_debug, debug_489
+    if_null rx264_debug, debug_495
     rx264_cur."!cursor_debug"("PASS", "statement_control:sym<unless>", " at pos=", rx264_pos)
-  debug_489:
+  debug_495:
     .return (rx264_cur)
   rx264_restart:
 .annotate 'line', 4
-    if_null rx264_debug, debug_490
+    if_null rx264_debug, debug_496
     rx264_cur."!cursor_debug"("NEXT", "statement_control:sym<unless>")
-  debug_490:
+  debug_496:
   rx264_fail:
     (rx264_rep, rx264_pos, $I10, $P10) = rx264_cur."!mark_fail"(0)
     lt rx264_pos, -1, rx264_done
@@ -4106,16 +4106,16 @@
     jump $I10
   rx264_done:
     rx264_cur."!cursor_fail"()
-    if_null rx264_debug, debug_491
+    if_null rx264_debug, debug_497
     rx264_cur."!cursor_debug"("FAIL", "statement_control:sym<unless>")
-  debug_491:
+  debug_497:
     .return (rx264_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<unless>"  :subid("65_1282324002.40722") :method
+.sub "!PREFIX__statement_control:sym<unless>"  :subid("65_1284728478.15265") :method
 .annotate 'line', 4
     new $P266, "ResizablePMCArray"
     push $P266, "unless"
@@ -4124,7 +4124,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block273"  :anon :subid("66_1282324002.40722") :method :outer("64_1282324002.40722")
+.sub "_block273"  :anon :subid("66_1284728478.15265") :method :outer("64_1284728478.15265")
 .annotate 'line', 167
     .local string rx275_tgt
     .local int rx275_pos
@@ -4146,9 +4146,9 @@
     substr rx275_tgt, rx275_tgt, rx275_off
   rx275_start:
     eq $I10, 1, rx275_restart
-    if_null rx275_debug, debug_485
+    if_null rx275_debug, debug_491
     rx275_cur."!cursor_debug"("START", "")
-  debug_485:
+  debug_491:
     $I10 = self.'from'()
     ne $I10, -1, rxscan276_done
     goto rxscan276_scan
@@ -4170,14 +4170,14 @@
     add rx275_pos, 4
   # rx pass
     rx275_cur."!cursor_pass"(rx275_pos, "")
-    if_null rx275_debug, debug_486
+    if_null rx275_debug, debug_492
     rx275_cur."!cursor_debug"("PASS", "", " at pos=", rx275_pos)
-  debug_486:
+  debug_492:
     .return (rx275_cur)
   rx275_restart:
-    if_null rx275_debug, debug_487
+    if_null rx275_debug, debug_493
     rx275_cur."!cursor_debug"("NEXT", "")
-  debug_487:
+  debug_493:
   rx275_fail:
     (rx275_rep, rx275_pos, $I10, $P10) = rx275_cur."!mark_fail"(0)
     lt rx275_pos, -1, rx275_done
@@ -4185,16 +4185,16 @@
     jump $I10
   rx275_done:
     rx275_cur."!cursor_fail"()
-    if_null rx275_debug, debug_488
+    if_null rx275_debug, debug_494
     rx275_cur."!cursor_debug"("FAIL", "")
-  debug_488:
+  debug_494:
     .return (rx275_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<while>"  :subid("67_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "statement_control:sym<while>"  :subid("67_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx282_tgt
     .local int rx282_pos
@@ -4216,9 +4216,9 @@
     substr rx282_tgt, rx282_tgt, rx282_off
   rx282_start:
     eq $I10, 1, rx282_restart
-    if_null rx282_debug, debug_492
+    if_null rx282_debug, debug_498
     rx282_cur."!cursor_debug"("START", "statement_control:sym<while>")
-  debug_492:
+  debug_498:
     $I10 = self.'from'()
     ne $I10, -1, rxscan285_done
     goto rxscan285_scan
@@ -4293,15 +4293,15 @@
 .annotate 'line', 170
   # rx pass
     rx282_cur."!cursor_pass"(rx282_pos, "statement_control:sym<while>")
-    if_null rx282_debug, debug_493
+    if_null rx282_debug, debug_499
     rx282_cur."!cursor_debug"("PASS", "statement_control:sym<while>", " at pos=", rx282_pos)
-  debug_493:
+  debug_499:
     .return (rx282_cur)
   rx282_restart:
 .annotate 'line', 4
-    if_null rx282_debug, debug_494
+    if_null rx282_debug, debug_500
     rx282_cur."!cursor_debug"("NEXT", "statement_control:sym<while>")
-  debug_494:
+  debug_500:
   rx282_fail:
     (rx282_rep, rx282_pos, $I10, $P10) = rx282_cur."!mark_fail"(0)
     lt rx282_pos, -1, rx282_done
@@ -4309,16 +4309,16 @@
     jump $I10
   rx282_done:
     rx282_cur."!cursor_fail"()
-    if_null rx282_debug, debug_495
+    if_null rx282_debug, debug_501
     rx282_cur."!cursor_debug"("FAIL", "statement_control:sym<while>")
-  debug_495:
+  debug_501:
     .return (rx282_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<while>"  :subid("68_1282324002.40722") :method
+.sub "!PREFIX__statement_control:sym<while>"  :subid("68_1284728478.15265") :method
 .annotate 'line', 4
     new $P284, "ResizablePMCArray"
     push $P284, "until"
@@ -4328,7 +4328,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<repeat>"  :subid("69_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "statement_control:sym<repeat>"  :subid("69_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx291_tgt
     .local int rx291_pos
@@ -4350,9 +4350,9 @@
     substr rx291_tgt, rx291_tgt, rx291_off
   rx291_start:
     eq $I10, 1, rx291_restart
-    if_null rx291_debug, debug_496
+    if_null rx291_debug, debug_502
     rx291_cur."!cursor_debug"("START", "statement_control:sym<repeat>")
-  debug_496:
+  debug_502:
     $I10 = self.'from'()
     ne $I10, -1, rxscan294_done
     goto rxscan294_scan
@@ -4552,15 +4552,15 @@
 .annotate 'line', 175
   # rx pass
     rx291_cur."!cursor_pass"(rx291_pos, "statement_control:sym<repeat>")
-    if_null rx291_debug, debug_497
+    if_null rx291_debug, debug_503
     rx291_cur."!cursor_debug"("PASS", "statement_control:sym<repeat>", " at pos=", rx291_pos)
-  debug_497:
+  debug_503:
     .return (rx291_cur)
   rx291_restart:
 .annotate 'line', 4
-    if_null rx291_debug, debug_498
+    if_null rx291_debug, debug_504
     rx291_cur."!cursor_debug"("NEXT", "statement_control:sym<repeat>")
-  debug_498:
+  debug_504:
   rx291_fail:
     (rx291_rep, rx291_pos, $I10, $P10) = rx291_cur."!mark_fail"(0)
     lt rx291_pos, -1, rx291_done
@@ -4568,16 +4568,16 @@
     jump $I10
   rx291_done:
     rx291_cur."!cursor_fail"()
-    if_null rx291_debug, debug_499
+    if_null rx291_debug, debug_505
     rx291_cur."!cursor_debug"("FAIL", "statement_control:sym<repeat>")
-  debug_499:
+  debug_505:
     .return (rx291_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<repeat>"  :subid("70_1282324002.40722") :method
+.sub "!PREFIX__statement_control:sym<repeat>"  :subid("70_1284728478.15265") :method
 .annotate 'line', 4
     new $P293, "ResizablePMCArray"
     push $P293, "repeat"
@@ -4586,7 +4586,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<for>"  :subid("71_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "statement_control:sym<for>"  :subid("71_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx311_tgt
     .local int rx311_pos
@@ -4608,9 +4608,9 @@
     substr rx311_tgt, rx311_tgt, rx311_off
   rx311_start:
     eq $I10, 1, rx311_restart
-    if_null rx311_debug, debug_500
+    if_null rx311_debug, debug_506
     rx311_cur."!cursor_debug"("START", "statement_control:sym<for>")
-  debug_500:
+  debug_506:
     $I10 = self.'from'()
     ne $I10, -1, rxscan314_done
     goto rxscan314_scan
@@ -4672,15 +4672,15 @@
 .annotate 'line', 183
   # rx pass
     rx311_cur."!cursor_pass"(rx311_pos, "statement_control:sym<for>")
-    if_null rx311_debug, debug_501
+    if_null rx311_debug, debug_507
     rx311_cur."!cursor_debug"("PASS", "statement_control:sym<for>", " at pos=", rx311_pos)
-  debug_501:
+  debug_507:
     .return (rx311_cur)
   rx311_restart:
 .annotate 'line', 4
-    if_null rx311_debug, debug_502
+    if_null rx311_debug, debug_508
     rx311_cur."!cursor_debug"("NEXT", "statement_control:sym<for>")
-  debug_502:
+  debug_508:
   rx311_fail:
     (rx311_rep, rx311_pos, $I10, $P10) = rx311_cur."!mark_fail"(0)
     lt rx311_pos, -1, rx311_done
@@ -4688,16 +4688,16 @@
     jump $I10
   rx311_done:
     rx311_cur."!cursor_fail"()
-    if_null rx311_debug, debug_503
+    if_null rx311_debug, debug_509
     rx311_cur."!cursor_debug"("FAIL", "statement_control:sym<for>")
-  debug_503:
+  debug_509:
     .return (rx311_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<for>"  :subid("72_1282324002.40722") :method
+.sub "!PREFIX__statement_control:sym<for>"  :subid("72_1284728478.15265") :method
 .annotate 'line', 4
     new $P313, "ResizablePMCArray"
     push $P313, "for"
@@ -4706,7 +4706,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<CATCH>"  :subid("73_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "statement_control:sym<CATCH>"  :subid("73_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx319_tgt
     .local int rx319_pos
@@ -4728,9 +4728,9 @@
     substr rx319_tgt, rx319_tgt, rx319_off
   rx319_start:
     eq $I10, 1, rx319_restart
-    if_null rx319_debug, debug_504
+    if_null rx319_debug, debug_510
     rx319_cur."!cursor_debug"("START", "statement_control:sym<CATCH>")
-  debug_504:
+  debug_510:
     $I10 = self.'from'()
     ne $I10, -1, rxscan322_done
     goto rxscan322_scan
@@ -4792,15 +4792,15 @@
 .annotate 'line', 188
   # rx pass
     rx319_cur."!cursor_pass"(rx319_pos, "statement_control:sym<CATCH>")
-    if_null rx319_debug, debug_505
+    if_null rx319_debug, debug_511
     rx319_cur."!cursor_debug"("PASS", "statement_control:sym<CATCH>", " at pos=", rx319_pos)
-  debug_505:
+  debug_511:
     .return (rx319_cur)
   rx319_restart:
 .annotate 'line', 4
-    if_null rx319_debug, debug_506
+    if_null rx319_debug, debug_512
     rx319_cur."!cursor_debug"("NEXT", "statement_control:sym<CATCH>")
-  debug_506:
+  debug_512:
   rx319_fail:
     (rx319_rep, rx319_pos, $I10, $P10) = rx319_cur."!mark_fail"(0)
     lt rx319_pos, -1, rx319_done
@@ -4808,16 +4808,16 @@
     jump $I10
   rx319_done:
     rx319_cur."!cursor_fail"()
-    if_null rx319_debug, debug_507
+    if_null rx319_debug, debug_513
     rx319_cur."!cursor_debug"("FAIL", "statement_control:sym<CATCH>")
-  debug_507:
+  debug_513:
     .return (rx319_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<CATCH>"  :subid("74_1282324002.40722") :method
+.sub "!PREFIX__statement_control:sym<CATCH>"  :subid("74_1284728478.15265") :method
 .annotate 'line', 4
     new $P321, "ResizablePMCArray"
     push $P321, "CATCH"
@@ -4826,7 +4826,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<CONTROL>"  :subid("75_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "statement_control:sym<CONTROL>"  :subid("75_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx327_tgt
     .local int rx327_pos
@@ -4848,9 +4848,9 @@
     substr rx327_tgt, rx327_tgt, rx327_off
   rx327_start:
     eq $I10, 1, rx327_restart
-    if_null rx327_debug, debug_508
+    if_null rx327_debug, debug_514
     rx327_cur."!cursor_debug"("START", "statement_control:sym<CONTROL>")
-  debug_508:
+  debug_514:
     $I10 = self.'from'()
     ne $I10, -1, rxscan330_done
     goto rxscan330_scan
@@ -4912,15 +4912,15 @@
 .annotate 'line', 193
   # rx pass
     rx327_cur."!cursor_pass"(rx327_pos, "statement_control:sym<CONTROL>")
-    if_null rx327_debug, debug_509
+    if_null rx327_debug, debug_515
     rx327_cur."!cursor_debug"("PASS", "statement_control:sym<CONTROL>", " at pos=", rx327_pos)
-  debug_509:
+  debug_515:
     .return (rx327_cur)
   rx327_restart:
 .annotate 'line', 4
-    if_null rx327_debug, debug_510
+    if_null rx327_debug, debug_516
     rx327_cur."!cursor_debug"("NEXT", "statement_control:sym<CONTROL>")
-  debug_510:
+  debug_516:
   rx327_fail:
     (rx327_rep, rx327_pos, $I10, $P10) = rx327_cur."!mark_fail"(0)
     lt rx327_pos, -1, rx327_done
@@ -4928,16 +4928,16 @@
     jump $I10
   rx327_done:
     rx327_cur."!cursor_fail"()
-    if_null rx327_debug, debug_511
+    if_null rx327_debug, debug_517
     rx327_cur."!cursor_debug"("FAIL", "statement_control:sym<CONTROL>")
-  debug_511:
+  debug_517:
     .return (rx327_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<CONTROL>"  :subid("76_1282324002.40722") :method
+.sub "!PREFIX__statement_control:sym<CONTROL>"  :subid("76_1284728478.15265") :method
 .annotate 'line', 4
     new $P329, "ResizablePMCArray"
     push $P329, "CONTROL"
@@ -4946,7 +4946,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix"  :subid("77_1282324002.40722") :method
+.sub "statement_prefix"  :subid("77_1284728478.15265") :method
 .annotate 'line', 198
     $P335 = self."!protoregex"("statement_prefix")
     .return ($P335)
@@ -4954,7 +4954,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix"  :subid("78_1282324002.40722") :method
+.sub "!PREFIX__statement_prefix"  :subid("78_1284728478.15265") :method
 .annotate 'line', 198
     $P337 = self."!PREFIX__!protoregex"("statement_prefix")
     .return ($P337)
@@ -4962,7 +4962,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix:sym<INIT>"  :subid("79_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "statement_prefix:sym<INIT>"  :subid("79_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx339_tgt
     .local int rx339_pos
@@ -4984,9 +4984,9 @@
     substr rx339_tgt, rx339_tgt, rx339_off
   rx339_start:
     eq $I10, 1, rx339_restart
-    if_null rx339_debug, debug_512
+    if_null rx339_debug, debug_518
     rx339_cur."!cursor_debug"("START", "statement_prefix:sym<INIT>")
-  debug_512:
+  debug_518:
     $I10 = self.'from'()
     ne $I10, -1, rxscan343_done
     goto rxscan343_scan
@@ -5030,15 +5030,15 @@
     rx339_pos = $P10."pos"()
   # rx pass
     rx339_cur."!cursor_pass"(rx339_pos, "statement_prefix:sym<INIT>")
-    if_null rx339_debug, debug_513
+    if_null rx339_debug, debug_519
     rx339_cur."!cursor_debug"("PASS", "statement_prefix:sym<INIT>", " at pos=", rx339_pos)
-  debug_513:
+  debug_519:
     .return (rx339_cur)
   rx339_restart:
 .annotate 'line', 4
-    if_null rx339_debug, debug_514
+    if_null rx339_debug, debug_520
     rx339_cur."!cursor_debug"("NEXT", "statement_prefix:sym<INIT>")
-  debug_514:
+  debug_520:
   rx339_fail:
     (rx339_rep, rx339_pos, $I10, $P10) = rx339_cur."!mark_fail"(0)
     lt rx339_pos, -1, rx339_done
@@ -5046,16 +5046,16 @@
     jump $I10
   rx339_done:
     rx339_cur."!cursor_fail"()
-    if_null rx339_debug, debug_515
+    if_null rx339_debug, debug_521
     rx339_cur."!cursor_debug"("FAIL", "statement_prefix:sym<INIT>")
-  debug_515:
+  debug_521:
     .return (rx339_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix:sym<INIT>"  :subid("80_1282324002.40722") :method
+.sub "!PREFIX__statement_prefix:sym<INIT>"  :subid("80_1284728478.15265") :method
 .annotate 'line', 4
     $P341 = self."!PREFIX__!subrule"("blorst", "INIT")
     new $P342, "ResizablePMCArray"
@@ -5065,7 +5065,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix:sym<try>"  :subid("81_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "statement_prefix:sym<try>"  :subid("81_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx346_tgt
     .local int rx346_pos
@@ -5087,9 +5087,9 @@
     substr rx346_tgt, rx346_tgt, rx346_off
   rx346_start:
     eq $I10, 1, rx346_restart
-    if_null rx346_debug, debug_516
+    if_null rx346_debug, debug_522
     rx346_cur."!cursor_debug"("START", "statement_prefix:sym<try>")
-  debug_516:
+  debug_522:
     $I10 = self.'from'()
     ne $I10, -1, rxscan350_done
     goto rxscan350_scan
@@ -5135,15 +5135,15 @@
 .annotate 'line', 201
   # rx pass
     rx346_cur."!cursor_pass"(rx346_pos, "statement_prefix:sym<try>")
-    if_null rx346_debug, debug_517
+    if_null rx346_debug, debug_523
     rx346_cur."!cursor_debug"("PASS", "statement_prefix:sym<try>", " at pos=", rx346_pos)
-  debug_517:
+  debug_523:
     .return (rx346_cur)
   rx346_restart:
 .annotate 'line', 4
-    if_null rx346_debug, debug_518
+    if_null rx346_debug, debug_524
     rx346_cur."!cursor_debug"("NEXT", "statement_prefix:sym<try>")
-  debug_518:
+  debug_524:
   rx346_fail:
     (rx346_rep, rx346_pos, $I10, $P10) = rx346_cur."!mark_fail"(0)
     lt rx346_pos, -1, rx346_done
@@ -5151,16 +5151,16 @@
     jump $I10
   rx346_done:
     rx346_cur."!cursor_fail"()
-    if_null rx346_debug, debug_519
+    if_null rx346_debug, debug_525
     rx346_cur."!cursor_debug"("FAIL", "statement_prefix:sym<try>")
-  debug_519:
+  debug_525:
     .return (rx346_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix:sym<try>"  :subid("82_1282324002.40722") :method
+.sub "!PREFIX__statement_prefix:sym<try>"  :subid("82_1284728478.15265") :method
 .annotate 'line', 4
     $P348 = self."!PREFIX__!subrule"("blorst", "try")
     new $P349, "ResizablePMCArray"
@@ -5170,7 +5170,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "blorst"  :subid("83_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "blorst"  :subid("83_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx353_tgt
     .local int rx353_pos
@@ -5192,9 +5192,9 @@
     substr rx353_tgt, rx353_tgt, rx353_off
   rx353_start:
     eq $I10, 1, rx353_restart
-    if_null rx353_debug, debug_520
+    if_null rx353_debug, debug_526
     rx353_cur."!cursor_debug"("START", "blorst")
-  debug_520:
+  debug_526:
     $I10 = self.'from'()
     ne $I10, -1, rxscan356_done
     goto rxscan356_scan
@@ -5223,7 +5223,6 @@
     set_addr $I10, alt357_1
     rx353_cur."!mark_push"(0, rx353_pos, $I10)
   # rx enumcharlist negate=0 zerowidth
-    ge rx353_pos, rx353_eos, rx353_fail
     sub $I10, rx353_pos, rx353_off
     substr $S10, rx353_tgt, $I10, 1
     index $I11, "{", $S10
@@ -5248,15 +5247,15 @@
 .annotate 'line', 206
   # rx pass
     rx353_cur."!cursor_pass"(rx353_pos, "blorst")
-    if_null rx353_debug, debug_521
+    if_null rx353_debug, debug_527
     rx353_cur."!cursor_debug"("PASS", "blorst", " at pos=", rx353_pos)
-  debug_521:
+  debug_527:
     .return (rx353_cur)
   rx353_restart:
 .annotate 'line', 4
-    if_null rx353_debug, debug_522
+    if_null rx353_debug, debug_528
     rx353_cur."!cursor_debug"("NEXT", "blorst")
-  debug_522:
+  debug_528:
   rx353_fail:
     (rx353_rep, rx353_pos, $I10, $P10) = rx353_cur."!mark_fail"(0)
     lt rx353_pos, -1, rx353_done
@@ -5264,16 +5263,16 @@
     jump $I10
   rx353_done:
     rx353_cur."!cursor_fail"()
-    if_null rx353_debug, debug_523
+    if_null rx353_debug, debug_529
     rx353_cur."!cursor_debug"("FAIL", "blorst")
-  debug_523:
+  debug_529:
     .return (rx353_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__blorst"  :subid("84_1282324002.40722") :method
+.sub "!PREFIX__blorst"  :subid("84_1284728478.15265") :method
 .annotate 'line', 4
     new $P355, "ResizablePMCArray"
     push $P355, ""
@@ -5282,7 +5281,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond"  :subid("85_1282324002.40722") :method
+.sub "statement_mod_cond"  :subid("85_1284728478.15265") :method
 .annotate 'line', 212
     $P359 = self."!protoregex"("statement_mod_cond")
     .return ($P359)
@@ -5290,7 +5289,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond"  :subid("86_1282324002.40722") :method
+.sub "!PREFIX__statement_mod_cond"  :subid("86_1284728478.15265") :method
 .annotate 'line', 212
     $P361 = self."!PREFIX__!protoregex"("statement_mod_cond")
     .return ($P361)
@@ -5298,7 +5297,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond:sym<if>"  :subid("87_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "statement_mod_cond:sym<if>"  :subid("87_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx363_tgt
     .local int rx363_pos
@@ -5320,9 +5319,9 @@
     substr rx363_tgt, rx363_tgt, rx363_off
   rx363_start:
     eq $I10, 1, rx363_restart
-    if_null rx363_debug, debug_524
+    if_null rx363_debug, debug_530
     rx363_cur."!cursor_debug"("START", "statement_mod_cond:sym<if>")
-  debug_524:
+  debug_530:
     $I10 = self.'from'()
     ne $I10, -1, rxscan367_done
     goto rxscan367_scan
@@ -5376,15 +5375,15 @@
     rx363_pos = $P10."pos"()
   # rx pass
     rx363_cur."!cursor_pass"(rx363_pos, "statement_mod_cond:sym<if>")
-    if_null rx363_debug, debug_525
+    if_null rx363_debug, debug_531
     rx363_cur."!cursor_debug"("PASS", "statement_mod_cond:sym<if>", " at pos=", rx363_pos)
-  debug_525:
+  debug_531:
     .return (rx363_cur)
   rx363_restart:
 .annotate 'line', 4
-    if_null rx363_debug, debug_526
+    if_null rx363_debug, debug_532
     rx363_cur."!cursor_debug"("NEXT", "statement_mod_cond:sym<if>")
-  debug_526:
+  debug_532:
   rx363_fail:
     (rx363_rep, rx363_pos, $I10, $P10) = rx363_cur."!mark_fail"(0)
     lt rx363_pos, -1, rx363_done
@@ -5392,16 +5391,16 @@
     jump $I10
   rx363_done:
     rx363_cur."!cursor_fail"()
-    if_null rx363_debug, debug_527
+    if_null rx363_debug, debug_533
     rx363_cur."!cursor_debug"("FAIL", "statement_mod_cond:sym<if>")
-  debug_527:
+  debug_533:
     .return (rx363_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond:sym<if>"  :subid("88_1282324002.40722") :method
+.sub "!PREFIX__statement_mod_cond:sym<if>"  :subid("88_1284728478.15265") :method
 .annotate 'line', 4
     $P365 = self."!PREFIX__!subrule"("ws", "if")
     new $P366, "ResizablePMCArray"
@@ -5411,7 +5410,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond:sym<unless>"  :subid("89_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "statement_mod_cond:sym<unless>"  :subid("89_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx372_tgt
     .local int rx372_pos
@@ -5433,9 +5432,9 @@
     substr rx372_tgt, rx372_tgt, rx372_off
   rx372_start:
     eq $I10, 1, rx372_restart
-    if_null rx372_debug, debug_528
+    if_null rx372_debug, debug_534
     rx372_cur."!cursor_debug"("START", "statement_mod_cond:sym<unless>")
-  debug_528:
+  debug_534:
     $I10 = self.'from'()
     ne $I10, -1, rxscan376_done
     goto rxscan376_scan
@@ -5489,15 +5488,15 @@
     rx372_pos = $P10."pos"()
   # rx pass
     rx372_cur."!cursor_pass"(rx372_pos, "statement_mod_cond:sym<unless>")
-    if_null rx372_debug, debug_529
+    if_null rx372_debug, debug_535
     rx372_cur."!cursor_debug"("PASS", "statement_mod_cond:sym<unless>", " at pos=", rx372_pos)
-  debug_529:
+  debug_535:
     .return (rx372_cur)
   rx372_restart:
 .annotate 'line', 4
-    if_null rx372_debug, debug_530
+    if_null rx372_debug, debug_536
     rx372_cur."!cursor_debug"("NEXT", "statement_mod_cond:sym<unless>")
-  debug_530:
+  debug_536:
   rx372_fail:
     (rx372_rep, rx372_pos, $I10, $P10) = rx372_cur."!mark_fail"(0)
     lt rx372_pos, -1, rx372_done
@@ -5505,16 +5504,16 @@
     jump $I10
   rx372_done:
     rx372_cur."!cursor_fail"()
-    if_null rx372_debug, debug_531
+    if_null rx372_debug, debug_537
     rx372_cur."!cursor_debug"("FAIL", "statement_mod_cond:sym<unless>")
-  debug_531:
+  debug_537:
     .return (rx372_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond:sym<unless>"  :subid("90_1282324002.40722") :method
+.sub "!PREFIX__statement_mod_cond:sym<unless>"  :subid("90_1284728478.15265") :method
 .annotate 'line', 4
     $P374 = self."!PREFIX__!subrule"("ws", "unless")
     new $P375, "ResizablePMCArray"
@@ -5524,7 +5523,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop"  :subid("91_1282324002.40722") :method
+.sub "statement_mod_loop"  :subid("91_1284728478.15265") :method
 .annotate 'line', 217
     $P381 = self."!protoregex"("statement_mod_loop")
     .return ($P381)
@@ -5532,7 +5531,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop"  :subid("92_1282324002.40722") :method
+.sub "!PREFIX__statement_mod_loop"  :subid("92_1284728478.15265") :method
 .annotate 'line', 217
     $P383 = self."!PREFIX__!protoregex"("statement_mod_loop")
     .return ($P383)
@@ -5540,7 +5539,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop:sym<while>"  :subid("93_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "statement_mod_loop:sym<while>"  :subid("93_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx385_tgt
     .local int rx385_pos
@@ -5562,9 +5561,9 @@
     substr rx385_tgt, rx385_tgt, rx385_off
   rx385_start:
     eq $I10, 1, rx385_restart
-    if_null rx385_debug, debug_532
+    if_null rx385_debug, debug_538
     rx385_cur."!cursor_debug"("START", "statement_mod_loop:sym<while>")
-  debug_532:
+  debug_538:
     $I10 = self.'from'()
     ne $I10, -1, rxscan389_done
     goto rxscan389_scan
@@ -5618,15 +5617,15 @@
     rx385_pos = $P10."pos"()
   # rx pass
     rx385_cur."!cursor_pass"(rx385_pos, "statement_mod_loop:sym<while>")
-    if_null rx385_debug, debug_533
+    if_null rx385_debug, debug_539
     rx385_cur."!cursor_debug"("PASS", "statement_mod_loop:sym<while>", " at pos=", rx385_pos)
-  debug_533:
+  debug_539:
     .return (rx385_cur)
   rx385_restart:
 .annotate 'line', 4
-    if_null rx385_debug, debug_534
+    if_null rx385_debug, debug_540
     rx385_cur."!cursor_debug"("NEXT", "statement_mod_loop:sym<while>")
-  debug_534:
+  debug_540:
   rx385_fail:
     (rx385_rep, rx385_pos, $I10, $P10) = rx385_cur."!mark_fail"(0)
     lt rx385_pos, -1, rx385_done
@@ -5634,16 +5633,16 @@
     jump $I10
   rx385_done:
     rx385_cur."!cursor_fail"()
-    if_null rx385_debug, debug_535
+    if_null rx385_debug, debug_541
     rx385_cur."!cursor_debug"("FAIL", "statement_mod_loop:sym<while>")
-  debug_535:
+  debug_541:
     .return (rx385_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop:sym<while>"  :subid("94_1282324002.40722") :method
+.sub "!PREFIX__statement_mod_loop:sym<while>"  :subid("94_1284728478.15265") :method
 .annotate 'line', 4
     $P387 = self."!PREFIX__!subrule"("ws", "while")
     new $P388, "ResizablePMCArray"
@@ -5653,7 +5652,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop:sym<until>"  :subid("95_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "statement_mod_loop:sym<until>"  :subid("95_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx394_tgt
     .local int rx394_pos
@@ -5675,9 +5674,9 @@
     substr rx394_tgt, rx394_tgt, rx394_off
   rx394_start:
     eq $I10, 1, rx394_restart
-    if_null rx394_debug, debug_536
+    if_null rx394_debug, debug_542
     rx394_cur."!cursor_debug"("START", "statement_mod_loop:sym<until>")
-  debug_536:
+  debug_542:
     $I10 = self.'from'()
     ne $I10, -1, rxscan398_done
     goto rxscan398_scan
@@ -5731,15 +5730,15 @@
     rx394_pos = $P10."pos"()
   # rx pass
     rx394_cur."!cursor_pass"(rx394_pos, "statement_mod_loop:sym<until>")
-    if_null rx394_debug, debug_537
+    if_null rx394_debug, debug_543
     rx394_cur."!cursor_debug"("PASS", "statement_mod_loop:sym<until>", " at pos=", rx394_pos)
-  debug_537:
+  debug_543:
     .return (rx394_cur)
   rx394_restart:
 .annotate 'line', 4
-    if_null rx394_debug, debug_538
+    if_null rx394_debug, debug_544
     rx394_cur."!cursor_debug"("NEXT", "statement_mod_loop:sym<until>")
-  debug_538:
+  debug_544:
   rx394_fail:
     (rx394_rep, rx394_pos, $I10, $P10) = rx394_cur."!mark_fail"(0)
     lt rx394_pos, -1, rx394_done
@@ -5747,16 +5746,16 @@
     jump $I10
   rx394_done:
     rx394_cur."!cursor_fail"()
-    if_null rx394_debug, debug_539
+    if_null rx394_debug, debug_545
     rx394_cur."!cursor_debug"("FAIL", "statement_mod_loop:sym<until>")
-  debug_539:
+  debug_545:
     .return (rx394_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop:sym<until>"  :subid("96_1282324002.40722") :method
+.sub "!PREFIX__statement_mod_loop:sym<until>"  :subid("96_1284728478.15265") :method
 .annotate 'line', 4
     $P396 = self."!PREFIX__!subrule"("ws", "until")
     new $P397, "ResizablePMCArray"
@@ -5766,7 +5765,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop:sym<for>"  :subid("97_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "statement_mod_loop:sym<for>"  :subid("97_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx403_tgt
     .local int rx403_pos
@@ -5788,9 +5787,9 @@
     substr rx403_tgt, rx403_tgt, rx403_off
   rx403_start:
     eq $I10, 1, rx403_restart
-    if_null rx403_debug, debug_540
+    if_null rx403_debug, debug_546
     rx403_cur."!cursor_debug"("START", "statement_mod_loop:sym<for>")
-  debug_540:
+  debug_546:
     $I10 = self.'from'()
     ne $I10, -1, rxscan407_done
     goto rxscan407_scan
@@ -5844,15 +5843,15 @@
     rx403_pos = $P10."pos"()
   # rx pass
     rx403_cur."!cursor_pass"(rx403_pos, "statement_mod_loop:sym<for>")
-    if_null rx403_debug, debug_541
+    if_null rx403_debug, debug_547
     rx403_cur."!cursor_debug"("PASS", "statement_mod_loop:sym<for>", " at pos=", rx403_pos)
-  debug_541:
+  debug_547:
     .return (rx403_cur)
   rx403_restart:
 .annotate 'line', 4
-    if_null rx403_debug, debug_542
+    if_null rx403_debug, debug_548
     rx403_cur."!cursor_debug"("NEXT", "statement_mod_loop:sym<for>")
-  debug_542:
+  debug_548:
   rx403_fail:
     (rx403_rep, rx403_pos, $I10, $P10) = rx403_cur."!mark_fail"(0)
     lt rx403_pos, -1, rx403_done
@@ -5860,16 +5859,16 @@
     jump $I10
   rx403_done:
     rx403_cur."!cursor_fail"()
-    if_null rx403_debug, debug_543
+    if_null rx403_debug, debug_549
     rx403_cur."!cursor_debug"("FAIL", "statement_mod_loop:sym<for>")
-  debug_543:
+  debug_549:
     .return (rx403_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop:sym<for>"  :subid("98_1282324002.40722") :method
+.sub "!PREFIX__statement_mod_loop:sym<for>"  :subid("98_1284728478.15265") :method
 .annotate 'line', 4
     $P405 = self."!PREFIX__!subrule"("ws", "for")
     new $P406, "ResizablePMCArray"
@@ -5879,7 +5878,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<fatarrow>"  :subid("99_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "term:sym<fatarrow>"  :subid("99_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx412_tgt
     .local int rx412_pos
@@ -5901,9 +5900,9 @@
     substr rx412_tgt, rx412_tgt, rx412_off
   rx412_start:
     eq $I10, 1, rx412_restart
-    if_null rx412_debug, debug_544
+    if_null rx412_debug, debug_550
     rx412_cur."!cursor_debug"("START", "term:sym<fatarrow>")
-  debug_544:
+  debug_550:
     $I10 = self.'from'()
     ne $I10, -1, rxscan416_done
     goto rxscan416_scan
@@ -5926,15 +5925,15 @@
     rx412_pos = $P10."pos"()
   # rx pass
     rx412_cur."!cursor_pass"(rx412_pos, "term:sym<fatarrow>")
-    if_null rx412_debug, debug_545
+    if_null rx412_debug, debug_551
     rx412_cur."!cursor_debug"("PASS", "term:sym<fatarrow>", " at pos=", rx412_pos)
-  debug_545:
+  debug_551:
     .return (rx412_cur)
   rx412_restart:
 .annotate 'line', 4
-    if_null rx412_debug, debug_546
+    if_null rx412_debug, debug_552
     rx412_cur."!cursor_debug"("NEXT", "term:sym<fatarrow>")
-  debug_546:
+  debug_552:
   rx412_fail:
     (rx412_rep, rx412_pos, $I10, $P10) = rx412_cur."!mark_fail"(0)
     lt rx412_pos, -1, rx412_done
@@ -5942,16 +5941,16 @@
     jump $I10
   rx412_done:
     rx412_cur."!cursor_fail"()
-    if_null rx412_debug, debug_547
+    if_null rx412_debug, debug_553
     rx412_cur."!cursor_debug"("FAIL", "term:sym<fatarrow>")
-  debug_547:
+  debug_553:
     .return (rx412_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<fatarrow>"  :subid("100_1282324002.40722") :method
+.sub "!PREFIX__term:sym<fatarrow>"  :subid("100_1284728478.15265") :method
 .annotate 'line', 4
     $P414 = self."!PREFIX__!subrule"("fatarrow", "")
     new $P415, "ResizablePMCArray"
@@ -5961,7 +5960,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<colonpair>"  :subid("101_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "term:sym<colonpair>"  :subid("101_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx418_tgt
     .local int rx418_pos
@@ -5983,9 +5982,9 @@
     substr rx418_tgt, rx418_tgt, rx418_off
   rx418_start:
     eq $I10, 1, rx418_restart
-    if_null rx418_debug, debug_548
+    if_null rx418_debug, debug_554
     rx418_cur."!cursor_debug"("START", "term:sym<colonpair>")
-  debug_548:
+  debug_554:
     $I10 = self.'from'()
     ne $I10, -1, rxscan422_done
     goto rxscan422_scan
@@ -6008,15 +6007,15 @@
     rx418_pos = $P10."pos"()
   # rx pass
     rx418_cur."!cursor_pass"(rx418_pos, "term:sym<colonpair>")
-    if_null rx418_debug, debug_549
+    if_null rx418_debug, debug_555
     rx418_cur."!cursor_debug"("PASS", "term:sym<colonpair>", " at pos=", rx418_pos)
-  debug_549:
+  debug_555:
     .return (rx418_cur)
   rx418_restart:
 .annotate 'line', 4
-    if_null rx418_debug, debug_550
+    if_null rx418_debug, debug_556
     rx418_cur."!cursor_debug"("NEXT", "term:sym<colonpair>")
-  debug_550:
+  debug_556:
   rx418_fail:
     (rx418_rep, rx418_pos, $I10, $P10) = rx418_cur."!mark_fail"(0)
     lt rx418_pos, -1, rx418_done
@@ -6024,16 +6023,16 @@
     jump $I10
   rx418_done:
     rx418_cur."!cursor_fail"()
-    if_null rx418_debug, debug_551
+    if_null rx418_debug, debug_557
     rx418_cur."!cursor_debug"("FAIL", "term:sym<colonpair>")
-  debug_551:
+  debug_557:
     .return (rx418_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<colonpair>"  :subid("102_1282324002.40722") :method
+.sub "!PREFIX__term:sym<colonpair>"  :subid("102_1284728478.15265") :method
 .annotate 'line', 4
     $P420 = self."!PREFIX__!subrule"("colonpair", "")
     new $P421, "ResizablePMCArray"
@@ -6043,7 +6042,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<variable>"  :subid("103_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "term:sym<variable>"  :subid("103_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx424_tgt
     .local int rx424_pos
@@ -6065,9 +6064,9 @@
     substr rx424_tgt, rx424_tgt, rx424_off
   rx424_start:
     eq $I10, 1, rx424_restart
-    if_null rx424_debug, debug_552
+    if_null rx424_debug, debug_558
     rx424_cur."!cursor_debug"("START", "term:sym<variable>")
-  debug_552:
+  debug_558:
     $I10 = self.'from'()
     ne $I10, -1, rxscan428_done
     goto rxscan428_scan
@@ -6090,15 +6089,15 @@
     rx424_pos = $P10."pos"()
   # rx pass
     rx424_cur."!cursor_pass"(rx424_pos, "term:sym<variable>")
-    if_null rx424_debug, debug_553
+    if_null rx424_debug, debug_559
     rx424_cur."!cursor_debug"("PASS", "term:sym<variable>", " at pos=", rx424_pos)
-  debug_553:
+  debug_559:
     .return (rx424_cur)
   rx424_restart:
 .annotate 'line', 4
-    if_null rx424_debug, debug_554
+    if_null rx424_debug, debug_560
     rx424_cur."!cursor_debug"("NEXT", "term:sym<variable>")
-  debug_554:
+  debug_560:
   rx424_fail:
     (rx424_rep, rx424_pos, $I10, $P10) = rx424_cur."!mark_fail"(0)
     lt rx424_pos, -1, rx424_done
@@ -6106,16 +6105,16 @@
     jump $I10
   rx424_done:
     rx424_cur."!cursor_fail"()
-    if_null rx424_debug, debug_555
+    if_null rx424_debug, debug_561
     rx424_cur."!cursor_debug"("FAIL", "term:sym<variable>")
-  debug_555:
+  debug_561:
     .return (rx424_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<variable>"  :subid("104_1282324002.40722") :method
+.sub "!PREFIX__term:sym<variable>"  :subid("104_1284728478.15265") :method
 .annotate 'line', 4
     $P426 = self."!PREFIX__!subrule"("variable", "")
     new $P427, "ResizablePMCArray"
@@ -6125,7 +6124,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<package_declarator>"  :subid("105_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "term:sym<package_declarator>"  :subid("105_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx430_tgt
     .local int rx430_pos
@@ -6147,9 +6146,9 @@
     substr rx430_tgt, rx430_tgt, rx430_off
   rx430_start:
     eq $I10, 1, rx430_restart
-    if_null rx430_debug, debug_556
+    if_null rx430_debug, debug_562
     rx430_cur."!cursor_debug"("START", "term:sym<package_declarator>")
-  debug_556:
+  debug_562:
     $I10 = self.'from'()
     ne $I10, -1, rxscan434_done
     goto rxscan434_scan
@@ -6172,15 +6171,15 @@
     rx430_pos = $P10."pos"()
   # rx pass
     rx430_cur."!cursor_pass"(rx430_pos, "term:sym<package_declarator>")
-    if_null rx430_debug, debug_557
+    if_null rx430_debug, debug_563
     rx430_cur."!cursor_debug"("PASS", "term:sym<package_declarator>", " at pos=", rx430_pos)
-  debug_557:
+  debug_563:
     .return (rx430_cur)
   rx430_restart:
 .annotate 'line', 4
-    if_null rx430_debug, debug_558
+    if_null rx430_debug, debug_564
     rx430_cur."!cursor_debug"("NEXT", "term:sym<package_declarator>")
-  debug_558:
+  debug_564:
   rx430_fail:
     (rx430_rep, rx430_pos, $I10, $P10) = rx430_cur."!mark_fail"(0)
     lt rx430_pos, -1, rx430_done
@@ -6188,16 +6187,16 @@
     jump $I10
   rx430_done:
     rx430_cur."!cursor_fail"()
-    if_null rx430_debug, debug_559
+    if_null rx430_debug, debug_565
     rx430_cur."!cursor_debug"("FAIL", "term:sym<package_declarator>")
-  debug_559:
+  debug_565:
     .return (rx430_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<package_declarator>"  :subid("106_1282324002.40722") :method
+.sub "!PREFIX__term:sym<package_declarator>"  :subid("106_1284728478.15265") :method
 .annotate 'line', 4
     $P432 = self."!PREFIX__!subrule"("package_declarator", "")
     new $P433, "ResizablePMCArray"
@@ -6207,7 +6206,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<scope_declarator>"  :subid("107_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "term:sym<scope_declarator>"  :subid("107_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx436_tgt
     .local int rx436_pos
@@ -6229,9 +6228,9 @@
     substr rx436_tgt, rx436_tgt, rx436_off
   rx436_start:
     eq $I10, 1, rx436_restart
-    if_null rx436_debug, debug_560
+    if_null rx436_debug, debug_566
     rx436_cur."!cursor_debug"("START", "term:sym<scope_declarator>")
-  debug_560:
+  debug_566:
     $I10 = self.'from'()
     ne $I10, -1, rxscan440_done
     goto rxscan440_scan
@@ -6254,15 +6253,15 @@
     rx436_pos = $P10."pos"()
   # rx pass
     rx436_cur."!cursor_pass"(rx436_pos, "term:sym<scope_declarator>")
-    if_null rx436_debug, debug_561
+    if_null rx436_debug, debug_567
     rx436_cur."!cursor_debug"("PASS", "term:sym<scope_declarator>", " at pos=", rx436_pos)
-  debug_561:
+  debug_567:
     .return (rx436_cur)
   rx436_restart:
 .annotate 'line', 4
-    if_null rx436_debug, debug_562
+    if_null rx436_debug, debug_568
     rx436_cur."!cursor_debug"("NEXT", "term:sym<scope_declarator>")
-  debug_562:
+  debug_568:
   rx436_fail:
     (rx436_rep, rx436_pos, $I10, $P10) = rx436_cur."!mark_fail"(0)
     lt rx436_pos, -1, rx436_done
@@ -6270,16 +6269,16 @@
     jump $I10
   rx436_done:
     rx436_cur."!cursor_fail"()
-    if_null rx436_debug, debug_563
+    if_null rx436_debug, debug_569
     rx436_cur."!cursor_debug"("FAIL", "term:sym<scope_declarator>")
-  debug_563:
+  debug_569:
     .return (rx436_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<scope_declarator>"  :subid("108_1282324002.40722") :method
+.sub "!PREFIX__term:sym<scope_declarator>"  :subid("108_1284728478.15265") :method
 .annotate 'line', 4
     $P438 = self."!PREFIX__!subrule"("scope_declarator", "")
     new $P439, "ResizablePMCArray"
@@ -6289,7 +6288,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<routine_declarator>"  :subid("109_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "term:sym<routine_declarator>"  :subid("109_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx442_tgt
     .local int rx442_pos
@@ -6311,9 +6310,9 @@
     substr rx442_tgt, rx442_tgt, rx442_off
   rx442_start:
     eq $I10, 1, rx442_restart
-    if_null rx442_debug, debug_564
+    if_null rx442_debug, debug_570
     rx442_cur."!cursor_debug"("START", "term:sym<routine_declarator>")
-  debug_564:
+  debug_570:
     $I10 = self.'from'()
     ne $I10, -1, rxscan446_done
     goto rxscan446_scan
@@ -6336,15 +6335,15 @@
     rx442_pos = $P10."pos"()
   # rx pass
     rx442_cur."!cursor_pass"(rx442_pos, "term:sym<routine_declarator>")
-    if_null rx442_debug, debug_565
+    if_null rx442_debug, debug_571
     rx442_cur."!cursor_debug"("PASS", "term:sym<routine_declarator>", " at pos=", rx442_pos)
-  debug_565:
+  debug_571:
     .return (rx442_cur)
   rx442_restart:
 .annotate 'line', 4
-    if_null rx442_debug, debug_566
+    if_null rx442_debug, debug_572
     rx442_cur."!cursor_debug"("NEXT", "term:sym<routine_declarator>")
-  debug_566:
+  debug_572:
   rx442_fail:
     (rx442_rep, rx442_pos, $I10, $P10) = rx442_cur."!mark_fail"(0)
     lt rx442_pos, -1, rx442_done
@@ -6352,16 +6351,16 @@
     jump $I10
   rx442_done:
     rx442_cur."!cursor_fail"()
-    if_null rx442_debug, debug_567
+    if_null rx442_debug, debug_573
     rx442_cur."!cursor_debug"("FAIL", "term:sym<routine_declarator>")
-  debug_567:
+  debug_573:
     .return (rx442_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<routine_declarator>"  :subid("110_1282324002.40722") :method
+.sub "!PREFIX__term:sym<routine_declarator>"  :subid("110_1284728478.15265") :method
 .annotate 'line', 4
     $P444 = self."!PREFIX__!subrule"("routine_declarator", "")
     new $P445, "ResizablePMCArray"
@@ -6371,9 +6370,9 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<multi_declarator>"  :subid("111_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "term:sym<multi_declarator>"  :subid("111_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .const 'Sub' $P453 = "113_1282324002.40722" 
+    .const 'Sub' $P453 = "113_1284728478.15265" 
     capture_lex $P453
     .local string rx448_tgt
     .local int rx448_pos
@@ -6395,9 +6394,9 @@
     substr rx448_tgt, rx448_tgt, rx448_off
   rx448_start:
     eq $I10, 1, rx448_restart
-    if_null rx448_debug, debug_568
+    if_null rx448_debug, debug_574
     rx448_cur."!cursor_debug"("START", "term:sym<multi_declarator>")
-  debug_568:
+  debug_574:
     $I10 = self.'from'()
     ne $I10, -1, rxscan451_done
     goto rxscan451_scan
@@ -6413,7 +6412,7 @@
 .annotate 'line', 231
   # rx subrule "before" subtype=zerowidth negate=
     rx448_cur."!cursor_pos"(rx448_pos)
-    .const 'Sub' $P453 = "113_1282324002.40722" 
+    .const 'Sub' $P453 = "113_1284728478.15265" 
     capture_lex $P453
     $P10 = rx448_cur."before"($P453)
     unless $P10, rx448_fail
@@ -6426,15 +6425,15 @@
     rx448_pos = $P10."pos"()
   # rx pass
     rx448_cur."!cursor_pass"(rx448_pos, "term:sym<multi_declarator>")
-    if_null rx448_debug, debug_573
+    if_null rx448_debug, debug_579
     rx448_cur."!cursor_debug"("PASS", "term:sym<multi_declarator>", " at pos=", rx448_pos)
-  debug_573:
+  debug_579:
     .return (rx448_cur)
   rx448_restart:
 .annotate 'line', 4
-    if_null rx448_debug, debug_574
+    if_null rx448_debug, debug_580
     rx448_cur."!cursor_debug"("NEXT", "term:sym<multi_declarator>")
-  debug_574:
+  debug_580:
   rx448_fail:
     (rx448_rep, rx448_pos, $I10, $P10) = rx448_cur."!mark_fail"(0)
     lt rx448_pos, -1, rx448_done
@@ -6442,16 +6441,16 @@
     jump $I10
   rx448_done:
     rx448_cur."!cursor_fail"()
-    if_null rx448_debug, debug_575
+    if_null rx448_debug, debug_581
     rx448_cur."!cursor_debug"("FAIL", "term:sym<multi_declarator>")
-  debug_575:
+  debug_581:
     .return (rx448_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<multi_declarator>"  :subid("112_1282324002.40722") :method
+.sub "!PREFIX__term:sym<multi_declarator>"  :subid("112_1284728478.15265") :method
 .annotate 'line', 4
     new $P450, "ResizablePMCArray"
     push $P450, ""
@@ -6460,7 +6459,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block452"  :anon :subid("113_1282324002.40722") :method :outer("111_1282324002.40722")
+.sub "_block452"  :anon :subid("113_1284728478.15265") :method :outer("111_1284728478.15265")
 .annotate 'line', 231
     .local string rx454_tgt
     .local int rx454_pos
@@ -6482,9 +6481,9 @@
     substr rx454_tgt, rx454_tgt, rx454_off
   rx454_start:
     eq $I10, 1, rx454_restart
-    if_null rx454_debug, debug_569
+    if_null rx454_debug, debug_575
     rx454_cur."!cursor_debug"("START", "")
-  debug_569:
+  debug_575:
     $I10 = self.'from'()
     ne $I10, -1, rxscan455_done
     goto rxscan455_scan
@@ -6530,14 +6529,14 @@
   alt456_end:
   # rx pass
     rx454_cur."!cursor_pass"(rx454_pos, "")
-    if_null rx454_debug, debug_570
+    if_null rx454_debug, debug_576
     rx454_cur."!cursor_debug"("PASS", "", " at pos=", rx454_pos)
-  debug_570:
+  debug_576:
     .return (rx454_cur)
   rx454_restart:
-    if_null rx454_debug, debug_571
+    if_null rx454_debug, debug_577
     rx454_cur."!cursor_debug"("NEXT", "")
-  debug_571:
+  debug_577:
   rx454_fail:
     (rx454_rep, rx454_pos, $I10, $P10) = rx454_cur."!mark_fail"(0)
     lt rx454_pos, -1, rx454_done
@@ -6545,16 +6544,16 @@
     jump $I10
   rx454_done:
     rx454_cur."!cursor_fail"()
-    if_null rx454_debug, debug_572
+    if_null rx454_debug, debug_578
     rx454_cur."!cursor_debug"("FAIL", "")
-  debug_572:
+  debug_578:
     .return (rx454_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<regex_declarator>"  :subid("114_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "term:sym<regex_declarator>"  :subid("114_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx458_tgt
     .local int rx458_pos
@@ -6576,9 +6575,9 @@
     substr rx458_tgt, rx458_tgt, rx458_off
   rx458_start:
     eq $I10, 1, rx458_restart
-    if_null rx458_debug, debug_576
+    if_null rx458_debug, debug_582
     rx458_cur."!cursor_debug"("START", "term:sym<regex_declarator>")
-  debug_576:
+  debug_582:
     $I10 = self.'from'()
     ne $I10, -1, rxscan462_done
     goto rxscan462_scan
@@ -6601,15 +6600,15 @@
     rx458_pos = $P10."pos"()
   # rx pass
     rx458_cur."!cursor_pass"(rx458_pos, "term:sym<regex_declarator>")
-    if_null rx458_debug, debug_577
+    if_null rx458_debug, debug_583
     rx458_cur."!cursor_debug"("PASS", "term:sym<regex_declarator>", " at pos=", rx458_pos)
-  debug_577:
+  debug_583:
     .return (rx458_cur)
   rx458_restart:
 .annotate 'line', 4
-    if_null rx458_debug, debug_578
+    if_null rx458_debug, debug_584
     rx458_cur."!cursor_debug"("NEXT", "term:sym<regex_declarator>")
-  debug_578:
+  debug_584:
   rx458_fail:
     (rx458_rep, rx458_pos, $I10, $P10) = rx458_cur."!mark_fail"(0)
     lt rx458_pos, -1, rx458_done
@@ -6617,16 +6616,16 @@
     jump $I10
   rx458_done:
     rx458_cur."!cursor_fail"()
-    if_null rx458_debug, debug_579
+    if_null rx458_debug, debug_585
     rx458_cur."!cursor_debug"("FAIL", "term:sym<regex_declarator>")
-  debug_579:
+  debug_585:
     .return (rx458_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<regex_declarator>"  :subid("115_1282324002.40722") :method
+.sub "!PREFIX__term:sym<regex_declarator>"  :subid("115_1284728478.15265") :method
 .annotate 'line', 4
     $P460 = self."!PREFIX__!subrule"("regex_declarator", "")
     new $P461, "ResizablePMCArray"
@@ -6636,7 +6635,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<statement_prefix>"  :subid("116_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "term:sym<statement_prefix>"  :subid("116_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx464_tgt
     .local int rx464_pos
@@ -6658,9 +6657,9 @@
     substr rx464_tgt, rx464_tgt, rx464_off
   rx464_start:
     eq $I10, 1, rx464_restart
-    if_null rx464_debug, debug_580
+    if_null rx464_debug, debug_586
     rx464_cur."!cursor_debug"("START", "term:sym<statement_prefix>")
-  debug_580:
+  debug_586:
     $I10 = self.'from'()
     ne $I10, -1, rxscan468_done
     goto rxscan468_scan
@@ -6683,15 +6682,15 @@
     rx464_pos = $P10."pos"()
   # rx pass
     rx464_cur."!cursor_pass"(rx464_pos, "term:sym<statement_prefix>")
-    if_null rx464_debug, debug_581
+    if_null rx464_debug, debug_587
     rx464_cur."!cursor_debug"("PASS", "term:sym<statement_prefix>", " at pos=", rx464_pos)
-  debug_581:
+  debug_587:
     .return (rx464_cur)
   rx464_restart:
 .annotate 'line', 4
-    if_null rx464_debug, debug_582
+    if_null rx464_debug, debug_588
     rx464_cur."!cursor_debug"("NEXT", "term:sym<statement_prefix>")
-  debug_582:
+  debug_588:
   rx464_fail:
     (rx464_rep, rx464_pos, $I10, $P10) = rx464_cur."!mark_fail"(0)
     lt rx464_pos, -1, rx464_done
@@ -6699,16 +6698,16 @@
     jump $I10
   rx464_done:
     rx464_cur."!cursor_fail"()
-    if_null rx464_debug, debug_583
+    if_null rx464_debug, debug_589
     rx464_cur."!cursor_debug"("FAIL", "term:sym<statement_prefix>")
-  debug_583:
+  debug_589:
     .return (rx464_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<statement_prefix>"  :subid("117_1282324002.40722") :method
+.sub "!PREFIX__term:sym<statement_prefix>"  :subid("117_1284728478.15265") :method
 .annotate 'line', 4
     $P466 = self."!PREFIX__!subrule"("statement_prefix", "")
     new $P467, "ResizablePMCArray"
@@ -6718,7 +6717,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<lambda>"  :subid("118_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "term:sym<lambda>"  :subid("118_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx470_tgt
     .local int rx470_pos
@@ -6740,9 +6739,9 @@
     substr rx470_tgt, rx470_tgt, rx470_off
   rx470_start:
     eq $I10, 1, rx470_restart
-    if_null rx470_debug, debug_584
+    if_null rx470_debug, debug_590
     rx470_cur."!cursor_debug"("START", "term:sym<lambda>")
-  debug_584:
+  debug_590:
     $I10 = self.'from'()
     ne $I10, -1, rxscan473_done
     goto rxscan473_scan
@@ -6769,15 +6768,15 @@
     rx470_pos = $P10."pos"()
   # rx pass
     rx470_cur."!cursor_pass"(rx470_pos, "term:sym<lambda>")
-    if_null rx470_debug, debug_585
+    if_null rx470_debug, debug_591
     rx470_cur."!cursor_debug"("PASS", "term:sym<lambda>", " at pos=", rx470_pos)
-  debug_585:
+  debug_591:
     .return (rx470_cur)
   rx470_restart:
 .annotate 'line', 4
-    if_null rx470_debug, debug_586
+    if_null rx470_debug, debug_592
     rx470_cur."!cursor_debug"("NEXT", "term:sym<lambda>")
-  debug_586:
+  debug_592:
   rx470_fail:
     (rx470_rep, rx470_pos, $I10, $P10) = rx470_cur."!mark_fail"(0)
     lt rx470_pos, -1, rx470_done
@@ -6785,16 +6784,16 @@
     jump $I10
   rx470_done:
     rx470_cur."!cursor_fail"()
-    if_null rx470_debug, debug_587
+    if_null rx470_debug, debug_593
     rx470_cur."!cursor_debug"("FAIL", "term:sym<lambda>")
-  debug_587:
+  debug_593:
     .return (rx470_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<lambda>"  :subid("119_1282324002.40722") :method
+.sub "!PREFIX__term:sym<lambda>"  :subid("119_1284728478.15265") :method
 .annotate 'line', 4
     new $P472, "ResizablePMCArray"
     push $P472, ""
@@ -6803,7 +6802,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "fatarrow"  :subid("120_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "fatarrow"  :subid("120_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx475_tgt
     .local int rx475_pos
@@ -6825,9 +6824,9 @@
     substr rx475_tgt, rx475_tgt, rx475_off
   rx475_start:
     eq $I10, 1, rx475_restart
-    if_null rx475_debug, debug_588
+    if_null rx475_debug, debug_594
     rx475_cur."!cursor_debug"("START", "fatarrow")
-  debug_588:
+  debug_594:
     $I10 = self.'from'()
     ne $I10, -1, rxscan479_done
     goto rxscan479_scan
@@ -6885,15 +6884,15 @@
 .annotate 'line', 236
   # rx pass
     rx475_cur."!cursor_pass"(rx475_pos, "fatarrow")
-    if_null rx475_debug, debug_589
+    if_null rx475_debug, debug_595
     rx475_cur."!cursor_debug"("PASS", "fatarrow", " at pos=", rx475_pos)
-  debug_589:
+  debug_595:
     .return (rx475_cur)
   rx475_restart:
 .annotate 'line', 4
-    if_null rx475_debug, debug_590
+    if_null rx475_debug, debug_596
     rx475_cur."!cursor_debug"("NEXT", "fatarrow")
-  debug_590:
+  debug_596:
   rx475_fail:
     (rx475_rep, rx475_pos, $I10, $P10) = rx475_cur."!mark_fail"(0)
     lt rx475_pos, -1, rx475_done
@@ -6901,16 +6900,16 @@
     jump $I10
   rx475_done:
     rx475_cur."!cursor_fail"()
-    if_null rx475_debug, debug_591
+    if_null rx475_debug, debug_597
     rx475_cur."!cursor_debug"("FAIL", "fatarrow")
-  debug_591:
+  debug_597:
     .return (rx475_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__fatarrow"  :subid("121_1282324002.40722") :method
+.sub "!PREFIX__fatarrow"  :subid("121_1284728478.15265") :method
 .annotate 'line', 4
     $P477 = self."!PREFIX__!subrule"("identifier", "")
     new $P478, "ResizablePMCArray"
@@ -6920,7 +6919,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "colonpair"  :subid("122_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "colonpair"  :subid("122_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx482_tgt
     .local int rx482_pos
@@ -6943,9 +6942,9 @@
     substr rx482_tgt, rx482_tgt, rx482_off
   rx482_start:
     eq $I10, 1, rx482_restart
-    if_null rx482_debug, debug_592
+    if_null rx482_debug, debug_598
     rx482_cur."!cursor_debug"("START", "colonpair")
-  debug_592:
+  debug_598:
     $I10 = self.'from'()
     ne $I10, -1, rxscan488_done
     goto rxscan488_scan
@@ -7045,15 +7044,15 @@
 .annotate 'line', 240
   # rx pass
     rx482_cur."!cursor_pass"(rx482_pos, "colonpair")
-    if_null rx482_debug, debug_593
+    if_null rx482_debug, debug_599
     rx482_cur."!cursor_debug"("PASS", "colonpair", " at pos=", rx482_pos)
-  debug_593:
+  debug_599:
     .return (rx482_cur)
   rx482_restart:
 .annotate 'line', 4
-    if_null rx482_debug, debug_594
+    if_null rx482_debug, debug_600
     rx482_cur."!cursor_debug"("NEXT", "colonpair")
-  debug_594:
+  debug_600:
   rx482_fail:
     (rx482_rep, rx482_pos, $I10, $P10) = rx482_cur."!mark_fail"(0)
     lt rx482_pos, -1, rx482_done
@@ -7061,16 +7060,16 @@
     jump $I10
   rx482_done:
     rx482_cur."!cursor_fail"()
-    if_null rx482_debug, debug_595
+    if_null rx482_debug, debug_601
     rx482_cur."!cursor_debug"("FAIL", "colonpair")
-  debug_595:
+  debug_601:
     .return (rx482_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__colonpair"  :subid("123_1282324002.40722") :method
+.sub "!PREFIX__colonpair"  :subid("123_1284728478.15265") :method
 .annotate 'line', 4
     $P484 = self."!PREFIX__!subrule"("circumfix", ":")
     $P485 = self."!PREFIX__!subrule"("identifier", ":")
@@ -7084,7 +7083,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "variable"  :subid("124_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "variable"  :subid("124_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx494_tgt
     .local int rx494_pos
@@ -7107,9 +7106,9 @@
     substr rx494_tgt, rx494_tgt, rx494_off
   rx494_start:
     eq $I10, 1, rx494_restart
-    if_null rx494_debug, debug_596
+    if_null rx494_debug, debug_602
     rx494_cur."!cursor_debug"("START", "variable")
-  debug_596:
+  debug_602:
     $I10 = self.'from'()
     ne $I10, -1, rxscan499_done
     goto rxscan499_scan
@@ -7174,7 +7173,6 @@
     $P10."!cursor_names"("sigil")
     rx494_pos = $P10."pos"()
   # rx enumcharlist negate=0 zerowidth
-    ge rx494_pos, rx494_eos, rx494_fail
     sub $I10, rx494_pos, rx494_off
     substr $S10, rx494_tgt, $I10, 1
     index $I11, "<[", $S10
@@ -7235,15 +7233,15 @@
 .annotate 'line', 249
   # rx pass
     rx494_cur."!cursor_pass"(rx494_pos, "variable")
-    if_null rx494_debug, debug_597
+    if_null rx494_debug, debug_603
     rx494_cur."!cursor_debug"("PASS", "variable", " at pos=", rx494_pos)
-  debug_597:
+  debug_603:
     .return (rx494_cur)
   rx494_restart:
 .annotate 'line', 4
-    if_null rx494_debug, debug_598
+    if_null rx494_debug, debug_604
     rx494_cur."!cursor_debug"("NEXT", "variable")
-  debug_598:
+  debug_604:
   rx494_fail:
     (rx494_rep, rx494_pos, $I10, $P10) = rx494_cur."!mark_fail"(0)
     lt rx494_pos, -1, rx494_done
@@ -7251,16 +7249,16 @@
     jump $I10
   rx494_done:
     rx494_cur."!cursor_fail"()
-    if_null rx494_debug, debug_599
+    if_null rx494_debug, debug_605
     rx494_cur."!cursor_debug"("FAIL", "variable")
-  debug_599:
+  debug_605:
     .return (rx494_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__variable"  :subid("125_1282324002.40722") :method
+.sub "!PREFIX__variable"  :subid("125_1284728478.15265") :method
 .annotate 'line', 4
     $P496 = self."!PREFIX__!subrule"("sigil", "")
     $P497 = self."!PREFIX__!subrule"("sigil", "")
@@ -7275,7 +7273,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "sigil"  :subid("126_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "sigil"  :subid("126_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx506_tgt
     .local int rx506_pos
@@ -7297,9 +7295,9 @@
     substr rx506_tgt, rx506_tgt, rx506_off
   rx506_start:
     eq $I10, 1, rx506_restart
-    if_null rx506_debug, debug_600
+    if_null rx506_debug, debug_606
     rx506_cur."!cursor_debug"("START", "sigil")
-  debug_600:
+  debug_606:
     $I10 = self.'from'()
     ne $I10, -1, rxscan509_done
     goto rxscan509_scan
@@ -7322,15 +7320,15 @@
     inc rx506_pos
   # rx pass
     rx506_cur."!cursor_pass"(rx506_pos, "sigil")
-    if_null rx506_debug, debug_601
+    if_null rx506_debug, debug_607
     rx506_cur."!cursor_debug"("PASS", "sigil", " at pos=", rx506_pos)
-  debug_601:
+  debug_607:
     .return (rx506_cur)
   rx506_restart:
 .annotate 'line', 4
-    if_null rx506_debug, debug_602
+    if_null rx506_debug, debug_608
     rx506_cur."!cursor_debug"("NEXT", "sigil")
-  debug_602:
+  debug_608:
   rx506_fail:
     (rx506_rep, rx506_pos, $I10, $P10) = rx506_cur."!mark_fail"(0)
     lt rx506_pos, -1, rx506_done
@@ -7338,16 +7336,16 @@
     jump $I10
   rx506_done:
     rx506_cur."!cursor_fail"()
-    if_null rx506_debug, debug_603
+    if_null rx506_debug, debug_609
     rx506_cur."!cursor_debug"("FAIL", "sigil")
-  debug_603:
+  debug_609:
     .return (rx506_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__sigil"  :subid("127_1282324002.40722") :method
+.sub "!PREFIX__sigil"  :subid("127_1284728478.15265") :method
 .annotate 'line', 4
     new $P508, "ResizablePMCArray"
     push $P508, "&"
@@ -7359,7 +7357,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "twigil"  :subid("128_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "twigil"  :subid("128_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx511_tgt
     .local int rx511_pos
@@ -7381,9 +7379,9 @@
     substr rx511_tgt, rx511_tgt, rx511_off
   rx511_start:
     eq $I10, 1, rx511_restart
-    if_null rx511_debug, debug_604
+    if_null rx511_debug, debug_610
     rx511_cur."!cursor_debug"("START", "twigil")
-  debug_604:
+  debug_610:
     $I10 = self.'from'()
     ne $I10, -1, rxscan514_done
     goto rxscan514_scan
@@ -7406,15 +7404,15 @@
     inc rx511_pos
   # rx pass
     rx511_cur."!cursor_pass"(rx511_pos, "twigil")
-    if_null rx511_debug, debug_605
+    if_null rx511_debug, debug_611
     rx511_cur."!cursor_debug"("PASS", "twigil", " at pos=", rx511_pos)
-  debug_605:
+  debug_611:
     .return (rx511_cur)
   rx511_restart:
 .annotate 'line', 4
-    if_null rx511_debug, debug_606
+    if_null rx511_debug, debug_612
     rx511_cur."!cursor_debug"("NEXT", "twigil")
-  debug_606:
+  debug_612:
   rx511_fail:
     (rx511_rep, rx511_pos, $I10, $P10) = rx511_cur."!mark_fail"(0)
     lt rx511_pos, -1, rx511_done
@@ -7422,16 +7420,16 @@
     jump $I10
   rx511_done:
     rx511_cur."!cursor_fail"()
-    if_null rx511_debug, debug_607
+    if_null rx511_debug, debug_613
     rx511_cur."!cursor_debug"("FAIL", "twigil")
-  debug_607:
+  debug_613:
     .return (rx511_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__twigil"  :subid("129_1282324002.40722") :method
+.sub "!PREFIX__twigil"  :subid("129_1284728478.15265") :method
 .annotate 'line', 4
     new $P513, "ResizablePMCArray"
     push $P513, "?"
@@ -7442,7 +7440,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator"  :subid("130_1282324002.40722") :method
+.sub "package_declarator"  :subid("130_1284728478.15265") :method
 .annotate 'line', 259
     $P516 = self."!protoregex"("package_declarator")
     .return ($P516)
@@ -7450,7 +7448,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator"  :subid("131_1282324002.40722") :method
+.sub "!PREFIX__package_declarator"  :subid("131_1284728478.15265") :method
 .annotate 'line', 259
     $P518 = self."!PREFIX__!protoregex"("package_declarator")
     .return ($P518)
@@ -7458,7 +7456,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator:sym<module>"  :subid("132_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "package_declarator:sym<module>"  :subid("132_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx520_tgt
     .local int rx520_pos
@@ -7480,9 +7478,9 @@
     substr rx520_tgt, rx520_tgt, rx520_off
   rx520_start:
     eq $I10, 1, rx520_restart
-    if_null rx520_debug, debug_608
+    if_null rx520_debug, debug_614
     rx520_cur."!cursor_debug"("START", "package_declarator:sym<module>")
-  debug_608:
+  debug_614:
     $I10 = self.'from'()
     ne $I10, -1, rxscan524_done
     goto rxscan524_scan
@@ -7526,15 +7524,15 @@
     rx520_pos = $P10."pos"()
   # rx pass
     rx520_cur."!cursor_pass"(rx520_pos, "package_declarator:sym<module>")
-    if_null rx520_debug, debug_609
+    if_null rx520_debug, debug_615
     rx520_cur."!cursor_debug"("PASS", "package_declarator:sym<module>", " at pos=", rx520_pos)
-  debug_609:
+  debug_615:
     .return (rx520_cur)
   rx520_restart:
 .annotate 'line', 4
-    if_null rx520_debug, debug_610
+    if_null rx520_debug, debug_616
     rx520_cur."!cursor_debug"("NEXT", "package_declarator:sym<module>")
-  debug_610:
+  debug_616:
   rx520_fail:
     (rx520_rep, rx520_pos, $I10, $P10) = rx520_cur."!mark_fail"(0)
     lt rx520_pos, -1, rx520_done
@@ -7542,16 +7540,16 @@
     jump $I10
   rx520_done:
     rx520_cur."!cursor_fail"()
-    if_null rx520_debug, debug_611
+    if_null rx520_debug, debug_617
     rx520_cur."!cursor_debug"("FAIL", "package_declarator:sym<module>")
-  debug_611:
+  debug_617:
     .return (rx520_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator:sym<module>"  :subid("133_1282324002.40722") :method
+.sub "!PREFIX__package_declarator:sym<module>"  :subid("133_1284728478.15265") :method
 .annotate 'line', 4
     $P522 = self."!PREFIX__!subrule"("package_def", "module")
     new $P523, "ResizablePMCArray"
@@ -7561,7 +7559,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator:sym<class>"  :subid("134_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "package_declarator:sym<class>"  :subid("134_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx527_tgt
     .local int rx527_pos
@@ -7583,9 +7581,9 @@
     substr rx527_tgt, rx527_tgt, rx527_off
   rx527_start:
     eq $I10, 1, rx527_restart
-    if_null rx527_debug, debug_612
+    if_null rx527_debug, debug_618
     rx527_cur."!cursor_debug"("START", "package_declarator:sym<class>")
-  debug_612:
+  debug_618:
     $I10 = self.'from'()
     ne $I10, -1, rxscan532_done
     goto rxscan532_scan
@@ -7642,15 +7640,15 @@
     rx527_pos = $P10."pos"()
   # rx pass
     rx527_cur."!cursor_pass"(rx527_pos, "package_declarator:sym<class>")
-    if_null rx527_debug, debug_613
+    if_null rx527_debug, debug_619
     rx527_cur."!cursor_debug"("PASS", "package_declarator:sym<class>", " at pos=", rx527_pos)
-  debug_613:
+  debug_619:
     .return (rx527_cur)
   rx527_restart:
 .annotate 'line', 4
-    if_null rx527_debug, debug_614
+    if_null rx527_debug, debug_620
     rx527_cur."!cursor_debug"("NEXT", "package_declarator:sym<class>")
-  debug_614:
+  debug_620:
   rx527_fail:
     (rx527_rep, rx527_pos, $I10, $P10) = rx527_cur."!mark_fail"(0)
     lt rx527_pos, -1, rx527_done
@@ -7658,16 +7656,16 @@
     jump $I10
   rx527_done:
     rx527_cur."!cursor_fail"()
-    if_null rx527_debug, debug_615
+    if_null rx527_debug, debug_621
     rx527_cur."!cursor_debug"("FAIL", "package_declarator:sym<class>")
-  debug_615:
+  debug_621:
     .return (rx527_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator:sym<class>"  :subid("135_1282324002.40722") :method
+.sub "!PREFIX__package_declarator:sym<class>"  :subid("135_1284728478.15265") :method
 .annotate 'line', 4
     $P529 = self."!PREFIX__!subrule"("package_def", "grammar")
     $P530 = self."!PREFIX__!subrule"("package_def", "class")
@@ -7679,7 +7677,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_def"  :subid("136_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "package_def"  :subid("136_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx536_tgt
     .local int rx536_pos
@@ -7702,9 +7700,9 @@
     substr rx536_tgt, rx536_tgt, rx536_off
   rx536_start:
     eq $I10, 1, rx536_restart
-    if_null rx536_debug, debug_616
+    if_null rx536_debug, debug_622
     rx536_cur."!cursor_debug"("START", "package_def")
-  debug_616:
+  debug_622:
     $I10 = self.'from'()
     ne $I10, -1, rxscan540_done
     goto rxscan540_scan
@@ -7823,7 +7821,6 @@
     unless $P10, rx536_fail
     rx536_pos = $P10."pos"()
   # rx enumcharlist negate=0 zerowidth
-    ge rx536_pos, rx536_eos, rx536_fail
     sub $I10, rx536_pos, rx536_off
     substr $S10, rx536_tgt, $I10, 1
     index $I11, "{", $S10
@@ -7873,15 +7870,15 @@
 .annotate 'line', 263
   # rx pass
     rx536_cur."!cursor_pass"(rx536_pos, "package_def")
-    if_null rx536_debug, debug_617
+    if_null rx536_debug, debug_623
     rx536_cur."!cursor_debug"("PASS", "package_def", " at pos=", rx536_pos)
-  debug_617:
+  debug_623:
     .return (rx536_cur)
   rx536_restart:
 .annotate 'line', 4
-    if_null rx536_debug, debug_618
+    if_null rx536_debug, debug_624
     rx536_cur."!cursor_debug"("NEXT", "package_def")
-  debug_618:
+  debug_624:
   rx536_fail:
     (rx536_rep, rx536_pos, $I10, $P10) = rx536_cur."!mark_fail"(0)
     lt rx536_pos, -1, rx536_done
@@ -7889,16 +7886,16 @@
     jump $I10
   rx536_done:
     rx536_cur."!cursor_fail"()
-    if_null rx536_debug, debug_619
+    if_null rx536_debug, debug_625
     rx536_cur."!cursor_debug"("FAIL", "package_def")
-  debug_619:
+  debug_625:
     .return (rx536_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_def"  :subid("137_1282324002.40722") :method
+.sub "!PREFIX__package_def"  :subid("137_1284728478.15265") :method
 .annotate 'line', 4
     $P538 = self."!PREFIX__!subrule"("ws", "")
     new $P539, "ResizablePMCArray"
@@ -7908,7 +7905,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator"  :subid("138_1282324002.40722") :method
+.sub "scope_declarator"  :subid("138_1284728478.15265") :method
 .annotate 'line', 273
     $P559 = self."!protoregex"("scope_declarator")
     .return ($P559)
@@ -7916,7 +7913,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator"  :subid("139_1282324002.40722") :method
+.sub "!PREFIX__scope_declarator"  :subid("139_1284728478.15265") :method
 .annotate 'line', 273
     $P561 = self."!PREFIX__!protoregex"("scope_declarator")
     .return ($P561)
@@ -7924,7 +7921,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<my>"  :subid("140_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "scope_declarator:sym<my>"  :subid("140_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx563_tgt
     .local int rx563_pos
@@ -7946,9 +7943,9 @@
     substr rx563_tgt, rx563_tgt, rx563_off
   rx563_start:
     eq $I10, 1, rx563_restart
-    if_null rx563_debug, debug_620
+    if_null rx563_debug, debug_626
     rx563_cur."!cursor_debug"("START", "scope_declarator:sym<my>")
-  debug_620:
+  debug_626:
     $I10 = self.'from'()
     ne $I10, -1, rxscan567_done
     goto rxscan567_scan
@@ -7992,15 +7989,15 @@
     rx563_pos = $P10."pos"()
   # rx pass
     rx563_cur."!cursor_pass"(rx563_pos, "scope_declarator:sym<my>")
-    if_null rx563_debug, debug_621
+    if_null rx563_debug, debug_627
     rx563_cur."!cursor_debug"("PASS", "scope_declarator:sym<my>", " at pos=", rx563_pos)
-  debug_621:
+  debug_627:
     .return (rx563_cur)
   rx563_restart:
 .annotate 'line', 4
-    if_null rx563_debug, debug_622
+    if_null rx563_debug, debug_628
     rx563_cur."!cursor_debug"("NEXT", "scope_declarator:sym<my>")
-  debug_622:
+  debug_628:
   rx563_fail:
     (rx563_rep, rx563_pos, $I10, $P10) = rx563_cur."!mark_fail"(0)
     lt rx563_pos, -1, rx563_done
@@ -8008,16 +8005,16 @@
     jump $I10
   rx563_done:
     rx563_cur."!cursor_fail"()
-    if_null rx563_debug, debug_623
+    if_null rx563_debug, debug_629
     rx563_cur."!cursor_debug"("FAIL", "scope_declarator:sym<my>")
-  debug_623:
+  debug_629:
     .return (rx563_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<my>"  :subid("141_1282324002.40722") :method
+.sub "!PREFIX__scope_declarator:sym<my>"  :subid("141_1284728478.15265") :method
 .annotate 'line', 4
     $P565 = self."!PREFIX__!subrule"("scoped", "my")
     new $P566, "ResizablePMCArray"
@@ -8027,7 +8024,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<our>"  :subid("142_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "scope_declarator:sym<our>"  :subid("142_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx570_tgt
     .local int rx570_pos
@@ -8049,9 +8046,9 @@
     substr rx570_tgt, rx570_tgt, rx570_off
   rx570_start:
     eq $I10, 1, rx570_restart
-    if_null rx570_debug, debug_624
+    if_null rx570_debug, debug_630
     rx570_cur."!cursor_debug"("START", "scope_declarator:sym<our>")
-  debug_624:
+  debug_630:
     $I10 = self.'from'()
     ne $I10, -1, rxscan574_done
     goto rxscan574_scan
@@ -8095,15 +8092,15 @@
     rx570_pos = $P10."pos"()
   # rx pass
     rx570_cur."!cursor_pass"(rx570_pos, "scope_declarator:sym<our>")
-    if_null rx570_debug, debug_625
+    if_null rx570_debug, debug_631
     rx570_cur."!cursor_debug"("PASS", "scope_declarator:sym<our>", " at pos=", rx570_pos)
-  debug_625:
+  debug_631:
     .return (rx570_cur)
   rx570_restart:
 .annotate 'line', 4
-    if_null rx570_debug, debug_626
+    if_null rx570_debug, debug_632
     rx570_cur."!cursor_debug"("NEXT", "scope_declarator:sym<our>")
-  debug_626:
+  debug_632:
   rx570_fail:
     (rx570_rep, rx570_pos, $I10, $P10) = rx570_cur."!mark_fail"(0)
     lt rx570_pos, -1, rx570_done
@@ -8111,16 +8108,16 @@
     jump $I10
   rx570_done:
     rx570_cur."!cursor_fail"()
-    if_null rx570_debug, debug_627
+    if_null rx570_debug, debug_633
     rx570_cur."!cursor_debug"("FAIL", "scope_declarator:sym<our>")
-  debug_627:
+  debug_633:
     .return (rx570_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<our>"  :subid("143_1282324002.40722") :method
+.sub "!PREFIX__scope_declarator:sym<our>"  :subid("143_1284728478.15265") :method
 .annotate 'line', 4
     $P572 = self."!PREFIX__!subrule"("scoped", "our")
     new $P573, "ResizablePMCArray"
@@ -8130,7 +8127,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<has>"  :subid("144_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "scope_declarator:sym<has>"  :subid("144_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx577_tgt
     .local int rx577_pos
@@ -8152,9 +8149,9 @@
     substr rx577_tgt, rx577_tgt, rx577_off
   rx577_start:
     eq $I10, 1, rx577_restart
-    if_null rx577_debug, debug_628
+    if_null rx577_debug, debug_634
     rx577_cur."!cursor_debug"("START", "scope_declarator:sym<has>")
-  debug_628:
+  debug_634:
     $I10 = self.'from'()
     ne $I10, -1, rxscan581_done
     goto rxscan581_scan
@@ -8198,15 +8195,15 @@
     rx577_pos = $P10."pos"()
   # rx pass
     rx577_cur."!cursor_pass"(rx577_pos, "scope_declarator:sym<has>")
-    if_null rx577_debug, debug_629
+    if_null rx577_debug, debug_635
     rx577_cur."!cursor_debug"("PASS", "scope_declarator:sym<has>", " at pos=", rx577_pos)
-  debug_629:
+  debug_635:
     .return (rx577_cur)
   rx577_restart:
 .annotate 'line', 4
-    if_null rx577_debug, debug_630
+    if_null rx577_debug, debug_636
     rx577_cur."!cursor_debug"("NEXT", "scope_declarator:sym<has>")
-  debug_630:
+  debug_636:
   rx577_fail:
     (rx577_rep, rx577_pos, $I10, $P10) = rx577_cur."!mark_fail"(0)
     lt rx577_pos, -1, rx577_done
@@ -8214,16 +8211,16 @@
     jump $I10
   rx577_done:
     rx577_cur."!cursor_fail"()
-    if_null rx577_debug, debug_631
+    if_null rx577_debug, debug_637
     rx577_cur."!cursor_debug"("FAIL", "scope_declarator:sym<has>")
-  debug_631:
+  debug_637:
     .return (rx577_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<has>"  :subid("145_1282324002.40722") :method
+.sub "!PREFIX__scope_declarator:sym<has>"  :subid("145_1284728478.15265") :method
 .annotate 'line', 4
     $P579 = self."!PREFIX__!subrule"("scoped", "has")
     new $P580, "ResizablePMCArray"
@@ -8233,7 +8230,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scoped"  :subid("146_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "scoped"  :subid("146_1284728478.15265") :method :outer("11_1284728478.15265")
     .param pmc param_584
 .annotate 'line', 278
     .lex "$*SCOPE", param_584
@@ -8258,9 +8255,9 @@
     substr rx585_tgt, rx585_tgt, rx585_off
   rx585_start:
     eq $I10, 1, rx585_restart
-    if_null rx585_debug, debug_632
+    if_null rx585_debug, debug_638
     rx585_cur."!cursor_debug"("START", "scoped")
-  debug_632:
+  debug_638:
     $I10 = self.'from'()
     ne $I10, -1, rxscan590_done
     goto rxscan590_scan
@@ -8319,15 +8316,15 @@
 .annotate 'line', 278
   # rx pass
     rx585_cur."!cursor_pass"(rx585_pos, "scoped")
-    if_null rx585_debug, debug_633
+    if_null rx585_debug, debug_639
     rx585_cur."!cursor_debug"("PASS", "scoped", " at pos=", rx585_pos)
-  debug_633:
+  debug_639:
     .return (rx585_cur)
   rx585_restart:
 .annotate 'line', 4
-    if_null rx585_debug, debug_634
+    if_null rx585_debug, debug_640
     rx585_cur."!cursor_debug"("NEXT", "scoped")
-  debug_634:
+  debug_640:
   rx585_fail:
     (rx585_rep, rx585_pos, $I10, $P10) = rx585_cur."!mark_fail"(0)
     lt rx585_pos, -1, rx585_done
@@ -8335,16 +8332,16 @@
     jump $I10
   rx585_done:
     rx585_cur."!cursor_fail"()
-    if_null rx585_debug, debug_635
+    if_null rx585_debug, debug_641
     rx585_cur."!cursor_debug"("FAIL", "scoped")
-  debug_635:
+  debug_641:
     .return (rx585_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scoped"  :subid("147_1282324002.40722") :method
+.sub "!PREFIX__scoped"  :subid("147_1284728478.15265") :method
 .annotate 'line', 4
     $P587 = self."!PREFIX__!subrule"("ws", "")
     $P588 = self."!PREFIX__!subrule"("ws", "")
@@ -8356,7 +8353,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "typename"  :subid("148_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "typename"  :subid("148_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx597_tgt
     .local int rx597_pos
@@ -8378,9 +8375,9 @@
     substr rx597_tgt, rx597_tgt, rx597_off
   rx597_start:
     eq $I10, 1, rx597_restart
-    if_null rx597_debug, debug_636
+    if_null rx597_debug, debug_642
     rx597_cur."!cursor_debug"("START", "typename")
-  debug_636:
+  debug_642:
     $I10 = self.'from'()
     ne $I10, -1, rxscan601_done
     goto rxscan601_scan
@@ -8403,15 +8400,15 @@
     rx597_pos = $P10."pos"()
   # rx pass
     rx597_cur."!cursor_pass"(rx597_pos, "typename")
-    if_null rx597_debug, debug_637
+    if_null rx597_debug, debug_643
     rx597_cur."!cursor_debug"("PASS", "typename", " at pos=", rx597_pos)
-  debug_637:
+  debug_643:
     .return (rx597_cur)
   rx597_restart:
 .annotate 'line', 4
-    if_null rx597_debug, debug_638
+    if_null rx597_debug, debug_644
     rx597_cur."!cursor_debug"("NEXT", "typename")
-  debug_638:
+  debug_644:
   rx597_fail:
     (rx597_rep, rx597_pos, $I10, $P10) = rx597_cur."!mark_fail"(0)
     lt rx597_pos, -1, rx597_done
@@ -8419,16 +8416,16 @@
     jump $I10
   rx597_done:
     rx597_cur."!cursor_fail"()
-    if_null rx597_debug, debug_639
+    if_null rx597_debug, debug_645
     rx597_cur."!cursor_debug"("FAIL", "typename")
-  debug_639:
+  debug_645:
     .return (rx597_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__typename"  :subid("149_1282324002.40722") :method
+.sub "!PREFIX__typename"  :subid("149_1284728478.15265") :method
 .annotate 'line', 4
     $P599 = self."!PREFIX__!subrule"("name", "")
     new $P600, "ResizablePMCArray"
@@ -8438,7 +8435,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "declarator"  :subid("150_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "declarator"  :subid("150_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx603_tgt
     .local int rx603_pos
@@ -8460,9 +8457,9 @@
     substr rx603_tgt, rx603_tgt, rx603_off
   rx603_start:
     eq $I10, 1, rx603_restart
-    if_null rx603_debug, debug_640
+    if_null rx603_debug, debug_646
     rx603_cur."!cursor_debug"("START", "declarator")
-  debug_640:
+  debug_646:
     $I10 = self.'from'()
     ne $I10, -1, rxscan608_done
     goto rxscan608_scan
@@ -8501,15 +8498,15 @@
 .annotate 'line', 285
   # rx pass
     rx603_cur."!cursor_pass"(rx603_pos, "declarator")
-    if_null rx603_debug, debug_641
+    if_null rx603_debug, debug_647
     rx603_cur."!cursor_debug"("PASS", "declarator", " at pos=", rx603_pos)
-  debug_641:
+  debug_647:
     .return (rx603_cur)
   rx603_restart:
 .annotate 'line', 4
-    if_null rx603_debug, debug_642
+    if_null rx603_debug, debug_648
     rx603_cur."!cursor_debug"("NEXT", "declarator")
-  debug_642:
+  debug_648:
   rx603_fail:
     (rx603_rep, rx603_pos, $I10, $P10) = rx603_cur."!mark_fail"(0)
     lt rx603_pos, -1, rx603_done
@@ -8517,16 +8514,16 @@
     jump $I10
   rx603_done:
     rx603_cur."!cursor_fail"()
-    if_null rx603_debug, debug_643
+    if_null rx603_debug, debug_649
     rx603_cur."!cursor_debug"("FAIL", "declarator")
-  debug_643:
+  debug_649:
     .return (rx603_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__declarator"  :subid("151_1282324002.40722") :method
+.sub "!PREFIX__declarator"  :subid("151_1284728478.15265") :method
 .annotate 'line', 4
     $P605 = self."!PREFIX__!subrule"("routine_declarator", "")
     $P606 = self."!PREFIX__!subrule"("variable_declarator", "")
@@ -8538,7 +8535,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "variable_declarator"  :subid("152_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "variable_declarator"  :subid("152_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx611_tgt
     .local int rx611_pos
@@ -8560,9 +8557,9 @@
     substr rx611_tgt, rx611_tgt, rx611_off
   rx611_start:
     eq $I10, 1, rx611_restart
-    if_null rx611_debug, debug_644
+    if_null rx611_debug, debug_650
     rx611_cur."!cursor_debug"("START", "variable_declarator")
-  debug_644:
+  debug_650:
     $I10 = self.'from'()
     ne $I10, -1, rxscan615_done
     goto rxscan615_scan
@@ -8585,15 +8582,15 @@
     rx611_pos = $P10."pos"()
   # rx pass
     rx611_cur."!cursor_pass"(rx611_pos, "variable_declarator")
-    if_null rx611_debug, debug_645
+    if_null rx611_debug, debug_651
     rx611_cur."!cursor_debug"("PASS", "variable_declarator", " at pos=", rx611_pos)
-  debug_645:
+  debug_651:
     .return (rx611_cur)
   rx611_restart:
 .annotate 'line', 4
-    if_null rx611_debug, debug_646
+    if_null rx611_debug, debug_652
     rx611_cur."!cursor_debug"("NEXT", "variable_declarator")
-  debug_646:
+  debug_652:
   rx611_fail:
     (rx611_rep, rx611_pos, $I10, $P10) = rx611_cur."!mark_fail"(0)
     lt rx611_pos, -1, rx611_done
@@ -8601,16 +8598,16 @@
     jump $I10
   rx611_done:
     rx611_cur."!cursor_fail"()
-    if_null rx611_debug, debug_647
+    if_null rx611_debug, debug_653
     rx611_cur."!cursor_debug"("FAIL", "variable_declarator")
-  debug_647:
+  debug_653:
     .return (rx611_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__variable_declarator"  :subid("153_1282324002.40722") :method
+.sub "!PREFIX__variable_declarator"  :subid("153_1284728478.15265") :method
 .annotate 'line', 4
     $P613 = self."!PREFIX__!subrule"("variable", "")
     new $P614, "ResizablePMCArray"
@@ -8620,7 +8617,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator"  :subid("154_1282324002.40722") :method
+.sub "routine_declarator"  :subid("154_1284728478.15265") :method
 .annotate 'line', 292
     $P617 = self."!protoregex"("routine_declarator")
     .return ($P617)
@@ -8628,7 +8625,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator"  :subid("155_1282324002.40722") :method
+.sub "!PREFIX__routine_declarator"  :subid("155_1284728478.15265") :method
 .annotate 'line', 292
     $P619 = self."!PREFIX__!protoregex"("routine_declarator")
     .return ($P619)
@@ -8636,7 +8633,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator:sym<sub>"  :subid("156_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "routine_declarator:sym<sub>"  :subid("156_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx621_tgt
     .local int rx621_pos
@@ -8658,9 +8655,9 @@
     substr rx621_tgt, rx621_tgt, rx621_off
   rx621_start:
     eq $I10, 1, rx621_restart
-    if_null rx621_debug, debug_648
+    if_null rx621_debug, debug_654
     rx621_cur."!cursor_debug"("START", "routine_declarator:sym<sub>")
-  debug_648:
+  debug_654:
     $I10 = self.'from'()
     ne $I10, -1, rxscan625_done
     goto rxscan625_scan
@@ -8704,15 +8701,15 @@
     rx621_pos = $P10."pos"()
   # rx pass
     rx621_cur."!cursor_pass"(rx621_pos, "routine_declarator:sym<sub>")
-    if_null rx621_debug, debug_649
+    if_null rx621_debug, debug_655
     rx621_cur."!cursor_debug"("PASS", "routine_declarator:sym<sub>", " at pos=", rx621_pos)
-  debug_649:
+  debug_655:
     .return (rx621_cur)
   rx621_restart:
 .annotate 'line', 4
-    if_null rx621_debug, debug_650
+    if_null rx621_debug, debug_656
     rx621_cur."!cursor_debug"("NEXT", "routine_declarator:sym<sub>")
-  debug_650:
+  debug_656:
   rx621_fail:
     (rx621_rep, rx621_pos, $I10, $P10) = rx621_cur."!mark_fail"(0)
     lt rx621_pos, -1, rx621_done
@@ -8720,16 +8717,16 @@
     jump $I10
   rx621_done:
     rx621_cur."!cursor_fail"()
-    if_null rx621_debug, debug_651
+    if_null rx621_debug, debug_657
     rx621_cur."!cursor_debug"("FAIL", "routine_declarator:sym<sub>")
-  debug_651:
+  debug_657:
     .return (rx621_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator:sym<sub>"  :subid("157_1282324002.40722") :method
+.sub "!PREFIX__routine_declarator:sym<sub>"  :subid("157_1284728478.15265") :method
 .annotate 'line', 4
     $P623 = self."!PREFIX__!subrule"("routine_def", "sub")
     new $P624, "ResizablePMCArray"
@@ -8739,7 +8736,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator:sym<method>"  :subid("158_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "routine_declarator:sym<method>"  :subid("158_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx628_tgt
     .local int rx628_pos
@@ -8761,9 +8758,9 @@
     substr rx628_tgt, rx628_tgt, rx628_off
   rx628_start:
     eq $I10, 1, rx628_restart
-    if_null rx628_debug, debug_652
+    if_null rx628_debug, debug_658
     rx628_cur."!cursor_debug"("START", "routine_declarator:sym<method>")
-  debug_652:
+  debug_658:
     $I10 = self.'from'()
     ne $I10, -1, rxscan632_done
     goto rxscan632_scan
@@ -8807,15 +8804,15 @@
     rx628_pos = $P10."pos"()
   # rx pass
     rx628_cur."!cursor_pass"(rx628_pos, "routine_declarator:sym<method>")
-    if_null rx628_debug, debug_653
+    if_null rx628_debug, debug_659
     rx628_cur."!cursor_debug"("PASS", "routine_declarator:sym<method>", " at pos=", rx628_pos)
-  debug_653:
+  debug_659:
     .return (rx628_cur)
   rx628_restart:
 .annotate 'line', 4
-    if_null rx628_debug, debug_654
+    if_null rx628_debug, debug_660
     rx628_cur."!cursor_debug"("NEXT", "routine_declarator:sym<method>")
-  debug_654:
+  debug_660:
   rx628_fail:
     (rx628_rep, rx628_pos, $I10, $P10) = rx628_cur."!mark_fail"(0)
     lt rx628_pos, -1, rx628_done
@@ -8823,16 +8820,16 @@
     jump $I10
   rx628_done:
     rx628_cur."!cursor_fail"()
-    if_null rx628_debug, debug_655
+    if_null rx628_debug, debug_661
     rx628_cur."!cursor_debug"("FAIL", "routine_declarator:sym<method>")
-  debug_655:
+  debug_661:
     .return (rx628_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator:sym<method>"  :subid("159_1282324002.40722") :method
+.sub "!PREFIX__routine_declarator:sym<method>"  :subid("159_1284728478.15265") :method
 .annotate 'line', 4
     $P630 = self."!PREFIX__!subrule"("method_def", "method")
     new $P631, "ResizablePMCArray"
@@ -8842,7 +8839,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_def"  :subid("160_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "routine_def"  :subid("160_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx635_tgt
     .local int rx635_pos
@@ -8852,7 +8849,7 @@
     .local pmc rx635_cur
     .local pmc rx635_debug
     (rx635_cur, rx635_pos, rx635_tgt, $I10) = self."!cursor_start"()
-    rx635_cur."!cursor_caparray"("deflongname", "sigil")
+    rx635_cur."!cursor_caparray"("deflongname", "sigil", "trait")
     getattribute rx635_debug, rx635_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx635_cur
     .local pmc match
@@ -8865,9 +8862,9 @@
     substr rx635_tgt, rx635_tgt, rx635_off
   rx635_start:
     eq $I10, 1, rx635_restart
-    if_null rx635_debug, debug_656
+    if_null rx635_debug, debug_662
     rx635_cur."!cursor_debug"("START", "routine_def")
-  debug_656:
+  debug_662:
     $I10 = self.'from'()
     ne $I10, -1, rxscan639_done
     goto rxscan639_scan
@@ -9025,6 +9022,35 @@
     unless $P10, rx635_fail
     rx635_pos = $P10."pos"()
 .annotate 'line', 301
+  # rx rxquantr656 ** 0..*
+    set_addr $I10, rxquantr656_done
+    rx635_cur."!mark_push"(0, rx635_pos, $I10)
+  rxquantr656_loop:
+  # rx subrule "trait" subtype=capture negate=
+    rx635_cur."!cursor_pos"(rx635_pos)
+    $P10 = rx635_cur."trait"()
+    unless $P10, rx635_fail
+    goto rxsubrule657_pass
+  rxsubrule657_back:
+    $P10 = $P10."!cursor_next"()
+    unless $P10, rx635_fail
+  rxsubrule657_pass:
+    set_addr $I10, rxsubrule657_back
+    rx635_cur."!mark_push"(0, rx635_pos, $I10, $P10)
+    $P10."!cursor_names"("trait")
+    rx635_pos = $P10."pos"()
+    set_addr $I10, rxquantr656_done
+    (rx635_rep) = rx635_cur."!mark_commit"($I10)
+    set_addr $I10, rxquantr656_done
+    rx635_cur."!mark_push"(rx635_rep, rx635_pos, $I10)
+    goto rxquantr656_loop
+  rxquantr656_done:
+  # rx subrule "ws" subtype=method negate=
+    rx635_cur."!cursor_pos"(rx635_pos)
+    $P10 = rx635_cur."ws"()
+    unless $P10, rx635_fail
+    rx635_pos = $P10."pos"()
+.annotate 'line', 302
   # rx subrule "blockoid" subtype=capture negate=
     rx635_cur."!cursor_pos"(rx635_pos)
     $P10 = rx635_cur."blockoid"()
@@ -9040,15 +9066,15 @@
 .annotate 'line', 296
   # rx pass
     rx635_cur."!cursor_pass"(rx635_pos, "routine_def")
-    if_null rx635_debug, debug_657
+    if_null rx635_debug, debug_663
     rx635_cur."!cursor_debug"("PASS", "routine_def", " at pos=", rx635_pos)
-  debug_657:
+  debug_663:
     .return (rx635_cur)
   rx635_restart:
 .annotate 'line', 4
-    if_null rx635_debug, debug_658
+    if_null rx635_debug, debug_664
     rx635_cur."!cursor_debug"("NEXT", "routine_def")
-  debug_658:
+  debug_664:
   rx635_fail:
     (rx635_rep, rx635_pos, $I10, $P10) = rx635_cur."!mark_fail"(0)
     lt rx635_pos, -1, rx635_done
@@ -9056,16 +9082,16 @@
     jump $I10
   rx635_done:
     rx635_cur."!cursor_fail"()
-    if_null rx635_debug, debug_659
+    if_null rx635_debug, debug_665
     rx635_cur."!cursor_debug"("FAIL", "routine_def")
-  debug_659:
+  debug_665:
     .return (rx635_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_def"  :subid("161_1282324002.40722") :method
+.sub "!PREFIX__routine_def"  :subid("161_1284728478.15265") :method
 .annotate 'line', 4
     $P637 = self."!PREFIX__!subrule"("ws", "")
     new $P638, "ResizablePMCArray"
@@ -9075,1014 +9101,953 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "method_def"  :subid("162_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "method_def"  :subid("162_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .local string rx658_tgt
-    .local int rx658_pos
-    .local int rx658_off
-    .local int rx658_eos
-    .local int rx658_rep
-    .local pmc rx658_cur
-    .local pmc rx658_debug
-    (rx658_cur, rx658_pos, rx658_tgt, $I10) = self."!cursor_start"()
-    rx658_cur."!cursor_caparray"("deflongname")
-    getattribute rx658_debug, rx658_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx658_cur
-    .local pmc match
-    .lex "$/", match
-    length rx658_eos, rx658_tgt
-    gt rx658_pos, rx658_eos, rx658_done
-    set rx658_off, 0
-    lt rx658_pos, 2, rx658_start
-    sub rx658_off, rx658_pos, 1
-    substr rx658_tgt, rx658_tgt, rx658_off
-  rx658_start:
-    eq $I10, 1, rx658_restart
-    if_null rx658_debug, debug_660
-    rx658_cur."!cursor_debug"("START", "method_def")
-  debug_660:
+    .local string rx661_tgt
+    .local int rx661_pos
+    .local int rx661_off
+    .local int rx661_eos
+    .local int rx661_rep
+    .local pmc rx661_cur
+    .local pmc rx661_debug
+    (rx661_cur, rx661_pos, rx661_tgt, $I10) = self."!cursor_start"()
+    rx661_cur."!cursor_caparray"("deflongname", "trait")
+    getattribute rx661_debug, rx661_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx661_cur
+    .local pmc match
+    .lex "$/", match
+    length rx661_eos, rx661_tgt
+    gt rx661_pos, rx661_eos, rx661_done
+    set rx661_off, 0
+    lt rx661_pos, 2, rx661_start
+    sub rx661_off, rx661_pos, 1
+    substr rx661_tgt, rx661_tgt, rx661_off
+  rx661_start:
+    eq $I10, 1, rx661_restart
+    if_null rx661_debug, debug_666
+    rx661_cur."!cursor_debug"("START", "method_def")
+  debug_666:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan662_done
-    goto rxscan662_scan
-  rxscan662_loop:
-    ($P10) = rx658_cur."from"()
-    inc $P10
-    set rx658_pos, $P10
-    ge rx658_pos, rx658_eos, rxscan662_done
-  rxscan662_scan:
-    set_addr $I10, rxscan662_loop
-    rx658_cur."!mark_push"(0, rx658_pos, $I10)
-  rxscan662_done:
-.annotate 'line', 304
-  # rx subrule "ws" subtype=method negate=
-    rx658_cur."!cursor_pos"(rx658_pos)
-    $P10 = rx658_cur."ws"()
-    unless $P10, rx658_fail
-    rx658_pos = $P10."pos"()
+    ne $I10, -1, rxscan665_done
+    goto rxscan665_scan
+  rxscan665_loop:
+    ($P10) = rx661_cur."from"()
+    inc $P10
+    set rx661_pos, $P10
+    ge rx661_pos, rx661_eos, rxscan665_done
+  rxscan665_scan:
+    set_addr $I10, rxscan665_loop
+    rx661_cur."!mark_push"(0, rx661_pos, $I10)
+  rxscan665_done:
 .annotate 'line', 305
-  # rx rxquantr664 ** 0..1
-    set_addr $I10, rxquantr664_done
-    rx658_cur."!mark_push"(0, rx658_pos, $I10)
-  rxquantr664_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx661_cur."!cursor_pos"(rx661_pos)
+    $P10 = rx661_cur."ws"()
+    unless $P10, rx661_fail
+    rx661_pos = $P10."pos"()
+.annotate 'line', 306
+  # rx rxquantr667 ** 0..1
+    set_addr $I10, rxquantr667_done
+    rx661_cur."!mark_push"(0, rx661_pos, $I10)
+  rxquantr667_loop:
   # rx subrule "deflongname" subtype=capture negate=
-    rx658_cur."!cursor_pos"(rx658_pos)
-    $P10 = rx658_cur."deflongname"()
-    unless $P10, rx658_fail
-    goto rxsubrule665_pass
-  rxsubrule665_back:
+    rx661_cur."!cursor_pos"(rx661_pos)
+    $P10 = rx661_cur."deflongname"()
+    unless $P10, rx661_fail
+    goto rxsubrule668_pass
+  rxsubrule668_back:
     $P10 = $P10."!cursor_next"()
-    unless $P10, rx658_fail
-  rxsubrule665_pass:
-    set_addr $I10, rxsubrule665_back
-    rx658_cur."!mark_push"(0, rx658_pos, $I10, $P10)
+    unless $P10, rx661_fail
+  rxsubrule668_pass:
+    set_addr $I10, rxsubrule668_back
+    rx661_cur."!mark_push"(0, rx661_pos, $I10, $P10)
     $P10."!cursor_names"("deflongname")
-    rx658_pos = $P10."pos"()
-    set_addr $I10, rxquantr664_done
-    (rx658_rep) = rx658_cur."!mark_commit"($I10)
-  rxquantr664_done:
-  # rx subrule "ws" subtype=method negate=
-    rx658_cur."!cursor_pos"(rx658_pos)
-    $P10 = rx658_cur."ws"()
-    unless $P10, rx658_fail
-    rx658_pos = $P10."pos"()
-.annotate 'line', 306
-  # rx subrule "newpad" subtype=method negate=
-    rx658_cur."!cursor_pos"(rx658_pos)
-    $P10 = rx658_cur."newpad"()
-    unless $P10, rx658_fail
-    rx658_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx658_cur."!cursor_pos"(rx658_pos)
-    $P10 = rx658_cur."ws"()
-    unless $P10, rx658_fail
-    rx658_pos = $P10."pos"()
-  alt668_0:
+    rx661_pos = $P10."pos"()
+    set_addr $I10, rxquantr667_done
+    (rx661_rep) = rx661_cur."!mark_commit"($I10)
+  rxquantr667_done:
+  # rx subrule "ws" subtype=method negate=
+    rx661_cur."!cursor_pos"(rx661_pos)
+    $P10 = rx661_cur."ws"()
+    unless $P10, rx661_fail
+    rx661_pos = $P10."pos"()
 .annotate 'line', 307
-    set_addr $I10, alt668_1
-    rx658_cur."!mark_push"(0, rx658_pos, $I10)
+  # rx subrule "newpad" subtype=method negate=
+    rx661_cur."!cursor_pos"(rx661_pos)
+    $P10 = rx661_cur."newpad"()
+    unless $P10, rx661_fail
+    rx661_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx661_cur."!cursor_pos"(rx661_pos)
+    $P10 = rx661_cur."ws"()
+    unless $P10, rx661_fail
+    rx661_pos = $P10."pos"()
+  alt671_0:
+.annotate 'line', 308
+    set_addr $I10, alt671_1
+    rx661_cur."!mark_push"(0, rx661_pos, $I10)
   # rx subrule "ws" subtype=method negate=
-    rx658_cur."!cursor_pos"(rx658_pos)
-    $P10 = rx658_cur."ws"()
-    unless $P10, rx658_fail
-    rx658_pos = $P10."pos"()
+    rx661_cur."!cursor_pos"(rx661_pos)
+    $P10 = rx661_cur."ws"()
+    unless $P10, rx661_fail
+    rx661_pos = $P10."pos"()
   # rx literal  "("
-    add $I11, rx658_pos, 1
-    gt $I11, rx658_eos, rx658_fail
-    sub $I11, rx658_pos, rx658_off
-    ord $I11, rx658_tgt, $I11
-    ne $I11, 40, rx658_fail
-    add rx658_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx658_cur."!cursor_pos"(rx658_pos)
-    $P10 = rx658_cur."ws"()
-    unless $P10, rx658_fail
-    rx658_pos = $P10."pos"()
+    add $I11, rx661_pos, 1
+    gt $I11, rx661_eos, rx661_fail
+    sub $I11, rx661_pos, rx661_off
+    ord $I11, rx661_tgt, $I11
+    ne $I11, 40, rx661_fail
+    add rx661_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx661_cur."!cursor_pos"(rx661_pos)
+    $P10 = rx661_cur."ws"()
+    unless $P10, rx661_fail
+    rx661_pos = $P10."pos"()
   # rx subrule "signature" subtype=capture negate=
-    rx658_cur."!cursor_pos"(rx658_pos)
-    $P10 = rx658_cur."signature"()
-    unless $P10, rx658_fail
-    rx658_cur."!mark_push"(0, -1, 0, $P10)
+    rx661_cur."!cursor_pos"(rx661_pos)
+    $P10 = rx661_cur."signature"()
+    unless $P10, rx661_fail
+    rx661_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("signature")
-    rx658_pos = $P10."pos"()
+    rx661_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx658_cur."!cursor_pos"(rx658_pos)
-    $P10 = rx658_cur."ws"()
-    unless $P10, rx658_fail
-    rx658_pos = $P10."pos"()
+    rx661_cur."!cursor_pos"(rx661_pos)
+    $P10 = rx661_cur."ws"()
+    unless $P10, rx661_fail
+    rx661_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx658_pos, 1
-    gt $I11, rx658_eos, rx658_fail
-    sub $I11, rx658_pos, rx658_off
-    ord $I11, rx658_tgt, $I11
-    ne $I11, 41, rx658_fail
-    add rx658_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx658_cur."!cursor_pos"(rx658_pos)
-    $P10 = rx658_cur."ws"()
-    unless $P10, rx658_fail
-    rx658_pos = $P10."pos"()
-    goto alt668_end
-  alt668_1:
-.annotate 'line', 308
+    add $I11, rx661_pos, 1
+    gt $I11, rx661_eos, rx661_fail
+    sub $I11, rx661_pos, rx661_off
+    ord $I11, rx661_tgt, $I11
+    ne $I11, 41, rx661_fail
+    add rx661_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx661_cur."!cursor_pos"(rx661_pos)
+    $P10 = rx661_cur."ws"()
+    unless $P10, rx661_fail
+    rx661_pos = $P10."pos"()
+    goto alt671_end
+  alt671_1:
+.annotate 'line', 309
   # rx subrule "ws" subtype=method negate=
-    rx658_cur."!cursor_pos"(rx658_pos)
-    $P10 = rx658_cur."ws"()
-    unless $P10, rx658_fail
-    rx658_pos = $P10."pos"()
+    rx661_cur."!cursor_pos"(rx661_pos)
+    $P10 = rx661_cur."ws"()
+    unless $P10, rx661_fail
+    rx661_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx658_cur."!cursor_pos"(rx658_pos)
-    $P10 = rx658_cur."panic"("Routine declaration requires a signature")
-    unless $P10, rx658_fail
-    rx658_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx658_cur."!cursor_pos"(rx658_pos)
-    $P10 = rx658_cur."ws"()
-    unless $P10, rx658_fail
-    rx658_pos = $P10."pos"()
-  alt668_end:
-  # rx subrule "ws" subtype=method negate=
-    rx658_cur."!cursor_pos"(rx658_pos)
-    $P10 = rx658_cur."ws"()
-    unless $P10, rx658_fail
-    rx658_pos = $P10."pos"()
-.annotate 'line', 309
+    rx661_cur."!cursor_pos"(rx661_pos)
+    $P10 = rx661_cur."panic"("Routine declaration requires a signature")
+    unless $P10, rx661_fail
+    rx661_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx661_cur."!cursor_pos"(rx661_pos)
+    $P10 = rx661_cur."ws"()
+    unless $P10, rx661_fail
+    rx661_pos = $P10."pos"()
+  alt671_end:
+  # rx subrule "ws" subtype=method negate=
+    rx661_cur."!cursor_pos"(rx661_pos)
+    $P10 = rx661_cur."ws"()
+    unless $P10, rx661_fail
+    rx661_pos = $P10."pos"()
+.annotate 'line', 310
+  # rx rxquantr679 ** 0..*
+    set_addr $I10, rxquantr679_done
+    rx661_cur."!mark_push"(0, rx661_pos, $I10)
+  rxquantr679_loop:
+  # rx subrule "trait" subtype=capture negate=
+    rx661_cur."!cursor_pos"(rx661_pos)
+    $P10 = rx661_cur."trait"()
+    unless $P10, rx661_fail
+    goto rxsubrule680_pass
+  rxsubrule680_back:
+    $P10 = $P10."!cursor_next"()
+    unless $P10, rx661_fail
+  rxsubrule680_pass:
+    set_addr $I10, rxsubrule680_back
+    rx661_cur."!mark_push"(0, rx661_pos, $I10, $P10)
+    $P10."!cursor_names"("trait")
+    rx661_pos = $P10."pos"()
+    set_addr $I10, rxquantr679_done
+    (rx661_rep) = rx661_cur."!mark_commit"($I10)
+    set_addr $I10, rxquantr679_done
+    rx661_cur."!mark_push"(rx661_rep, rx661_pos, $I10)
+    goto rxquantr679_loop
+  rxquantr679_done:
+  # rx subrule "ws" subtype=method negate=
+    rx661_cur."!cursor_pos"(rx661_pos)
+    $P10 = rx661_cur."ws"()
+    unless $P10, rx661_fail
+    rx661_pos = $P10."pos"()
+.annotate 'line', 311
   # rx subrule "blockoid" subtype=capture negate=
-    rx658_cur."!cursor_pos"(rx658_pos)
-    $P10 = rx658_cur."blockoid"()
-    unless $P10, rx658_fail
-    rx658_cur."!mark_push"(0, -1, 0, $P10)
+    rx661_cur."!cursor_pos"(rx661_pos)
+    $P10 = rx661_cur."blockoid"()
+    unless $P10, rx661_fail
+    rx661_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx658_pos = $P10."pos"()
+    rx661_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx658_cur."!cursor_pos"(rx658_pos)
-    $P10 = rx658_cur."ws"()
-    unless $P10, rx658_fail
-    rx658_pos = $P10."pos"()
-.annotate 'line', 304
+    rx661_cur."!cursor_pos"(rx661_pos)
+    $P10 = rx661_cur."ws"()
+    unless $P10, rx661_fail
+    rx661_pos = $P10."pos"()
+.annotate 'line', 305
   # rx pass
-    rx658_cur."!cursor_pass"(rx658_pos, "method_def")
-    if_null rx658_debug, debug_661
-    rx658_cur."!cursor_debug"("PASS", "method_def", " at pos=", rx658_pos)
-  debug_661:
-    .return (rx658_cur)
-  rx658_restart:
+    rx661_cur."!cursor_pass"(rx661_pos, "method_def")
+    if_null rx661_debug, debug_667
+    rx661_cur."!cursor_debug"("PASS", "method_def", " at pos=", rx661_pos)
+  debug_667:
+    .return (rx661_cur)
+  rx661_restart:
 .annotate 'line', 4
-    if_null rx658_debug, debug_662
-    rx658_cur."!cursor_debug"("NEXT", "method_def")
-  debug_662:
-  rx658_fail:
-    (rx658_rep, rx658_pos, $I10, $P10) = rx658_cur."!mark_fail"(0)
-    lt rx658_pos, -1, rx658_done
-    eq rx658_pos, -1, rx658_fail
-    jump $I10
-  rx658_done:
-    rx658_cur."!cursor_fail"()
-    if_null rx658_debug, debug_663
-    rx658_cur."!cursor_debug"("FAIL", "method_def")
-  debug_663:
-    .return (rx658_cur)
+    if_null rx661_debug, debug_668
+    rx661_cur."!cursor_debug"("NEXT", "method_def")
+  debug_668:
+  rx661_fail:
+    (rx661_rep, rx661_pos, $I10, $P10) = rx661_cur."!mark_fail"(0)
+    lt rx661_pos, -1, rx661_done
+    eq rx661_pos, -1, rx661_fail
+    jump $I10
+  rx661_done:
+    rx661_cur."!cursor_fail"()
+    if_null rx661_debug, debug_669
+    rx661_cur."!cursor_debug"("FAIL", "method_def")
+  debug_669:
+    .return (rx661_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__method_def"  :subid("163_1282324002.40722") :method
+.sub "!PREFIX__method_def"  :subid("163_1284728478.15265") :method
 .annotate 'line', 4
-    $P660 = self."!PREFIX__!subrule"("ws", "")
-    new $P661, "ResizablePMCArray"
-    push $P661, $P660
-    .return ($P661)
+    $P663 = self."!PREFIX__!subrule"("ws", "")
+    new $P664, "ResizablePMCArray"
+    push $P664, $P663
+    .return ($P664)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "multi_declarator"  :subid("164_1282324002.40722") :method
-.annotate 'line', 312
-    $P678 = self."!protoregex"("multi_declarator")
-    .return ($P678)
+.sub "multi_declarator"  :subid("164_1284728478.15265") :method
+.annotate 'line', 314
+    $P684 = self."!protoregex"("multi_declarator")
+    .return ($P684)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__multi_declarator"  :subid("165_1282324002.40722") :method
-.annotate 'line', 312
-    $P680 = self."!PREFIX__!protoregex"("multi_declarator")
-    .return ($P680)
+.sub "!PREFIX__multi_declarator"  :subid("165_1284728478.15265") :method
+.annotate 'line', 314
+    $P686 = self."!PREFIX__!protoregex"("multi_declarator")
+    .return ($P686)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "multi_declarator:sym<multi>"  :subid("166_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 314
-    new $P682, "Undef"
-    .lex "$*MULTINESS", $P682
+.sub "multi_declarator:sym<multi>"  :subid("166_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 316
+    new $P688, "Undef"
+    .lex "$*MULTINESS", $P688
 .annotate 'line', 4
-    .local string rx683_tgt
-    .local int rx683_pos
-    .local int rx683_off
-    .local int rx683_eos
-    .local int rx683_rep
-    .local pmc rx683_cur
-    .local pmc rx683_debug
-    (rx683_cur, rx683_pos, rx683_tgt, $I10) = self."!cursor_start"()
-    getattribute rx683_debug, rx683_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx683_cur
-    .local pmc match
-    .lex "$/", match
-    length rx683_eos, rx683_tgt
-    gt rx683_pos, rx683_eos, rx683_done
-    set rx683_off, 0
-    lt rx683_pos, 2, rx683_start
-    sub rx683_off, rx683_pos, 1
-    substr rx683_tgt, rx683_tgt, rx683_off
-  rx683_start:
-    eq $I10, 1, rx683_restart
-    if_null rx683_debug, debug_664
-    rx683_cur."!cursor_debug"("START", "multi_declarator:sym<multi>")
-  debug_664:
+    .local string rx689_tgt
+    .local int rx689_pos
+    .local int rx689_off
+    .local int rx689_eos
+    .local int rx689_rep
+    .local pmc rx689_cur
+    .local pmc rx689_debug
+    (rx689_cur, rx689_pos, rx689_tgt, $I10) = self."!cursor_start"()
+    getattribute rx689_debug, rx689_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx689_cur
+    .local pmc match
+    .lex "$/", match
+    length rx689_eos, rx689_tgt
+    gt rx689_pos, rx689_eos, rx689_done
+    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:
+    eq $I10, 1, rx689_restart
+    if_null rx689_debug, debug_670
+    rx689_cur."!cursor_debug"("START", "multi_declarator:sym<multi>")
+  debug_670:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan687_done
-    goto rxscan687_scan
-  rxscan687_loop:
-    ($P10) = rx683_cur."from"()
-    inc $P10
-    set rx683_pos, $P10
-    ge rx683_pos, rx683_eos, rxscan687_done
-  rxscan687_scan:
-    set_addr $I10, rxscan687_loop
-    rx683_cur."!mark_push"(0, rx683_pos, $I10)
-  rxscan687_done:
-.annotate 'line', 314
-    rx683_cur."!cursor_pos"(rx683_pos)
-    new $P688, "String"
-    assign $P688, "multi"
-    store_lex "$*MULTINESS", $P688
-.annotate 'line', 315
+    ne $I10, -1, rxscan693_done
+    goto rxscan693_scan
+  rxscan693_loop:
+    ($P10) = rx689_cur."from"()
+    inc $P10
+    set rx689_pos, $P10
+    ge rx689_pos, rx689_eos, rxscan693_done
+  rxscan693_scan:
+    set_addr $I10, rxscan693_loop
+    rx689_cur."!mark_push"(0, rx689_pos, $I10)
+  rxscan693_done:
+.annotate 'line', 316
+    rx689_cur."!cursor_pos"(rx689_pos)
+    new $P694, "String"
+    assign $P694, "multi"
+    store_lex "$*MULTINESS", $P694
+.annotate 'line', 317
   # rx subcapture "sym"
-    set_addr $I10, rxcap_689_fail
-    rx683_cur."!mark_push"(0, rx683_pos, $I10)
+    set_addr $I10, rxcap_695_fail
+    rx689_cur."!mark_push"(0, rx689_pos, $I10)
   # rx literal  "multi"
-    add $I11, rx683_pos, 5
-    gt $I11, rx683_eos, rx683_fail
-    sub $I11, rx683_pos, rx683_off
-    substr $S10, rx683_tgt, $I11, 5
-    ne $S10, "multi", rx683_fail
-    add rx683_pos, 5
-    set_addr $I10, rxcap_689_fail
-    ($I12, $I11) = rx683_cur."!mark_peek"($I10)
-    rx683_cur."!cursor_pos"($I11)
-    ($P10) = rx683_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx683_pos, "")
-    rx683_cur."!mark_push"(0, -1, 0, $P10)
+    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, "multi", rx689_fail
+    add rx689_pos, 5
+    set_addr $I10, rxcap_695_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)
     $P10."!cursor_names"("sym")
-    goto rxcap_689_done
-  rxcap_689_fail:
-    goto rx683_fail
-  rxcap_689_done:
-.annotate 'line', 316
+    goto rxcap_695_done
+  rxcap_695_fail:
+    goto rx689_fail
+  rxcap_695_done:
+.annotate 'line', 318
   # rx subrule "ws" subtype=method negate=
-    rx683_cur."!cursor_pos"(rx683_pos)
-    $P10 = rx683_cur."ws"()
-    unless $P10, rx683_fail
-    rx683_pos = $P10."pos"()
-  alt690_0:
-    set_addr $I10, alt690_1
-    rx683_cur."!mark_push"(0, rx683_pos, $I10)
+    rx689_cur."!cursor_pos"(rx689_pos)
+    $P10 = rx689_cur."ws"()
+    unless $P10, rx689_fail
+    rx689_pos = $P10."pos"()
+  alt696_0:
+    set_addr $I10, alt696_1
+    rx689_cur."!mark_push"(0, rx689_pos, $I10)
   # rx subrule "declarator" subtype=capture negate=
-    rx683_cur."!cursor_pos"(rx683_pos)
-    $P10 = rx683_cur."declarator"()
-    unless $P10, rx683_fail
-    rx683_cur."!mark_push"(0, -1, 0, $P10)
+    rx689_cur."!cursor_pos"(rx689_pos)
+    $P10 = rx689_cur."declarator"()
+    unless $P10, rx689_fail
+    rx689_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("declarator")
-    rx683_pos = $P10."pos"()
-    goto alt690_end
-  alt690_1:
-    set_addr $I10, alt690_2
-    rx683_cur."!mark_push"(0, rx683_pos, $I10)
+    rx689_pos = $P10."pos"()
+    goto alt696_end
+  alt696_1:
+    set_addr $I10, alt696_2
+    rx689_cur."!mark_push"(0, rx689_pos, $I10)
   # rx subrule "routine_def" subtype=capture negate=
-    rx683_cur."!cursor_pos"(rx683_pos)
-    $P10 = rx683_cur."routine_def"()
-    unless $P10, rx683_fail
-    rx683_cur."!mark_push"(0, -1, 0, $P10)
+    rx689_cur."!cursor_pos"(rx689_pos)
+    $P10 = rx689_cur."routine_def"()
+    unless $P10, rx689_fail
+    rx689_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("routine_def")
-    rx683_pos = $P10."pos"()
-    goto alt690_end
-  alt690_2:
+    rx689_pos = $P10."pos"()
+    goto alt696_end
+  alt696_2:
   # rx subrule "panic" subtype=method negate=
-    rx683_cur."!cursor_pos"(rx683_pos)
-    $P10 = rx683_cur."panic"("Malformed multi")
-    unless $P10, rx683_fail
-    rx683_pos = $P10."pos"()
-  alt690_end:
-.annotate 'line', 313
-  # rx pass
-    rx683_cur."!cursor_pass"(rx683_pos, "multi_declarator:sym<multi>")
-    if_null rx683_debug, debug_665
-    rx683_cur."!cursor_debug"("PASS", "multi_declarator:sym<multi>", " at pos=", rx683_pos)
-  debug_665:
-    .return (rx683_cur)
-  rx683_restart:
+    rx689_cur."!cursor_pos"(rx689_pos)
+    $P10 = rx689_cur."panic"("Malformed multi")
+    unless $P10, rx689_fail
+    rx689_pos = $P10."pos"()
+  alt696_end:
+.annotate 'line', 315
+  # rx pass
+    rx689_cur."!cursor_pass"(rx689_pos, "multi_declarator:sym<multi>")
+    if_null rx689_debug, debug_671
+    rx689_cur."!cursor_debug"("PASS", "multi_declarator:sym<multi>", " at pos=", rx689_pos)
+  debug_671:
+    .return (rx689_cur)
+  rx689_restart:
 .annotate 'line', 4
-    if_null rx683_debug, debug_666
-    rx683_cur."!cursor_debug"("NEXT", "multi_declarator:sym<multi>")
-  debug_666:
-  rx683_fail:
-    (rx683_rep, rx683_pos, $I10, $P10) = rx683_cur."!mark_fail"(0)
-    lt rx683_pos, -1, rx683_done
-    eq rx683_pos, -1, rx683_fail
-    jump $I10
-  rx683_done:
-    rx683_cur."!cursor_fail"()
-    if_null rx683_debug, debug_667
-    rx683_cur."!cursor_debug"("FAIL", "multi_declarator:sym<multi>")
-  debug_667:
-    .return (rx683_cur)
+    if_null rx689_debug, debug_672
+    rx689_cur."!cursor_debug"("NEXT", "multi_declarator:sym<multi>")
+  debug_672:
+  rx689_fail:
+    (rx689_rep, rx689_pos, $I10, $P10) = rx689_cur."!mark_fail"(0)
+    lt rx689_pos, -1, rx689_done
+    eq rx689_pos, -1, rx689_fail
+    jump $I10
+  rx689_done:
+    rx689_cur."!cursor_fail"()
+    if_null rx689_debug, debug_673
+    rx689_cur."!cursor_debug"("FAIL", "multi_declarator:sym<multi>")
+  debug_673:
+    .return (rx689_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__multi_declarator:sym<multi>"  :subid("167_1282324002.40722") :method
+.sub "!PREFIX__multi_declarator:sym<multi>"  :subid("167_1284728478.15265") :method
 .annotate 'line', 4
-    $P685 = self."!PREFIX__!subrule"("ws", "multi")
-    new $P686, "ResizablePMCArray"
-    push $P686, $P685
-    .return ($P686)
+    $P691 = self."!PREFIX__!subrule"("ws", "multi")
+    new $P692, "ResizablePMCArray"
+    push $P692, $P691
+    .return ($P692)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "multi_declarator:sym<null>"  :subid("168_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 319
-    new $P692, "Undef"
-    .lex "$*MULTINESS", $P692
-.annotate 'line', 4
-    .local string rx693_tgt
-    .local int rx693_pos
-    .local int rx693_off
-    .local int rx693_eos
-    .local int rx693_rep
-    .local pmc rx693_cur
-    .local pmc rx693_debug
-    (rx693_cur, rx693_pos, rx693_tgt, $I10) = self."!cursor_start"()
-    getattribute rx693_debug, rx693_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx693_cur
-    .local pmc match
-    .lex "$/", match
-    length rx693_eos, rx693_tgt
-    gt rx693_pos, rx693_eos, rx693_done
-    set rx693_off, 0
-    lt rx693_pos, 2, rx693_start
-    sub rx693_off, rx693_pos, 1
-    substr rx693_tgt, rx693_tgt, rx693_off
-  rx693_start:
-    eq $I10, 1, rx693_restart
-    if_null rx693_debug, debug_668
-    rx693_cur."!cursor_debug"("START", "multi_declarator:sym<null>")
-  debug_668:
+.sub "multi_declarator:sym<null>"  :subid("168_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 321
+    new $P698, "Undef"
+    .lex "$*MULTINESS", $P698
+.annotate 'line', 4
+    .local string rx699_tgt
+    .local int rx699_pos
+    .local int rx699_off
+    .local int rx699_eos
+    .local int rx699_rep
+    .local pmc rx699_cur
+    .local pmc rx699_debug
+    (rx699_cur, rx699_pos, rx699_tgt, $I10) = self."!cursor_start"()
+    getattribute rx699_debug, rx699_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx699_cur
+    .local pmc match
+    .lex "$/", match
+    length rx699_eos, rx699_tgt
+    gt rx699_pos, rx699_eos, rx699_done
+    set rx699_off, 0
+    lt rx699_pos, 2, rx699_start
+    sub rx699_off, rx699_pos, 1
+    substr rx699_tgt, rx699_tgt, rx699_off
+  rx699_start:
+    eq $I10, 1, rx699_restart
+    if_null rx699_debug, debug_674
+    rx699_cur."!cursor_debug"("START", "multi_declarator:sym<null>")
+  debug_674:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan697_done
-    goto rxscan697_scan
-  rxscan697_loop:
-    ($P10) = rx693_cur."from"()
-    inc $P10
-    set rx693_pos, $P10
-    ge rx693_pos, rx693_eos, rxscan697_done
-  rxscan697_scan:
-    set_addr $I10, rxscan697_loop
-    rx693_cur."!mark_push"(0, rx693_pos, $I10)
-  rxscan697_done:
-.annotate 'line', 319
-    rx693_cur."!cursor_pos"(rx693_pos)
-    new $P698, "String"
-    assign $P698, ""
-    store_lex "$*MULTINESS", $P698
-.annotate 'line', 320
+    ne $I10, -1, rxscan703_done
+    goto rxscan703_scan
+  rxscan703_loop:
+    ($P10) = rx699_cur."from"()
+    inc $P10
+    set rx699_pos, $P10
+    ge rx699_pos, rx699_eos, rxscan703_done
+  rxscan703_scan:
+    set_addr $I10, rxscan703_loop
+    rx699_cur."!mark_push"(0, rx699_pos, $I10)
+  rxscan703_done:
+.annotate 'line', 321
+    rx699_cur."!cursor_pos"(rx699_pos)
+    new $P704, "String"
+    assign $P704, ""
+    store_lex "$*MULTINESS", $P704
+.annotate 'line', 322
   # rx subrule "declarator" subtype=capture negate=
-    rx693_cur."!cursor_pos"(rx693_pos)
-    $P10 = rx693_cur."declarator"()
-    unless $P10, rx693_fail
-    rx693_cur."!mark_push"(0, -1, 0, $P10)
+    rx699_cur."!cursor_pos"(rx699_pos)
+    $P10 = rx699_cur."declarator"()
+    unless $P10, rx699_fail
+    rx699_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("declarator")
-    rx693_pos = $P10."pos"()
-.annotate 'line', 318
+    rx699_pos = $P10."pos"()
+.annotate 'line', 320
   # rx pass
-    rx693_cur."!cursor_pass"(rx693_pos, "multi_declarator:sym<null>")
-    if_null rx693_debug, debug_669
-    rx693_cur."!cursor_debug"("PASS", "multi_declarator:sym<null>", " at pos=", rx693_pos)
-  debug_669:
-    .return (rx693_cur)
-  rx693_restart:
+    rx699_cur."!cursor_pass"(rx699_pos, "multi_declarator:sym<null>")
+    if_null rx699_debug, debug_675
+    rx699_cur."!cursor_debug"("PASS", "multi_declarator:sym<null>", " at pos=", rx699_pos)
+  debug_675:
+    .return (rx699_cur)
+  rx699_restart:
 .annotate 'line', 4
-    if_null rx693_debug, debug_670
-    rx693_cur."!cursor_debug"("NEXT", "multi_declarator:sym<null>")
-  debug_670:
-  rx693_fail:
-    (rx693_rep, rx693_pos, $I10, $P10) = rx693_cur."!mark_fail"(0)
-    lt rx693_pos, -1, rx693_done
-    eq rx693_pos, -1, rx693_fail
-    jump $I10
-  rx693_done:
-    rx693_cur."!cursor_fail"()
-    if_null rx693_debug, debug_671
-    rx693_cur."!cursor_debug"("FAIL", "multi_declarator:sym<null>")
-  debug_671:
-    .return (rx693_cur)
+    if_null rx699_debug, debug_676
+    rx699_cur."!cursor_debug"("NEXT", "multi_declarator:sym<null>")
+  debug_676:
+  rx699_fail:
+    (rx699_rep, rx699_pos, $I10, $P10) = rx699_cur."!mark_fail"(0)
+    lt rx699_pos, -1, rx699_done
+    eq rx699_pos, -1, rx699_fail
+    jump $I10
+  rx699_done:
+    rx699_cur."!cursor_fail"()
+    if_null rx699_debug, debug_677
+    rx699_cur."!cursor_debug"("FAIL", "multi_declarator:sym<null>")
+  debug_677:
+    .return (rx699_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__multi_declarator:sym<null>"  :subid("169_1282324002.40722") :method
+.sub "!PREFIX__multi_declarator:sym<null>"  :subid("169_1284728478.15265") :method
 .annotate 'line', 4
-    $P695 = self."!PREFIX__!subrule"("declarator", "")
-    new $P696, "ResizablePMCArray"
-    push $P696, $P695
-    .return ($P696)
+    $P701 = self."!PREFIX__!subrule"("declarator", "")
+    new $P702, "ResizablePMCArray"
+    push $P702, $P701
+    .return ($P702)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "signature"  :subid("170_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "signature"  :subid("170_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .local string rx700_tgt
-    .local int rx700_pos
-    .local int rx700_off
-    .local int rx700_eos
-    .local int rx700_rep
-    .local pmc rx700_cur
-    .local pmc rx700_debug
-    (rx700_cur, rx700_pos, rx700_tgt, $I10) = self."!cursor_start"()
-    rx700_cur."!cursor_caparray"("parameter")
-    getattribute rx700_debug, rx700_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx700_cur
-    .local pmc match
-    .lex "$/", match
-    length rx700_eos, rx700_tgt
-    gt rx700_pos, rx700_eos, rx700_done
-    set rx700_off, 0
-    lt rx700_pos, 2, rx700_start
-    sub rx700_off, rx700_pos, 1
-    substr rx700_tgt, rx700_tgt, rx700_off
-  rx700_start:
-    eq $I10, 1, rx700_restart
-    if_null rx700_debug, debug_672
-    rx700_cur."!cursor_debug"("START", "signature")
-  debug_672:
+    .local string rx706_tgt
+    .local int rx706_pos
+    .local int rx706_off
+    .local int rx706_eos
+    .local int rx706_rep
+    .local pmc rx706_cur
+    .local pmc rx706_debug
+    (rx706_cur, rx706_pos, rx706_tgt, $I10) = self."!cursor_start"()
+    rx706_cur."!cursor_caparray"("parameter")
+    getattribute rx706_debug, rx706_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx706_cur
+    .local pmc match
+    .lex "$/", match
+    length rx706_eos, rx706_tgt
+    gt rx706_pos, rx706_eos, rx706_done
+    set rx706_off, 0
+    lt rx706_pos, 2, rx706_start
+    sub rx706_off, rx706_pos, 1
+    substr rx706_tgt, rx706_tgt, rx706_off
+  rx706_start:
+    eq $I10, 1, rx706_restart
+    if_null rx706_debug, debug_678
+    rx706_cur."!cursor_debug"("START", "signature")
+  debug_678:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan703_done
-    goto rxscan703_scan
-  rxscan703_loop:
-    ($P10) = rx700_cur."from"()
-    inc $P10
-    set rx700_pos, $P10
-    ge rx700_pos, rx700_eos, rxscan703_done
-  rxscan703_scan:
-    set_addr $I10, rxscan703_loop
-    rx700_cur."!mark_push"(0, rx700_pos, $I10)
-  rxscan703_done:
-.annotate 'line', 323
-  # rx rxquantr704 ** 0..1
-    set_addr $I10, rxquantr704_done
-    rx700_cur."!mark_push"(0, rx700_pos, $I10)
-  rxquantr704_loop:
-  # rx rxquantr705 ** 1..*
-    set_addr $I10, rxquantr705_done
-    rx700_cur."!mark_push"(0, -1, $I10)
-  rxquantr705_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx700_cur."!cursor_pos"(rx700_pos)
-    $P10 = rx700_cur."ws"()
-    unless $P10, rx700_fail
-    rx700_pos = $P10."pos"()
+    ne $I10, -1, rxscan709_done
+    goto rxscan709_scan
+  rxscan709_loop:
+    ($P10) = rx706_cur."from"()
+    inc $P10
+    set rx706_pos, $P10
+    ge rx706_pos, rx706_eos, rxscan709_done
+  rxscan709_scan:
+    set_addr $I10, rxscan709_loop
+    rx706_cur."!mark_push"(0, rx706_pos, $I10)
+  rxscan709_done:
+.annotate 'line', 325
+  # rx rxquantr710 ** 0..1
+    set_addr $I10, rxquantr710_done
+    rx706_cur."!mark_push"(0, rx706_pos, $I10)
+  rxquantr710_loop:
+  # rx rxquantr711 ** 1..*
+    set_addr $I10, rxquantr711_done
+    rx706_cur."!mark_push"(0, -1, $I10)
+  rxquantr711_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx706_cur."!cursor_pos"(rx706_pos)
+    $P10 = rx706_cur."ws"()
+    unless $P10, rx706_fail
+    rx706_pos = $P10."pos"()
   # rx subrule "parameter" subtype=capture negate=
-    rx700_cur."!cursor_pos"(rx700_pos)
-    $P10 = rx700_cur."parameter"()
-    unless $P10, rx700_fail
-    rx700_cur."!mark_push"(0, -1, 0, $P10)
+    rx706_cur."!cursor_pos"(rx706_pos)
+    $P10 = rx706_cur."parameter"()
+    unless $P10, rx706_fail
+    rx706_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("parameter")
-    rx700_pos = $P10."pos"()
+    rx706_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx700_cur."!cursor_pos"(rx700_pos)
-    $P10 = rx700_cur."ws"()
-    unless $P10, rx700_fail
-    rx700_pos = $P10."pos"()
-    set_addr $I10, rxquantr705_done
-    (rx700_rep) = rx700_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr705_done
-    rx700_cur."!mark_push"(rx700_rep, rx700_pos, $I10)
+    rx706_cur."!cursor_pos"(rx706_pos)
+    $P10 = rx706_cur."ws"()
+    unless $P10, rx706_fail
+    rx706_pos = $P10."pos"()
+    set_addr $I10, rxquantr711_done
+    (rx706_rep) = rx706_cur."!mark_commit"($I10)
+    set_addr $I10, rxquantr711_done
+    rx706_cur."!mark_push"(rx706_rep, rx706_pos, $I10)
   # rx literal  ","
-    add $I11, rx700_pos, 1
-    gt $I11, rx700_eos, rx700_fail
-    sub $I11, rx700_pos, rx700_off
-    ord $I11, rx700_tgt, $I11
-    ne $I11, 44, rx700_fail
-    add rx700_pos, 1
-    goto rxquantr705_loop
-  rxquantr705_done:
-    set_addr $I10, rxquantr704_done
-    (rx700_rep) = rx700_cur."!mark_commit"($I10)
-  rxquantr704_done:
-  # rx pass
-    rx700_cur."!cursor_pass"(rx700_pos, "signature")
-    if_null rx700_debug, debug_673
-    rx700_cur."!cursor_debug"("PASS", "signature", " at pos=", rx700_pos)
-  debug_673:
-    .return (rx700_cur)
-  rx700_restart:
+    add $I11, rx706_pos, 1
+    gt $I11, rx706_eos, rx706_fail
+    sub $I11, rx706_pos, rx706_off
+    ord $I11, rx706_tgt, $I11
+    ne $I11, 44, rx706_fail
+    add rx706_pos, 1
+    goto rxquantr711_loop
+  rxquantr711_done:
+    set_addr $I10, rxquantr710_done
+    (rx706_rep) = rx706_cur."!mark_commit"($I10)
+  rxquantr710_done:
+  # rx pass
+    rx706_cur."!cursor_pass"(rx706_pos, "signature")
+    if_null rx706_debug, debug_679
+    rx706_cur."!cursor_debug"("PASS", "signature", " at pos=", rx706_pos)
+  debug_679:
+    .return (rx706_cur)
+  rx706_restart:
 .annotate 'line', 4
-    if_null rx700_debug, debug_674
-    rx700_cur."!cursor_debug"("NEXT", "signature")
-  debug_674:
-  rx700_fail:
-    (rx700_rep, rx700_pos, $I10, $P10) = rx700_cur."!mark_fail"(0)
-    lt rx700_pos, -1, rx700_done
-    eq rx700_pos, -1, rx700_fail
-    jump $I10
-  rx700_done:
-    rx700_cur."!cursor_fail"()
-    if_null rx700_debug, debug_675
-    rx700_cur."!cursor_debug"("FAIL", "signature")
-  debug_675:
-    .return (rx700_cur)
+    if_null rx706_debug, debug_680
+    rx706_cur."!cursor_debug"("NEXT", "signature")
+  debug_680:
+  rx706_fail:
+    (rx706_rep, rx706_pos, $I10, $P10) = rx706_cur."!mark_fail"(0)
+    lt rx706_pos, -1, rx706_done
+    eq rx706_pos, -1, rx706_fail
+    jump $I10
+  rx706_done:
+    rx706_cur."!cursor_fail"()
+    if_null rx706_debug, debug_681
+    rx706_cur."!cursor_debug"("FAIL", "signature")
+  debug_681:
+    .return (rx706_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__signature"  :subid("171_1282324002.40722") :method
+.sub "!PREFIX__signature"  :subid("171_1284728478.15265") :method
 .annotate 'line', 4
-    new $P702, "ResizablePMCArray"
-    push $P702, ""
-    .return ($P702)
+    new $P708, "ResizablePMCArray"
+    push $P708, ""
+    .return ($P708)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "parameter"  :subid("172_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "parameter"  :subid("172_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .local string rx707_tgt
-    .local int rx707_pos
-    .local int rx707_off
-    .local int rx707_eos
-    .local int rx707_rep
-    .local pmc rx707_cur
-    .local pmc rx707_debug
-    (rx707_cur, rx707_pos, rx707_tgt, $I10) = self."!cursor_start"()
-    rx707_cur."!cursor_caparray"("default_value", "typename")
-    getattribute rx707_debug, rx707_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx707_cur
-    .local pmc match
-    .lex "$/", match
-    length rx707_eos, rx707_tgt
-    gt rx707_pos, rx707_eos, rx707_done
-    set rx707_off, 0
-    lt rx707_pos, 2, rx707_start
-    sub rx707_off, rx707_pos, 1
-    substr rx707_tgt, rx707_tgt, rx707_off
-  rx707_start:
-    eq $I10, 1, rx707_restart
-    if_null rx707_debug, debug_676
-    rx707_cur."!cursor_debug"("START", "parameter")
-  debug_676:
+    .local string rx713_tgt
+    .local int rx713_pos
+    .local int rx713_off
+    .local int rx713_eos
+    .local int rx713_rep
+    .local pmc rx713_cur
+    .local pmc rx713_debug
+    (rx713_cur, rx713_pos, rx713_tgt, $I10) = self."!cursor_start"()
+    rx713_cur."!cursor_caparray"("default_value", "typename")
+    getattribute rx713_debug, rx713_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx713_cur
+    .local pmc match
+    .lex "$/", match
+    length rx713_eos, rx713_tgt
+    gt rx713_pos, rx713_eos, rx713_done
+    set rx713_off, 0
+    lt rx713_pos, 2, rx713_start
+    sub rx713_off, rx713_pos, 1
+    substr rx713_tgt, rx713_tgt, rx713_off
+  rx713_start:
+    eq $I10, 1, rx713_restart
+    if_null rx713_debug, debug_682
+    rx713_cur."!cursor_debug"("START", "parameter")
+  debug_682:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan710_done
-    goto rxscan710_scan
-  rxscan710_loop:
-    ($P10) = rx707_cur."from"()
-    inc $P10
-    set rx707_pos, $P10
-    ge rx707_pos, rx707_eos, rxscan710_done
-  rxscan710_scan:
-    set_addr $I10, rxscan710_loop
-    rx707_cur."!mark_push"(0, rx707_pos, $I10)
-  rxscan710_done:
-.annotate 'line', 326
-  # rx rxquantr711 ** 0..*
-    set_addr $I10, rxquantr711_done
-    rx707_cur."!mark_push"(0, rx707_pos, $I10)
-  rxquantr711_loop:
+    ne $I10, -1, rxscan716_done
+    goto rxscan716_scan
+  rxscan716_loop:
+    ($P10) = rx713_cur."from"()
+    inc $P10
+    set rx713_pos, $P10
+    ge rx713_pos, rx713_eos, rxscan716_done
+  rxscan716_scan:
+    set_addr $I10, rxscan716_loop
+    rx713_cur."!mark_push"(0, rx713_pos, $I10)
+  rxscan716_done:
+.annotate 'line', 328
+  # rx rxquantr717 ** 0..*
+    set_addr $I10, rxquantr717_done
+    rx713_cur."!mark_push"(0, rx713_pos, $I10)
+  rxquantr717_loop:
   # rx subrule "typename" subtype=capture negate=
-    rx707_cur."!cursor_pos"(rx707_pos)
-    $P10 = rx707_cur."typename"()
-    unless $P10, rx707_fail
-    rx707_cur."!mark_push"(0, -1, 0, $P10)
+    rx713_cur."!cursor_pos"(rx713_pos)
+    $P10 = rx713_cur."typename"()
+    unless $P10, rx713_fail
+    rx713_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("typename")
-    rx707_pos = $P10."pos"()
+    rx713_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx707_cur."!cursor_pos"(rx707_pos)
-    $P10 = rx707_cur."ws"()
-    unless $P10, rx707_fail
-    rx707_pos = $P10."pos"()
-    set_addr $I10, rxquantr711_done
-    (rx707_rep) = rx707_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr711_done
-    rx707_cur."!mark_push"(rx707_rep, rx707_pos, $I10)
-    goto rxquantr711_loop
-  rxquantr711_done:
-  alt712_0:
-.annotate 'line', 327
-    set_addr $I10, alt712_1
-    rx707_cur."!mark_push"(0, rx707_pos, $I10)
-.annotate 'line', 328
+    rx713_cur."!cursor_pos"(rx713_pos)
+    $P10 = rx713_cur."ws"()
+    unless $P10, rx713_fail
+    rx713_pos = $P10."pos"()
+    set_addr $I10, rxquantr717_done
+    (rx713_rep) = rx713_cur."!mark_commit"($I10)
+    set_addr $I10, rxquantr717_done
+    rx713_cur."!mark_push"(rx713_rep, rx713_pos, $I10)
+    goto rxquantr717_loop
+  rxquantr717_done:
+  alt718_0:
+.annotate 'line', 329
+    set_addr $I10, alt718_1
+    rx713_cur."!mark_push"(0, rx713_pos, $I10)
+.annotate 'line', 330
   # rx subcapture "quant"
-    set_addr $I10, rxcap_713_fail
-    rx707_cur."!mark_push"(0, rx707_pos, $I10)
+    set_addr $I10, rxcap_719_fail
+    rx713_cur."!mark_push"(0, rx713_pos, $I10)
   # rx literal  "*"
-    add $I11, rx707_pos, 1
-    gt $I11, rx707_eos, rx707_fail
-    sub $I11, rx707_pos, rx707_off
-    ord $I11, rx707_tgt, $I11
-    ne $I11, 42, rx707_fail
-    add rx707_pos, 1
-    set_addr $I10, rxcap_713_fail
-    ($I12, $I11) = rx707_cur."!mark_peek"($I10)
-    rx707_cur."!cursor_pos"($I11)
-    ($P10) = rx707_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx707_pos, "")
-    rx707_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx713_pos, 1
+    gt $I11, rx713_eos, rx713_fail
+    sub $I11, rx713_pos, rx713_off
+    ord $I11, rx713_tgt, $I11
+    ne $I11, 42, rx713_fail
+    add rx713_pos, 1
+    set_addr $I10, rxcap_719_fail
+    ($I12, $I11) = rx713_cur."!mark_peek"($I10)
+    rx713_cur."!cursor_pos"($I11)
+    ($P10) = rx713_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx713_pos, "")
+    rx713_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quant")
-    goto rxcap_713_done
-  rxcap_713_fail:
-    goto rx707_fail
-  rxcap_713_done:
+    goto rxcap_719_done
+  rxcap_719_fail:
+    goto rx713_fail
+  rxcap_719_done:
   # rx subrule "param_var" subtype=capture negate=
-    rx707_cur."!cursor_pos"(rx707_pos)
-    $P10 = rx707_cur."param_var"()
-    unless $P10, rx707_fail
-    rx707_cur."!mark_push"(0, -1, 0, $P10)
+    rx713_cur."!cursor_pos"(rx713_pos)
+    $P10 = rx713_cur."param_var"()
+    unless $P10, rx713_fail
+    rx713_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("param_var")
-    rx707_pos = $P10."pos"()
-    goto alt712_end
-  alt712_1:
-  alt714_0:
-.annotate 'line', 329
-    set_addr $I10, alt714_1
-    rx707_cur."!mark_push"(0, rx707_pos, $I10)
+    rx713_pos = $P10."pos"()
+    goto alt718_end
+  alt718_1:
+  alt720_0:
+.annotate 'line', 331
+    set_addr $I10, alt720_1
+    rx713_cur."!mark_push"(0, rx713_pos, $I10)
   # rx subrule "param_var" subtype=capture negate=
-    rx707_cur."!cursor_pos"(rx707_pos)
-    $P10 = rx707_cur."param_var"()
-    unless $P10, rx707_fail
-    rx707_cur."!mark_push"(0, -1, 0, $P10)
+    rx713_cur."!cursor_pos"(rx713_pos)
+    $P10 = rx713_cur."param_var"()
+    unless $P10, rx713_fail
+    rx713_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("param_var")
-    rx707_pos = $P10."pos"()
-    goto alt714_end
-  alt714_1:
+    rx713_pos = $P10."pos"()
+    goto alt720_end
+  alt720_1:
   # rx subrule "named_param" subtype=capture negate=
-    rx707_cur."!cursor_pos"(rx707_pos)
-    $P10 = rx707_cur."named_param"()
-    unless $P10, rx707_fail
-    rx707_cur."!mark_push"(0, -1, 0, $P10)
+    rx713_cur."!cursor_pos"(rx713_pos)
+    $P10 = rx713_cur."named_param"()
+    unless $P10, rx713_fail
+    rx713_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("named_param")
-    rx707_pos = $P10."pos"()
-  alt714_end:
+    rx713_pos = $P10."pos"()
+  alt720_end:
   # rx subcapture "quant"
-    set_addr $I10, rxcap_716_fail
-    rx707_cur."!mark_push"(0, rx707_pos, $I10)
-  alt715_0:
-    set_addr $I10, alt715_1
-    rx707_cur."!mark_push"(0, rx707_pos, $I10)
+    set_addr $I10, rxcap_722_fail
+    rx713_cur."!mark_push"(0, rx713_pos, $I10)
+  alt721_0:
+    set_addr $I10, alt721_1
+    rx713_cur."!mark_push"(0, rx713_pos, $I10)
   # rx literal  "?"
-    add $I11, rx707_pos, 1
-    gt $I11, rx707_eos, rx707_fail
-    sub $I11, rx707_pos, rx707_off
-    ord $I11, rx707_tgt, $I11
-    ne $I11, 63, rx707_fail
-    add rx707_pos, 1
-    goto alt715_end
-  alt715_1:
-    set_addr $I10, alt715_2
-    rx707_cur."!mark_push"(0, rx707_pos, $I10)
+    add $I11, rx713_pos, 1
+    gt $I11, rx713_eos, rx713_fail
+    sub $I11, rx713_pos, rx713_off
+    ord $I11, rx713_tgt, $I11
+    ne $I11, 63, rx713_fail
+    add rx713_pos, 1
+    goto alt721_end
+  alt721_1:
+    set_addr $I10, alt721_2
+    rx713_cur."!mark_push"(0, rx713_pos, $I10)
   # rx literal  "!"
-    add $I11, rx707_pos, 1
-    gt $I11, rx707_eos, rx707_fail
-    sub $I11, rx707_pos, rx707_off
-    ord $I11, rx707_tgt, $I11
-    ne $I11, 33, rx707_fail
-    add rx707_pos, 1
-    goto alt715_end
-  alt715_2:
-  alt715_end:
-    set_addr $I10, rxcap_716_fail
-    ($I12, $I11) = rx707_cur."!mark_peek"($I10)
-    rx707_cur."!cursor_pos"($I11)
-    ($P10) = rx707_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx707_pos, "")
-    rx707_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx713_pos, 1
+    gt $I11, rx713_eos, rx713_fail
+    sub $I11, rx713_pos, rx713_off
+    ord $I11, rx713_tgt, $I11
+    ne $I11, 33, rx713_fail
+    add rx713_pos, 1
+    goto alt721_end
+  alt721_2:
+  alt721_end:
+    set_addr $I10, rxcap_722_fail
+    ($I12, $I11) = rx713_cur."!mark_peek"($I10)
+    rx713_cur."!cursor_pos"($I11)
+    ($P10) = rx713_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx713_pos, "")
+    rx713_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quant")
-    goto rxcap_716_done
-  rxcap_716_fail:
-    goto rx707_fail
-  rxcap_716_done:
-  alt712_end:
-.annotate 'line', 331
-  # rx rxquantr717 ** 0..1
-    set_addr $I10, rxquantr717_done
-    rx707_cur."!mark_push"(0, rx707_pos, $I10)
-  rxquantr717_loop:
+    goto rxcap_722_done
+  rxcap_722_fail:
+    goto rx713_fail
+  rxcap_722_done:
+  alt718_end:
+.annotate 'line', 333
+  # rx rxquantr723 ** 0..1
+    set_addr $I10, rxquantr723_done
+    rx713_cur."!mark_push"(0, rx713_pos, $I10)
+  rxquantr723_loop:
   # rx subrule "default_value" subtype=capture negate=
-    rx707_cur."!cursor_pos"(rx707_pos)
-    $P10 = rx707_cur."default_value"()
-    unless $P10, rx707_fail
-    goto rxsubrule718_pass
-  rxsubrule718_back:
+    rx713_cur."!cursor_pos"(rx713_pos)
+    $P10 = rx713_cur."default_value"()
+    unless $P10, rx713_fail
+    goto rxsubrule724_pass
+  rxsubrule724_back:
     $P10 = $P10."!cursor_next"()
-    unless $P10, rx707_fail
-  rxsubrule718_pass:
-    set_addr $I10, rxsubrule718_back
-    rx707_cur."!mark_push"(0, rx707_pos, $I10, $P10)
+    unless $P10, rx713_fail
+  rxsubrule724_pass:
+    set_addr $I10, rxsubrule724_back
+    rx713_cur."!mark_push"(0, rx713_pos, $I10, $P10)
     $P10."!cursor_names"("default_value")
-    rx707_pos = $P10."pos"()
-    set_addr $I10, rxquantr717_done
-    (rx707_rep) = rx707_cur."!mark_commit"($I10)
-  rxquantr717_done:
-.annotate 'line', 325
+    rx713_pos = $P10."pos"()
+    set_addr $I10, rxquantr723_done
+    (rx713_rep) = rx713_cur."!mark_commit"($I10)
+  rxquantr723_done:
+.annotate 'line', 327
   # rx pass
-    rx707_cur."!cursor_pass"(rx707_pos, "parameter")
-    if_null rx707_debug, debug_677
-    rx707_cur."!cursor_debug"("PASS", "parameter", " at pos=", rx707_pos)
-  debug_677:
-    .return (rx707_cur)
-  rx707_restart:
+    rx713_cur."!cursor_pass"(rx713_pos, "parameter")
+    if_null rx713_debug, debug_683
+    rx713_cur."!cursor_debug"("PASS", "parameter", " at pos=", rx713_pos)
+  debug_683:
+    .return (rx713_cur)
+  rx713_restart:
 .annotate 'line', 4
-    if_null rx707_debug, debug_678
-    rx707_cur."!cursor_debug"("NEXT", "parameter")
-  debug_678:
-  rx707_fail:
-    (rx707_rep, rx707_pos, $I10, $P10) = rx707_cur."!mark_fail"(0)
-    lt rx707_pos, -1, rx707_done
-    eq rx707_pos, -1, rx707_fail
-    jump $I10
-  rx707_done:
-    rx707_cur."!cursor_fail"()
-    if_null rx707_debug, debug_679
-    rx707_cur."!cursor_debug"("FAIL", "parameter")
-  debug_679:
-    .return (rx707_cur)
+    if_null rx713_debug, debug_684
+    rx713_cur."!cursor_debug"("NEXT", "parameter")
+  debug_684:
+  rx713_fail:
+    (rx713_rep, rx713_pos, $I10, $P10) = rx713_cur."!mark_fail"(0)
+    lt rx713_pos, -1, rx713_done
+    eq rx713_pos, -1, rx713_fail
+    jump $I10
+  rx713_done:
+    rx713_cur."!cursor_fail"()
+    if_null rx713_debug, debug_685
+    rx713_cur."!cursor_debug"("FAIL", "parameter")
+  debug_685:
+    .return (rx713_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__parameter"  :subid("173_1282324002.40722") :method
+.sub "!PREFIX__parameter"  :subid("173_1284728478.15265") :method
 .annotate 'line', 4
-    new $P709, "ResizablePMCArray"
-    push $P709, ""
-    .return ($P709)
+    new $P715, "ResizablePMCArray"
+    push $P715, ""
+    .return ($P715)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "param_var"  :subid("174_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "param_var"  :subid("174_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .local string rx720_tgt
-    .local int rx720_pos
-    .local int rx720_off
-    .local int rx720_eos
-    .local int rx720_rep
-    .local pmc rx720_cur
-    .local pmc rx720_debug
-    (rx720_cur, rx720_pos, rx720_tgt, $I10) = self."!cursor_start"()
-    rx720_cur."!cursor_caparray"("twigil")
-    getattribute rx720_debug, rx720_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx720_cur
+    .local string rx726_tgt
+    .local int rx726_pos
+    .local int rx726_off
+    .local int rx726_eos
+    .local int rx726_rep
+    .local pmc rx726_cur
+    .local pmc rx726_debug
+    (rx726_cur, rx726_pos, rx726_tgt, $I10) = self."!cursor_start"()
+    rx726_cur."!cursor_caparray"("twigil")
+    getattribute rx726_debug, rx726_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx726_cur
     .local pmc match
     .lex "$/", match
-    length rx720_eos, rx720_tgt
-    gt rx720_pos, rx720_eos, rx720_done
-    set rx720_off, 0
-    lt rx720_pos, 2, rx720_start
-    sub rx720_off, rx720_pos, 1
-    substr rx720_tgt, rx720_tgt, rx720_off
-  rx720_start:
-    eq $I10, 1, rx720_restart
-    if_null rx720_debug, debug_680
-    rx720_cur."!cursor_debug"("START", "param_var")
-  debug_680:
+    length rx726_eos, rx726_tgt
+    gt rx726_pos, rx726_eos, rx726_done
+    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:
+    eq $I10, 1, rx726_restart
+    if_null rx726_debug, debug_686
+    rx726_cur."!cursor_debug"("START", "param_var")
+  debug_686:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan724_done
-    goto rxscan724_scan
-  rxscan724_loop:
-    ($P10) = rx720_cur."from"()
-    inc $P10
-    set rx720_pos, $P10
-    ge rx720_pos, rx720_eos, rxscan724_done
-  rxscan724_scan:
-    set_addr $I10, rxscan724_loop
-    rx720_cur."!mark_push"(0, rx720_pos, $I10)
-  rxscan724_done:
-.annotate 'line', 335
+    ne $I10, -1, rxscan730_done
+    goto rxscan730_scan
+  rxscan730_loop:
+    ($P10) = rx726_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', 337
   # rx subrule "sigil" subtype=capture negate=
-    rx720_cur."!cursor_pos"(rx720_pos)
-    $P10 = rx720_cur."sigil"()
-    unless $P10, rx720_fail
-    rx720_cur."!mark_push"(0, -1, 0, $P10)
+    rx726_cur."!cursor_pos"(rx726_pos)
+    $P10 = rx726_cur."sigil"()
+    unless $P10, rx726_fail
+    rx726_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    rx720_pos = $P10."pos"()
-  # rx rxquantr725 ** 0..1
-    set_addr $I10, rxquantr725_done
-    rx720_cur."!mark_push"(0, rx720_pos, $I10)
-  rxquantr725_loop:
+    rx726_pos = $P10."pos"()
+  # rx rxquantr731 ** 0..1
+    set_addr $I10, rxquantr731_done
+    rx726_cur."!mark_push"(0, rx726_pos, $I10)
+  rxquantr731_loop:
   # rx subrule "twigil" subtype=capture negate=
-    rx720_cur."!cursor_pos"(rx720_pos)
-    $P10 = rx720_cur."twigil"()
-    unless $P10, rx720_fail
-    goto rxsubrule726_pass
-  rxsubrule726_back:
+    rx726_cur."!cursor_pos"(rx726_pos)
+    $P10 = rx726_cur."twigil"()
+    unless $P10, rx726_fail
+    goto rxsubrule732_pass
+  rxsubrule732_back:
     $P10 = $P10."!cursor_next"()
-    unless $P10, rx720_fail
-  rxsubrule726_pass:
-    set_addr $I10, rxsubrule726_back
-    rx720_cur."!mark_push"(0, rx720_pos, $I10, $P10)
+    unless $P10, rx726_fail
+  rxsubrule732_pass:
+    set_addr $I10, rxsubrule732_back
+    rx726_cur."!mark_push"(0, rx726_pos, $I10, $P10)
     $P10."!cursor_names"("twigil")
-    rx720_pos = $P10."pos"()
-    set_addr $I10, rxquantr725_done
-    (rx720_rep) = rx720_cur."!mark_commit"($I10)
-  rxquantr725_done:
-  alt727_0:
-.annotate 'line', 336
-    set_addr $I10, alt727_1
-    rx720_cur."!mark_push"(0, rx720_pos, $I10)
+    rx726_pos = $P10."pos"()
+    set_addr $I10, rxquantr731_done
+    (rx726_rep) = rx726_cur."!mark_commit"($I10)
+  rxquantr731_done:
+  alt733_0:
+.annotate 'line', 338
+    set_addr $I10, alt733_1
+    rx726_cur."!mark_push"(0, rx726_pos, $I10)
   # rx subrule "ident" subtype=capture negate=
-    rx720_cur."!cursor_pos"(rx720_pos)
-    $P10 = rx720_cur."ident"()
-    unless $P10, rx720_fail
-    rx720_cur."!mark_push"(0, -1, 0, $P10)
+    rx726_cur."!cursor_pos"(rx726_pos)
+    $P10 = rx726_cur."ident"()
+    unless $P10, rx726_fail
+    rx726_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    rx720_pos = $P10."pos"()
-    goto alt727_end
-  alt727_1:
+    rx726_pos = $P10."pos"()
+    goto alt733_end
+  alt733_1:
   # rx subcapture "name"
-    set_addr $I10, rxcap_728_fail
-    rx720_cur."!mark_push"(0, rx720_pos, $I10)
+    set_addr $I10, rxcap_734_fail
+    rx726_cur."!mark_push"(0, rx726_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx720_pos, rx720_eos, rx720_fail
-    sub $I10, rx720_pos, rx720_off
-    substr $S10, rx720_tgt, $I10, 1
+    ge rx726_pos, rx726_eos, rx726_fail
+    sub $I10, rx726_pos, rx726_off
+    substr $S10, rx726_tgt, $I10, 1
     index $I11, "/!", $S10
-    lt $I11, 0, rx720_fail
-    inc rx720_pos
-    set_addr $I10, rxcap_728_fail
-    ($I12, $I11) = rx720_cur."!mark_peek"($I10)
-    rx720_cur."!cursor_pos"($I11)
-    ($P10) = rx720_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx720_pos, "")
-    rx720_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx726_fail
+    inc rx726_pos
+    set_addr $I10, rxcap_734_fail
+    ($I12, $I11) = rx726_cur."!mark_peek"($I10)
+    rx726_cur."!cursor_pos"($I11)
+    ($P10) = rx726_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx726_pos, "")
+    rx726_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    goto rxcap_728_done
-  rxcap_728_fail:
-    goto rx720_fail
-  rxcap_728_done:
-  alt727_end:
-.annotate 'line', 334
+    goto rxcap_734_done
+  rxcap_734_fail:
+    goto rx726_fail
+  rxcap_734_done:
+  alt733_end:
+.annotate 'line', 336
   # rx pass
-    rx720_cur."!cursor_pass"(rx720_pos, "param_var")
-    if_null rx720_debug, debug_681
-    rx720_cur."!cursor_debug"("PASS", "param_var", " at pos=", rx720_pos)
-  debug_681:
-    .return (rx720_cur)
-  rx720_restart:
+    rx726_cur."!cursor_pass"(rx726_pos, "param_var")
+    if_null rx726_debug, debug_687
+    rx726_cur."!cursor_debug"("PASS", "param_var", " at pos=", rx726_pos)
+  debug_687:
+    .return (rx726_cur)
+  rx726_restart:
 .annotate 'line', 4
-    if_null rx720_debug, debug_682
-    rx720_cur."!cursor_debug"("NEXT", "param_var")
-  debug_682:
-  rx720_fail:
-    (rx720_rep, rx720_pos, $I10, $P10) = rx720_cur."!mark_fail"(0)
-    lt rx720_pos, -1, rx720_done
-    eq rx720_pos, -1, rx720_fail
-    jump $I10
-  rx720_done:
-    rx720_cur."!cursor_fail"()
-    if_null rx720_debug, debug_683
-    rx720_cur."!cursor_debug"("FAIL", "param_var")
-  debug_683:
-    .return (rx720_cur)
+    if_null rx726_debug, debug_688
+    rx726_cur."!cursor_debug"("NEXT", "param_var")
+  debug_688:
+  rx726_fail:
+    (rx726_rep, rx726_pos, $I10, $P10) = rx726_cur."!mark_fail"(0)
+    lt rx726_pos, -1, rx726_done
+    eq rx726_pos, -1, rx726_fail
+    jump $I10
+  rx726_done:
+    rx726_cur."!cursor_fail"()
+    if_null rx726_debug, debug_689
+    rx726_cur."!cursor_debug"("FAIL", "param_var")
+  debug_689:
+    .return (rx726_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__param_var"  :subid("175_1282324002.40722") :method
+.sub "!PREFIX__param_var"  :subid("175_1284728478.15265") :method
 .annotate 'line', 4
-    $P722 = self."!PREFIX__!subrule"("sigil", "")
-    new $P723, "ResizablePMCArray"
-    push $P723, $P722
-    .return ($P723)
+    $P728 = self."!PREFIX__!subrule"("sigil", "")
+    new $P729, "ResizablePMCArray"
+    push $P729, $P728
+    .return ($P729)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "named_param"  :subid("176_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 4
-    .local string rx730_tgt
-    .local int rx730_pos
-    .local int rx730_off
-    .local int rx730_eos
-    .local int rx730_rep
-    .local pmc rx730_cur
-    .local pmc rx730_debug
-    (rx730_cur, rx730_pos, rx730_tgt, $I10) = self."!cursor_start"()
-    getattribute rx730_debug, rx730_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx730_cur
-    .local pmc match
-    .lex "$/", match
-    length rx730_eos, rx730_tgt
-    gt rx730_pos, rx730_eos, rx730_done
-    set rx730_off, 0
-    lt rx730_pos, 2, rx730_start
-    sub rx730_off, rx730_pos, 1
-    substr rx730_tgt, rx730_tgt, rx730_off
-  rx730_start:
-    eq $I10, 1, rx730_restart
-    if_null rx730_debug, debug_684
-    rx730_cur."!cursor_debug"("START", "named_param")
-  debug_684:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan734_done
-    goto rxscan734_scan
-  rxscan734_loop:
-    ($P10) = rx730_cur."from"()
-    inc $P10
-    set rx730_pos, $P10
-    ge rx730_pos, rx730_eos, rxscan734_done
-  rxscan734_scan:
-    set_addr $I10, rxscan734_loop
-    rx730_cur."!mark_push"(0, rx730_pos, $I10)
-  rxscan734_done:
-.annotate 'line', 340
-  # rx literal  ":"
-    add $I11, rx730_pos, 1
-    gt $I11, rx730_eos, rx730_fail
-    sub $I11, rx730_pos, rx730_off
-    ord $I11, rx730_tgt, $I11
-    ne $I11, 58, rx730_fail
-    add rx730_pos, 1
-  # rx subrule "param_var" subtype=capture negate=
-    rx730_cur."!cursor_pos"(rx730_pos)
-    $P10 = rx730_cur."param_var"()
-    unless $P10, rx730_fail
-    rx730_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("param_var")
-    rx730_pos = $P10."pos"()
-.annotate 'line', 339
-  # rx pass
-    rx730_cur."!cursor_pass"(rx730_pos, "named_param")
-    if_null rx730_debug, debug_685
-    rx730_cur."!cursor_debug"("PASS", "named_param", " at pos=", rx730_pos)
-  debug_685:
-    .return (rx730_cur)
-  rx730_restart:
-.annotate 'line', 4
-    if_null rx730_debug, debug_686
-    rx730_cur."!cursor_debug"("NEXT", "named_param")
-  debug_686:
-  rx730_fail:
-    (rx730_rep, rx730_pos, $I10, $P10) = rx730_cur."!mark_fail"(0)
-    lt rx730_pos, -1, rx730_done
-    eq rx730_pos, -1, rx730_fail
-    jump $I10
-  rx730_done:
-    rx730_cur."!cursor_fail"()
-    if_null rx730_debug, debug_687
-    rx730_cur."!cursor_debug"("FAIL", "named_param")
-  debug_687:
-    .return (rx730_cur)
-    .return ()
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "!PREFIX__named_param"  :subid("177_1282324002.40722") :method
-.annotate 'line', 4
-    $P732 = self."!PREFIX__!subrule"("param_var", ":")
-    new $P733, "ResizablePMCArray"
-    push $P733, $P732
-    .return ($P733)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "default_value"  :subid("178_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "named_param"  :subid("176_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx736_tgt
     .local int rx736_pos
@@ -10104,9 +10069,9 @@
     substr rx736_tgt, rx736_tgt, rx736_off
   rx736_start:
     eq $I10, 1, rx736_restart
-    if_null rx736_debug, debug_688
-    rx736_cur."!cursor_debug"("START", "default_value")
-  debug_688:
+    if_null rx736_debug, debug_690
+    rx736_cur."!cursor_debug"("START", "named_param")
+  debug_690:
     $I10 = self.'from'()
     ne $I10, -1, rxscan740_done
     goto rxscan740_scan
@@ -10119,47 +10084,33 @@
     set_addr $I10, rxscan740_loop
     rx736_cur."!mark_push"(0, rx736_pos, $I10)
   rxscan740_done:
-.annotate 'line', 343
-  # rx subrule "ws" subtype=method negate=
-    rx736_cur."!cursor_pos"(rx736_pos)
-    $P10 = rx736_cur."ws"()
-    unless $P10, rx736_fail
-    rx736_pos = $P10."pos"()
-  # rx literal  "="
+.annotate 'line', 342
+  # rx literal  ":"
     add $I11, rx736_pos, 1
     gt $I11, rx736_eos, rx736_fail
     sub $I11, rx736_pos, rx736_off
     ord $I11, rx736_tgt, $I11
-    ne $I11, 61, rx736_fail
+    ne $I11, 58, rx736_fail
     add rx736_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx736_cur."!cursor_pos"(rx736_pos)
-    $P10 = rx736_cur."ws"()
-    unless $P10, rx736_fail
-    rx736_pos = $P10."pos"()
-  # rx subrule "EXPR" subtype=capture negate=
+  # rx subrule "param_var" subtype=capture negate=
     rx736_cur."!cursor_pos"(rx736_pos)
-    $P10 = rx736_cur."EXPR"("i=")
+    $P10 = rx736_cur."param_var"()
     unless $P10, rx736_fail
     rx736_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("EXPR")
-    rx736_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx736_cur."!cursor_pos"(rx736_pos)
-    $P10 = rx736_cur."ws"()
-    unless $P10, rx736_fail
+    $P10."!cursor_names"("param_var")
     rx736_pos = $P10."pos"()
+.annotate 'line', 341
   # rx pass
-    rx736_cur."!cursor_pass"(rx736_pos, "default_value")
-    if_null rx736_debug, debug_689
-    rx736_cur."!cursor_debug"("PASS", "default_value", " at pos=", rx736_pos)
-  debug_689:
+    rx736_cur."!cursor_pass"(rx736_pos, "named_param")
+    if_null rx736_debug, debug_691
+    rx736_cur."!cursor_debug"("PASS", "named_param", " at pos=", rx736_pos)
+  debug_691:
     .return (rx736_cur)
   rx736_restart:
 .annotate 'line', 4
-    if_null rx736_debug, debug_690
-    rx736_cur."!cursor_debug"("NEXT", "default_value")
-  debug_690:
+    if_null rx736_debug, debug_692
+    rx736_cur."!cursor_debug"("NEXT", "named_param")
+  debug_692:
   rx736_fail:
     (rx736_rep, rx736_pos, $I10, $P10) = rx736_cur."!mark_fail"(0)
     lt rx736_pos, -1, rx736_done
@@ -10167,18 +10118,18 @@
     jump $I10
   rx736_done:
     rx736_cur."!cursor_fail"()
-    if_null rx736_debug, debug_691
-    rx736_cur."!cursor_debug"("FAIL", "default_value")
-  debug_691:
+    if_null rx736_debug, debug_693
+    rx736_cur."!cursor_debug"("FAIL", "named_param")
+  debug_693:
     .return (rx736_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__default_value"  :subid("179_1282324002.40722") :method
+.sub "!PREFIX__named_param"  :subid("177_1284728478.15265") :method
 .annotate 'line', 4
-    $P738 = self."!PREFIX__!subrule"("ws", "")
+    $P738 = self."!PREFIX__!subrule"("param_var", ":")
     new $P739, "ResizablePMCArray"
     push $P739, $P738
     .return ($P739)
@@ -10186,2164 +10137,2000 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "regex_declarator"  :subid("180_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "default_value"  :subid("178_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .local string rx745_tgt
-    .local int rx745_pos
-    .local int rx745_off
-    .local int rx745_eos
-    .local int rx745_rep
-    .local pmc rx745_cur
-    .local pmc rx745_debug
-    (rx745_cur, rx745_pos, rx745_tgt, $I10) = self."!cursor_start"()
-    rx745_cur."!cursor_caparray"("signature")
-    getattribute rx745_debug, rx745_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx745_cur
-    .local pmc match
-    .lex "$/", match
-    length rx745_eos, rx745_tgt
-    gt rx745_pos, rx745_eos, rx745_done
-    set rx745_off, 0
-    lt rx745_pos, 2, rx745_start
-    sub rx745_off, rx745_pos, 1
-    substr rx745_tgt, rx745_tgt, rx745_off
-  rx745_start:
-    eq $I10, 1, rx745_restart
-    if_null rx745_debug, debug_692
-    rx745_cur."!cursor_debug"("START", "regex_declarator")
-  debug_692:
+    .local string rx742_tgt
+    .local int rx742_pos
+    .local int rx742_off
+    .local int rx742_eos
+    .local int rx742_rep
+    .local pmc rx742_cur
+    .local pmc rx742_debug
+    (rx742_cur, rx742_pos, rx742_tgt, $I10) = self."!cursor_start"()
+    getattribute rx742_debug, rx742_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx742_cur
+    .local pmc match
+    .lex "$/", match
+    length rx742_eos, rx742_tgt
+    gt rx742_pos, rx742_eos, rx742_done
+    set rx742_off, 0
+    lt rx742_pos, 2, rx742_start
+    sub rx742_off, rx742_pos, 1
+    substr rx742_tgt, rx742_tgt, rx742_off
+  rx742_start:
+    eq $I10, 1, rx742_restart
+    if_null rx742_debug, debug_694
+    rx742_cur."!cursor_debug"("START", "default_value")
+  debug_694:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan749_done
-    goto rxscan749_scan
-  rxscan749_loop:
-    ($P10) = rx745_cur."from"()
-    inc $P10
-    set rx745_pos, $P10
-    ge rx745_pos, rx745_eos, rxscan749_done
-  rxscan749_scan:
-    set_addr $I10, rxscan749_loop
-    rx745_cur."!mark_push"(0, rx745_pos, $I10)
-  rxscan749_done:
+    ne $I10, -1, rxscan746_done
+    goto rxscan746_scan
+  rxscan746_loop:
+    ($P10) = rx742_cur."from"()
+    inc $P10
+    set rx742_pos, $P10
+    ge rx742_pos, rx742_eos, rxscan746_done
+  rxscan746_scan:
+    set_addr $I10, rxscan746_loop
+    rx742_cur."!mark_push"(0, rx742_pos, $I10)
+  rxscan746_done:
 .annotate 'line', 345
   # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
-  alt751_0:
-.annotate 'line', 346
-    set_addr $I10, alt751_1
-    rx745_cur."!mark_push"(0, rx745_pos, $I10)
+    rx742_cur."!cursor_pos"(rx742_pos)
+    $P10 = rx742_cur."ws"()
+    unless $P10, rx742_fail
+    rx742_pos = $P10."pos"()
+  # rx literal  "="
+    add $I11, rx742_pos, 1
+    gt $I11, rx742_eos, rx742_fail
+    sub $I11, rx742_pos, rx742_off
+    ord $I11, rx742_tgt, $I11
+    ne $I11, 61, rx742_fail
+    add rx742_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx742_cur."!cursor_pos"(rx742_pos)
+    $P10 = rx742_cur."ws"()
+    unless $P10, rx742_fail
+    rx742_pos = $P10."pos"()
+  # rx subrule "EXPR" subtype=capture negate=
+    rx742_cur."!cursor_pos"(rx742_pos)
+    $P10 = rx742_cur."EXPR"("i=")
+    unless $P10, rx742_fail
+    rx742_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("EXPR")
+    rx742_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx742_cur."!cursor_pos"(rx742_pos)
+    $P10 = rx742_cur."ws"()
+    unless $P10, rx742_fail
+    rx742_pos = $P10."pos"()
+  # rx pass
+    rx742_cur."!cursor_pass"(rx742_pos, "default_value")
+    if_null rx742_debug, debug_695
+    rx742_cur."!cursor_debug"("PASS", "default_value", " at pos=", rx742_pos)
+  debug_695:
+    .return (rx742_cur)
+  rx742_restart:
+.annotate 'line', 4
+    if_null rx742_debug, debug_696
+    rx742_cur."!cursor_debug"("NEXT", "default_value")
+  debug_696:
+  rx742_fail:
+    (rx742_rep, rx742_pos, $I10, $P10) = rx742_cur."!mark_fail"(0)
+    lt rx742_pos, -1, rx742_done
+    eq rx742_pos, -1, rx742_fail
+    jump $I10
+  rx742_done:
+    rx742_cur."!cursor_fail"()
+    if_null rx742_debug, debug_697
+    rx742_cur."!cursor_debug"("FAIL", "default_value")
+  debug_697:
+    .return (rx742_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__default_value"  :subid("179_1284728478.15265") :method
+.annotate 'line', 4
+    $P744 = self."!PREFIX__!subrule"("ws", "")
+    new $P745, "ResizablePMCArray"
+    push $P745, $P744
+    .return ($P745)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "trait"  :subid("180_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 4
+    .local string rx751_tgt
+    .local int rx751_pos
+    .local int rx751_off
+    .local int rx751_eos
+    .local int rx751_rep
+    .local pmc rx751_cur
+    .local pmc rx751_debug
+    (rx751_cur, rx751_pos, rx751_tgt, $I10) = self."!cursor_start"()
+    getattribute rx751_debug, rx751_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx751_cur
+    .local pmc match
+    .lex "$/", match
+    length rx751_eos, rx751_tgt
+    gt rx751_pos, rx751_eos, rx751_done
+    set rx751_off, 0
+    lt rx751_pos, 2, rx751_start
+    sub rx751_off, rx751_pos, 1
+    substr rx751_tgt, rx751_tgt, rx751_off
+  rx751_start:
+    eq $I10, 1, rx751_restart
+    if_null rx751_debug, debug_698
+    rx751_cur."!cursor_debug"("START", "trait")
+  debug_698:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan755_done
+    goto rxscan755_scan
+  rxscan755_loop:
+    ($P10) = rx751_cur."from"()
+    inc $P10
+    set rx751_pos, $P10
+    ge rx751_pos, rx751_eos, rxscan755_done
+  rxscan755_scan:
+    set_addr $I10, rxscan755_loop
+    rx751_cur."!mark_push"(0, rx751_pos, $I10)
+  rxscan755_done:
 .annotate 'line', 347
   # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
+    rx751_cur."!cursor_pos"(rx751_pos)
+    $P10 = rx751_cur."ws"()
+    unless $P10, rx751_fail
+    rx751_pos = $P10."pos"()
+  # rx subrule "trait_mod" subtype=capture negate=
+    rx751_cur."!cursor_pos"(rx751_pos)
+    $P10 = rx751_cur."trait_mod"()
+    unless $P10, rx751_fail
+    rx751_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("trait_mod")
+    rx751_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx751_cur."!cursor_pos"(rx751_pos)
+    $P10 = rx751_cur."ws"()
+    unless $P10, rx751_fail
+    rx751_pos = $P10."pos"()
+  # rx pass
+    rx751_cur."!cursor_pass"(rx751_pos, "trait")
+    if_null rx751_debug, debug_699
+    rx751_cur."!cursor_debug"("PASS", "trait", " at pos=", rx751_pos)
+  debug_699:
+    .return (rx751_cur)
+  rx751_restart:
+.annotate 'line', 4
+    if_null rx751_debug, debug_700
+    rx751_cur."!cursor_debug"("NEXT", "trait")
+  debug_700:
+  rx751_fail:
+    (rx751_rep, rx751_pos, $I10, $P10) = rx751_cur."!mark_fail"(0)
+    lt rx751_pos, -1, rx751_done
+    eq rx751_pos, -1, rx751_fail
+    jump $I10
+  rx751_done:
+    rx751_cur."!cursor_fail"()
+    if_null rx751_debug, debug_701
+    rx751_cur."!cursor_debug"("FAIL", "trait")
+  debug_701:
+    .return (rx751_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__trait"  :subid("181_1284728478.15265") :method
+.annotate 'line', 4
+    $P753 = self."!PREFIX__!subrule"("ws", "")
+    new $P754, "ResizablePMCArray"
+    push $P754, $P753
+    .return ($P754)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "trait_mod"  :subid("182_1284728478.15265") :method
+.annotate 'line', 349
+    $P759 = self."!protoregex"("trait_mod")
+    .return ($P759)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__trait_mod"  :subid("183_1284728478.15265") :method
+.annotate 'line', 349
+    $P761 = self."!PREFIX__!protoregex"("trait_mod")
+    .return ($P761)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "trait_mod:sym<is>"  :subid("184_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 4
+    .local string rx763_tgt
+    .local int rx763_pos
+    .local int rx763_off
+    .local int rx763_eos
+    .local int rx763_rep
+    .local pmc rx763_cur
+    .local pmc rx763_debug
+    (rx763_cur, rx763_pos, rx763_tgt, $I10) = self."!cursor_start"()
+    rx763_cur."!cursor_caparray"("circumfix")
+    getattribute rx763_debug, rx763_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx763_cur
+    .local pmc match
+    .lex "$/", match
+    length rx763_eos, rx763_tgt
+    gt rx763_pos, rx763_eos, rx763_done
+    set rx763_off, 0
+    lt rx763_pos, 2, rx763_start
+    sub rx763_off, rx763_pos, 1
+    substr rx763_tgt, rx763_tgt, rx763_off
+  rx763_start:
+    eq $I10, 1, rx763_restart
+    if_null rx763_debug, debug_702
+    rx763_cur."!cursor_debug"("START", "trait_mod:sym<is>")
+  debug_702:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan767_done
+    goto rxscan767_scan
+  rxscan767_loop:
+    ($P10) = rx763_cur."from"()
+    inc $P10
+    set rx763_pos, $P10
+    ge rx763_pos, rx763_eos, rxscan767_done
+  rxscan767_scan:
+    set_addr $I10, rxscan767_loop
+    rx763_cur."!mark_push"(0, rx763_pos, $I10)
+  rxscan767_done:
+.annotate 'line', 350
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_768_fail
+    rx763_cur."!mark_push"(0, rx763_pos, $I10)
+  # rx literal  "is"
+    add $I11, rx763_pos, 2
+    gt $I11, rx763_eos, rx763_fail
+    sub $I11, rx763_pos, rx763_off
+    substr $S10, rx763_tgt, $I11, 2
+    ne $S10, "is", rx763_fail
+    add rx763_pos, 2
+    set_addr $I10, rxcap_768_fail
+    ($I12, $I11) = rx763_cur."!mark_peek"($I10)
+    rx763_cur."!cursor_pos"($I11)
+    ($P10) = rx763_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx763_pos, "")
+    rx763_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_768_done
+  rxcap_768_fail:
+    goto rx763_fail
+  rxcap_768_done:
+  # rx subrule "ws" subtype=method negate=
+    rx763_cur."!cursor_pos"(rx763_pos)
+    $P10 = rx763_cur."ws"()
+    unless $P10, rx763_fail
+    rx763_pos = $P10."pos"()
+  # rx subrule "deflongname" subtype=capture negate=
+    rx763_cur."!cursor_pos"(rx763_pos)
+    $P10 = rx763_cur."deflongname"()
+    unless $P10, rx763_fail
+    rx763_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("longname")
+    rx763_pos = $P10."pos"()
+  # rx rxquantr770 ** 0..1
+    set_addr $I10, rxquantr770_done
+    rx763_cur."!mark_push"(0, rx763_pos, $I10)
+  rxquantr770_loop:
+  # rx subrule "circumfix" subtype=capture negate=
+    rx763_cur."!cursor_pos"(rx763_pos)
+    $P10 = rx763_cur."circumfix"()
+    unless $P10, rx763_fail
+    goto rxsubrule771_pass
+  rxsubrule771_back:
+    $P10 = $P10."!cursor_next"()
+    unless $P10, rx763_fail
+  rxsubrule771_pass:
+    set_addr $I10, rxsubrule771_back
+    rx763_cur."!mark_push"(0, rx763_pos, $I10, $P10)
+    $P10."!cursor_names"("circumfix")
+    rx763_pos = $P10."pos"()
+    set_addr $I10, rxquantr770_done
+    (rx763_rep) = rx763_cur."!mark_commit"($I10)
+  rxquantr770_done:
+  # rx subrule "ws" subtype=method negate=
+    rx763_cur."!cursor_pos"(rx763_pos)
+    $P10 = rx763_cur."ws"()
+    unless $P10, rx763_fail
+    rx763_pos = $P10."pos"()
+  # rx pass
+    rx763_cur."!cursor_pass"(rx763_pos, "trait_mod:sym<is>")
+    if_null rx763_debug, debug_703
+    rx763_cur."!cursor_debug"("PASS", "trait_mod:sym<is>", " at pos=", rx763_pos)
+  debug_703:
+    .return (rx763_cur)
+  rx763_restart:
+.annotate 'line', 4
+    if_null rx763_debug, debug_704
+    rx763_cur."!cursor_debug"("NEXT", "trait_mod:sym<is>")
+  debug_704:
+  rx763_fail:
+    (rx763_rep, rx763_pos, $I10, $P10) = rx763_cur."!mark_fail"(0)
+    lt rx763_pos, -1, rx763_done
+    eq rx763_pos, -1, rx763_fail
+    jump $I10
+  rx763_done:
+    rx763_cur."!cursor_fail"()
+    if_null rx763_debug, debug_705
+    rx763_cur."!cursor_debug"("FAIL", "trait_mod:sym<is>")
+  debug_705:
+    .return (rx763_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__trait_mod:sym<is>"  :subid("185_1284728478.15265") :method
+.annotate 'line', 4
+    $P765 = self."!PREFIX__!subrule"("ws", "is")
+    new $P766, "ResizablePMCArray"
+    push $P766, $P765
+    .return ($P766)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "regex_declarator"  :subid("186_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 4
+    .local string rx774_tgt
+    .local int rx774_pos
+    .local int rx774_off
+    .local int rx774_eos
+    .local int rx774_rep
+    .local pmc rx774_cur
+    .local pmc rx774_debug
+    (rx774_cur, rx774_pos, rx774_tgt, $I10) = self."!cursor_start"()
+    rx774_cur."!cursor_caparray"("signature")
+    getattribute rx774_debug, rx774_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx774_cur
+    .local pmc match
+    .lex "$/", match
+    length rx774_eos, rx774_tgt
+    gt rx774_pos, rx774_eos, rx774_done
+    set rx774_off, 0
+    lt rx774_pos, 2, rx774_start
+    sub rx774_off, rx774_pos, 1
+    substr rx774_tgt, rx774_tgt, rx774_off
+  rx774_start:
+    eq $I10, 1, rx774_restart
+    if_null rx774_debug, debug_706
+    rx774_cur."!cursor_debug"("START", "regex_declarator")
+  debug_706:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan778_done
+    goto rxscan778_scan
+  rxscan778_loop:
+    ($P10) = rx774_cur."from"()
+    inc $P10
+    set rx774_pos, $P10
+    ge rx774_pos, rx774_eos, rxscan778_done
+  rxscan778_scan:
+    set_addr $I10, rxscan778_loop
+    rx774_cur."!mark_push"(0, rx774_pos, $I10)
+  rxscan778_done:
+.annotate 'line', 352
+  # rx subrule "ws" subtype=method negate=
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
+  alt780_0:
+.annotate 'line', 353
+    set_addr $I10, alt780_1
+    rx774_cur."!mark_push"(0, rx774_pos, $I10)
+.annotate 'line', 354
+  # rx subrule "ws" subtype=method negate=
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
   # rx subcapture "proto"
-    set_addr $I10, rxcap_753_fail
-    rx745_cur."!mark_push"(0, rx745_pos, $I10)
+    set_addr $I10, rxcap_782_fail
+    rx774_cur."!mark_push"(0, rx774_pos, $I10)
   # rx literal  "proto"
-    add $I11, rx745_pos, 5
-    gt $I11, rx745_eos, rx745_fail
-    sub $I11, rx745_pos, rx745_off
-    substr $S10, rx745_tgt, $I11, 5
-    ne $S10, "proto", rx745_fail
-    add rx745_pos, 5
-    set_addr $I10, rxcap_753_fail
-    ($I12, $I11) = rx745_cur."!mark_peek"($I10)
-    rx745_cur."!cursor_pos"($I11)
-    ($P10) = rx745_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx745_pos, "")
-    rx745_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx774_pos, 5
+    gt $I11, rx774_eos, rx774_fail
+    sub $I11, rx774_pos, rx774_off
+    substr $S10, rx774_tgt, $I11, 5
+    ne $S10, "proto", rx774_fail
+    add rx774_pos, 5
+    set_addr $I10, rxcap_782_fail
+    ($I12, $I11) = rx774_cur."!mark_peek"($I10)
+    rx774_cur."!cursor_pos"($I11)
+    ($P10) = rx774_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx774_pos, "")
+    rx774_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("proto")
-    goto rxcap_753_done
-  rxcap_753_fail:
-    goto rx745_fail
-  rxcap_753_done:
-  # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
-  alt755_0:
-    set_addr $I10, alt755_1
-    rx745_cur."!mark_push"(0, rx745_pos, $I10)
+    goto rxcap_782_done
+  rxcap_782_fail:
+    goto rx774_fail
+  rxcap_782_done:
+  # rx subrule "ws" subtype=method negate=
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
+  alt784_0:
+    set_addr $I10, alt784_1
+    rx774_cur."!mark_push"(0, rx774_pos, $I10)
   # rx literal  "regex"
-    add $I11, rx745_pos, 5
-    gt $I11, rx745_eos, rx745_fail
-    sub $I11, rx745_pos, rx745_off
-    substr $S10, rx745_tgt, $I11, 5
-    ne $S10, "regex", rx745_fail
-    add rx745_pos, 5
-    goto alt755_end
-  alt755_1:
-    set_addr $I10, alt755_2
-    rx745_cur."!mark_push"(0, rx745_pos, $I10)
+    add $I11, rx774_pos, 5
+    gt $I11, rx774_eos, rx774_fail
+    sub $I11, rx774_pos, rx774_off
+    substr $S10, rx774_tgt, $I11, 5
+    ne $S10, "regex", rx774_fail
+    add rx774_pos, 5
+    goto alt784_end
+  alt784_1:
+    set_addr $I10, alt784_2
+    rx774_cur."!mark_push"(0, rx774_pos, $I10)
   # rx literal  "token"
-    add $I11, rx745_pos, 5
-    gt $I11, rx745_eos, rx745_fail
-    sub $I11, rx745_pos, rx745_off
-    substr $S10, rx745_tgt, $I11, 5
-    ne $S10, "token", rx745_fail
-    add rx745_pos, 5
-    goto alt755_end
-  alt755_2:
+    add $I11, rx774_pos, 5
+    gt $I11, rx774_eos, rx774_fail
+    sub $I11, rx774_pos, rx774_off
+    substr $S10, rx774_tgt, $I11, 5
+    ne $S10, "token", rx774_fail
+    add rx774_pos, 5
+    goto alt784_end
+  alt784_2:
   # rx literal  "rule"
-    add $I11, rx745_pos, 4
-    gt $I11, rx745_eos, rx745_fail
-    sub $I11, rx745_pos, rx745_off
-    substr $S10, rx745_tgt, $I11, 4
-    ne $S10, "rule", rx745_fail
-    add rx745_pos, 4
-  alt755_end:
-  # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
-.annotate 'line', 348
+    add $I11, rx774_pos, 4
+    gt $I11, rx774_eos, rx774_fail
+    sub $I11, rx774_pos, rx774_off
+    substr $S10, rx774_tgt, $I11, 4
+    ne $S10, "rule", rx774_fail
+    add rx774_pos, 4
+  alt784_end:
+  # rx subrule "ws" subtype=method negate=
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
+.annotate 'line', 355
   # rx subrule "deflongname" subtype=capture negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."deflongname"()
-    unless $P10, rx745_fail
-    rx745_cur."!mark_push"(0, -1, 0, $P10)
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."deflongname"()
+    unless $P10, rx774_fail
+    rx774_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("deflongname")
-    rx745_pos = $P10."pos"()
+    rx774_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
-  alt758_0:
-.annotate 'line', 349
-    set_addr $I10, alt758_1
-    rx745_cur."!mark_push"(0, rx745_pos, $I10)
-.annotate 'line', 350
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
+  alt787_0:
+.annotate 'line', 356
+    set_addr $I10, alt787_1
+    rx774_cur."!mark_push"(0, rx774_pos, $I10)
+.annotate 'line', 357
   # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
   # rx literal  "{"
-    add $I11, rx745_pos, 1
-    gt $I11, rx745_eos, rx745_fail
-    sub $I11, rx745_pos, rx745_off
-    ord $I11, rx745_tgt, $I11
-    ne $I11, 123, rx745_fail
-    add rx745_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
+    add $I11, rx774_pos, 1
+    gt $I11, rx774_eos, rx774_fail
+    sub $I11, rx774_pos, rx774_off
+    ord $I11, rx774_tgt, $I11
+    ne $I11, 123, rx774_fail
+    add rx774_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
   # rx literal  "<...>"
-    add $I11, rx745_pos, 5
-    gt $I11, rx745_eos, rx745_fail
-    sub $I11, rx745_pos, rx745_off
-    substr $S10, rx745_tgt, $I11, 5
-    ne $S10, "<...>", rx745_fail
-    add rx745_pos, 5
-  # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
+    add $I11, rx774_pos, 5
+    gt $I11, rx774_eos, rx774_fail
+    sub $I11, rx774_pos, rx774_off
+    substr $S10, rx774_tgt, $I11, 5
+    ne $S10, "<...>", rx774_fail
+    add rx774_pos, 5
+  # rx subrule "ws" subtype=method negate=
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
   # rx literal  "}"
-    add $I11, rx745_pos, 1
-    gt $I11, rx745_eos, rx745_fail
-    sub $I11, rx745_pos, rx745_off
-    ord $I11, rx745_tgt, $I11
-    ne $I11, 125, rx745_fail
-    add rx745_pos, 1
+    add $I11, rx774_pos, 1
+    gt $I11, rx774_eos, rx774_fail
+    sub $I11, rx774_pos, rx774_off
+    ord $I11, rx774_tgt, $I11
+    ne $I11, 125, rx774_fail
+    add rx774_pos, 1
   # rx subrule "ENDSTMT" subtype=zerowidth negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ENDSTMT"()
-    unless $P10, rx745_fail
-  # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
-    goto alt758_end
-  alt758_1:
-.annotate 'line', 351
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ENDSTMT"()
+    unless $P10, rx774_fail
+  # rx subrule "ws" subtype=method negate=
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
+    goto alt787_end
+  alt787_1:
+.annotate 'line', 358
   # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."panic"("Proto regex body must be <...>")
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
-  alt758_end:
-.annotate 'line', 352
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."panic"("Proto regex body must be <...>")
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
+  alt787_end:
+.annotate 'line', 359
   # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
-.annotate 'line', 347
-    goto alt751_end
-  alt751_1:
-.annotate 'line', 353
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
+.annotate 'line', 354
+    goto alt780_end
+  alt780_1:
+.annotate 'line', 360
   # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
   # rx subcapture "sym"
-    set_addr $I10, rxcap_768_fail
-    rx745_cur."!mark_push"(0, rx745_pos, $I10)
-  alt767_0:
-    set_addr $I10, alt767_1
-    rx745_cur."!mark_push"(0, rx745_pos, $I10)
+    set_addr $I10, rxcap_797_fail
+    rx774_cur."!mark_push"(0, rx774_pos, $I10)
+  alt796_0:
+    set_addr $I10, alt796_1
+    rx774_cur."!mark_push"(0, rx774_pos, $I10)
   # rx literal  "regex"
-    add $I11, rx745_pos, 5
-    gt $I11, rx745_eos, rx745_fail
-    sub $I11, rx745_pos, rx745_off
-    substr $S10, rx745_tgt, $I11, 5
-    ne $S10, "regex", rx745_fail
-    add rx745_pos, 5
-    goto alt767_end
-  alt767_1:
-    set_addr $I10, alt767_2
-    rx745_cur."!mark_push"(0, rx745_pos, $I10)
+    add $I11, rx774_pos, 5
+    gt $I11, rx774_eos, rx774_fail
+    sub $I11, rx774_pos, rx774_off
+    substr $S10, rx774_tgt, $I11, 5
+    ne $S10, "regex", rx774_fail
+    add rx774_pos, 5
+    goto alt796_end
+  alt796_1:
+    set_addr $I10, alt796_2
+    rx774_cur."!mark_push"(0, rx774_pos, $I10)
   # rx literal  "token"
-    add $I11, rx745_pos, 5
-    gt $I11, rx745_eos, rx745_fail
-    sub $I11, rx745_pos, rx745_off
-    substr $S10, rx745_tgt, $I11, 5
-    ne $S10, "token", rx745_fail
-    add rx745_pos, 5
-    goto alt767_end
-  alt767_2:
+    add $I11, rx774_pos, 5
+    gt $I11, rx774_eos, rx774_fail
+    sub $I11, rx774_pos, rx774_off
+    substr $S10, rx774_tgt, $I11, 5
+    ne $S10, "token", rx774_fail
+    add rx774_pos, 5
+    goto alt796_end
+  alt796_2:
   # rx literal  "rule"
-    add $I11, rx745_pos, 4
-    gt $I11, rx745_eos, rx745_fail
-    sub $I11, rx745_pos, rx745_off
-    substr $S10, rx745_tgt, $I11, 4
-    ne $S10, "rule", rx745_fail
-    add rx745_pos, 4
-  alt767_end:
-    set_addr $I10, rxcap_768_fail
-    ($I12, $I11) = rx745_cur."!mark_peek"($I10)
-    rx745_cur."!cursor_pos"($I11)
-    ($P10) = rx745_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx745_pos, "")
-    rx745_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx774_pos, 4
+    gt $I11, rx774_eos, rx774_fail
+    sub $I11, rx774_pos, rx774_off
+    substr $S10, rx774_tgt, $I11, 4
+    ne $S10, "rule", rx774_fail
+    add rx774_pos, 4
+  alt796_end:
+    set_addr $I10, rxcap_797_fail
+    ($I12, $I11) = rx774_cur."!mark_peek"($I10)
+    rx774_cur."!cursor_pos"($I11)
+    ($P10) = rx774_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx774_pos, "")
+    rx774_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_768_done
-  rxcap_768_fail:
-    goto rx745_fail
-  rxcap_768_done:
-  # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
-.annotate 'line', 354
+    goto rxcap_797_done
+  rxcap_797_fail:
+    goto rx774_fail
+  rxcap_797_done:
+  # rx subrule "ws" subtype=method negate=
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
+.annotate 'line', 361
   # rx subrule "deflongname" subtype=capture negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."deflongname"()
-    unless $P10, rx745_fail
-    rx745_cur."!mark_push"(0, -1, 0, $P10)
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."deflongname"()
+    unless $P10, rx774_fail
+    rx774_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("deflongname")
-    rx745_pos = $P10."pos"()
+    rx774_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
-.annotate 'line', 355
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
+.annotate 'line', 362
   # rx subrule "newpad" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."newpad"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
-.annotate 'line', 356
-  # rx rxquantr772 ** 0..1
-    set_addr $I10, rxquantr772_done
-    rx745_cur."!mark_push"(0, rx745_pos, $I10)
-  rxquantr772_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."newpad"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
+.annotate 'line', 363
+  # rx rxquantr801 ** 0..1
+    set_addr $I10, rxquantr801_done
+    rx774_cur."!mark_push"(0, rx774_pos, $I10)
+  rxquantr801_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
   # rx literal  "("
-    add $I11, rx745_pos, 1
-    gt $I11, rx745_eos, rx745_fail
-    sub $I11, rx745_pos, rx745_off
-    ord $I11, rx745_tgt, $I11
-    ne $I11, 40, rx745_fail
-    add rx745_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
+    add $I11, rx774_pos, 1
+    gt $I11, rx774_eos, rx774_fail
+    sub $I11, rx774_pos, rx774_off
+    ord $I11, rx774_tgt, $I11
+    ne $I11, 40, rx774_fail
+    add rx774_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
   # rx subrule "signature" subtype=capture negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."signature"()
-    unless $P10, rx745_fail
-    rx745_cur."!mark_push"(0, -1, 0, $P10)
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."signature"()
+    unless $P10, rx774_fail
+    rx774_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("signature")
-    rx745_pos = $P10."pos"()
+    rx774_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx745_pos, 1
-    gt $I11, rx745_eos, rx745_fail
-    sub $I11, rx745_pos, rx745_off
-    ord $I11, rx745_tgt, $I11
-    ne $I11, 41, rx745_fail
-    add rx745_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
-    set_addr $I10, rxquantr772_done
-    (rx745_rep) = rx745_cur."!mark_commit"($I10)
-  rxquantr772_done:
-  # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
-.annotate 'line', 357
+    add $I11, rx774_pos, 1
+    gt $I11, rx774_eos, rx774_fail
+    sub $I11, rx774_pos, rx774_off
+    ord $I11, rx774_tgt, $I11
+    ne $I11, 41, rx774_fail
+    add rx774_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
+    set_addr $I10, rxquantr801_done
+    (rx774_rep) = rx774_cur."!mark_commit"($I10)
+  rxquantr801_done:
+  # rx subrule "ws" subtype=method negate=
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
+.annotate 'line', 364
   # rx reduce name="regex_declarator" key="open"
-    rx745_cur."!cursor_pos"(rx745_pos)
-    rx745_cur."!reduce"("regex_declarator", "open")
+    rx774_cur."!cursor_pos"(rx774_pos)
+    rx774_cur."!reduce"("regex_declarator", "open")
   # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
-.annotate 'line', 358
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
+.annotate 'line', 365
   # rx literal  "{"
-    add $I11, rx745_pos, 1
-    gt $I11, rx745_eos, rx745_fail
-    sub $I11, rx745_pos, rx745_off
-    ord $I11, rx745_tgt, $I11
-    ne $I11, 123, rx745_fail
-    add rx745_pos, 1
+    add $I11, rx774_pos, 1
+    gt $I11, rx774_eos, rx774_fail
+    sub $I11, rx774_pos, rx774_off
+    ord $I11, rx774_tgt, $I11
+    ne $I11, 123, rx774_fail
+    add rx774_pos, 1
   # rx subrule "LANG" subtype=capture negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."LANG"("Regex", "nibbler")
-    unless $P10, rx745_fail
-    rx745_cur."!mark_push"(0, -1, 0, $P10)
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."LANG"("Regex", "nibbler")
+    unless $P10, rx774_fail
+    rx774_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("p6regex")
-    rx745_pos = $P10."pos"()
+    rx774_pos = $P10."pos"()
   # rx literal  "}"
-    add $I11, rx745_pos, 1
-    gt $I11, rx745_eos, rx745_fail
-    sub $I11, rx745_pos, rx745_off
-    ord $I11, rx745_tgt, $I11
-    ne $I11, 125, rx745_fail
-    add rx745_pos, 1
+    add $I11, rx774_pos, 1
+    gt $I11, rx774_eos, rx774_fail
+    sub $I11, rx774_pos, rx774_off
+    ord $I11, rx774_tgt, $I11
+    ne $I11, 125, rx774_fail
+    add rx774_pos, 1
   # rx subrule "ENDSTMT" subtype=zerowidth negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ENDSTMT"()
-    unless $P10, rx745_fail
-  # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
-  alt751_end:
-.annotate 'line', 359
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ENDSTMT"()
+    unless $P10, rx774_fail
+  # rx subrule "ws" subtype=method negate=
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
+  alt780_end:
+.annotate 'line', 366
   # rx subrule "ws" subtype=method negate=
-    rx745_cur."!cursor_pos"(rx745_pos)
-    $P10 = rx745_cur."ws"()
-    unless $P10, rx745_fail
-    rx745_pos = $P10."pos"()
-.annotate 'line', 345
+    rx774_cur."!cursor_pos"(rx774_pos)
+    $P10 = rx774_cur."ws"()
+    unless $P10, rx774_fail
+    rx774_pos = $P10."pos"()
+.annotate 'line', 352
   # rx pass
-    rx745_cur."!cursor_pass"(rx745_pos, "regex_declarator")
-    if_null rx745_debug, debug_693
-    rx745_cur."!cursor_debug"("PASS", "regex_declarator", " at pos=", rx745_pos)
-  debug_693:
-    .return (rx745_cur)
-  rx745_restart:
+    rx774_cur."!cursor_pass"(rx774_pos, "regex_declarator")
+    if_null rx774_debug, debug_707
+    rx774_cur."!cursor_debug"("PASS", "regex_declarator", " at pos=", rx774_pos)
+  debug_707:
+    .return (rx774_cur)
+  rx774_restart:
 .annotate 'line', 4
-    if_null rx745_debug, debug_694
-    rx745_cur."!cursor_debug"("NEXT", "regex_declarator")
-  debug_694:
-  rx745_fail:
-    (rx745_rep, rx745_pos, $I10, $P10) = rx745_cur."!mark_fail"(0)
-    lt rx745_pos, -1, rx745_done
-    eq rx745_pos, -1, rx745_fail
-    jump $I10
-  rx745_done:
-    rx745_cur."!cursor_fail"()
-    if_null rx745_debug, debug_695
-    rx745_cur."!cursor_debug"("FAIL", "regex_declarator")
-  debug_695:
-    .return (rx745_cur)
+    if_null rx774_debug, debug_708
+    rx774_cur."!cursor_debug"("NEXT", "regex_declarator")
+  debug_708:
+  rx774_fail:
+    (rx774_rep, rx774_pos, $I10, $P10) = rx774_cur."!mark_fail"(0)
+    lt rx774_pos, -1, rx774_done
+    eq rx774_pos, -1, rx774_fail
+    jump $I10
+  rx774_done:
+    rx774_cur."!cursor_fail"()
+    if_null rx774_debug, debug_709
+    rx774_cur."!cursor_debug"("FAIL", "regex_declarator")
+  debug_709:
+    .return (rx774_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__regex_declarator"  :subid("181_1282324002.40722") :method
+.sub "!PREFIX__regex_declarator"  :subid("187_1284728478.15265") :method
 .annotate 'line', 4
-    $P747 = self."!PREFIX__!subrule"("ws", "")
-    new $P748, "ResizablePMCArray"
-    push $P748, $P747
-    .return ($P748)
+    $P776 = self."!PREFIX__!subrule"("ws", "")
+    new $P777, "ResizablePMCArray"
+    push $P777, $P776
+    .return ($P777)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "dotty"  :subid("182_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "dotty"  :subid("188_1284728478.15265") :method :outer("11_1284728478.15265")
 .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
-    .local pmc rx782_debug
-    (rx782_cur, rx782_pos, rx782_tgt, $I10) = self."!cursor_start"()
-    rx782_cur."!cursor_caparray"("args")
-    getattribute rx782_debug, rx782_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx782_cur
-    .local pmc match
-    .lex "$/", match
-    length rx782_eos, rx782_tgt
-    gt rx782_pos, rx782_eos, rx782_done
-    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:
-    eq $I10, 1, rx782_restart
-    if_null rx782_debug, debug_696
-    rx782_cur."!cursor_debug"("START", "dotty")
-  debug_696:
+    .local string rx811_tgt
+    .local int rx811_pos
+    .local int rx811_off
+    .local int rx811_eos
+    .local int rx811_rep
+    .local pmc rx811_cur
+    .local pmc rx811_debug
+    (rx811_cur, rx811_pos, rx811_tgt, $I10) = self."!cursor_start"()
+    rx811_cur."!cursor_caparray"("args")
+    getattribute rx811_debug, rx811_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx811_cur
+    .local pmc match
+    .lex "$/", match
+    length rx811_eos, rx811_tgt
+    gt rx811_pos, rx811_eos, rx811_done
+    set rx811_off, 0
+    lt rx811_pos, 2, rx811_start
+    sub rx811_off, rx811_pos, 1
+    substr rx811_tgt, rx811_tgt, rx811_off
+  rx811_start:
+    eq $I10, 1, rx811_restart
+    if_null rx811_debug, debug_710
+    rx811_cur."!cursor_debug"("START", "dotty")
+  debug_710:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan786_done
-    goto rxscan786_scan
-  rxscan786_loop:
-    ($P10) = rx782_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', 363
+    ne $I10, -1, rxscan815_done
+    goto rxscan815_scan
+  rxscan815_loop:
+    ($P10) = rx811_cur."from"()
+    inc $P10
+    set rx811_pos, $P10
+    ge rx811_pos, rx811_eos, rxscan815_done
+  rxscan815_scan:
+    set_addr $I10, rxscan815_loop
+    rx811_cur."!mark_push"(0, rx811_pos, $I10)
+  rxscan815_done:
+.annotate 'line', 370
   # rx literal  "."
-    add $I11, rx782_pos, 1
-    gt $I11, rx782_eos, rx782_fail
-    sub $I11, rx782_pos, rx782_off
-    ord $I11, rx782_tgt, $I11
-    ne $I11, 46, rx782_fail
-    add rx782_pos, 1
-  alt787_0:
-.annotate 'line', 364
-    set_addr $I10, alt787_1
-    rx782_cur."!mark_push"(0, rx782_pos, $I10)
+    add $I11, rx811_pos, 1
+    gt $I11, rx811_eos, rx811_fail
+    sub $I11, rx811_pos, rx811_off
+    ord $I11, rx811_tgt, $I11
+    ne $I11, 46, rx811_fail
+    add rx811_pos, 1
+  alt816_0:
+.annotate 'line', 371
+    set_addr $I10, alt816_1
+    rx811_cur."!mark_push"(0, rx811_pos, $I10)
   # rx subrule "deflongname" subtype=capture negate=
-    rx782_cur."!cursor_pos"(rx782_pos)
-    $P10 = rx782_cur."deflongname"()
-    unless $P10, rx782_fail
-    rx782_cur."!mark_push"(0, -1, 0, $P10)
+    rx811_cur."!cursor_pos"(rx811_pos)
+    $P10 = rx811_cur."deflongname"()
+    unless $P10, rx811_fail
+    rx811_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("longname=deflongname")
-    rx782_pos = $P10."pos"()
-    goto alt787_end
-  alt787_1:
-.annotate 'line', 365
+    rx811_pos = $P10."pos"()
+    goto alt816_end
+  alt816_1:
+.annotate 'line', 372
   # rx enumcharlist negate=0 zerowidth
-    ge rx782_pos, rx782_eos, rx782_fail
-    sub $I10, rx782_pos, rx782_off
-    substr $S10, rx782_tgt, $I10, 1
+    sub $I10, rx811_pos, rx811_off
+    substr $S10, rx811_tgt, $I10, 1
     index $I11, "'\"", $S10
-    lt $I11, 0, rx782_fail
+    lt $I11, 0, rx811_fail
   # rx subrule "quote" subtype=capture negate=
-    rx782_cur."!cursor_pos"(rx782_pos)
-    $P10 = rx782_cur."quote"()
-    unless $P10, rx782_fail
-    rx782_cur."!mark_push"(0, -1, 0, $P10)
+    rx811_cur."!cursor_pos"(rx811_pos)
+    $P10 = rx811_cur."quote"()
+    unless $P10, rx811_fail
+    rx811_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote")
-    rx782_pos = $P10."pos"()
-  alt788_0:
-.annotate 'line', 366
-    set_addr $I10, alt788_1
-    rx782_cur."!mark_push"(0, rx782_pos, $I10)
+    rx811_pos = $P10."pos"()
+  alt817_0:
+.annotate 'line', 373
+    set_addr $I10, alt817_1
+    rx811_cur."!mark_push"(0, rx811_pos, $I10)
   # rx enumcharlist negate=0 zerowidth
-    ge rx782_pos, rx782_eos, rx782_fail
-    sub $I10, rx782_pos, rx782_off
-    substr $S10, rx782_tgt, $I10, 1
+    sub $I10, rx811_pos, rx811_off
+    substr $S10, rx811_tgt, $I10, 1
     index $I11, "(", $S10
-    lt $I11, 0, rx782_fail
-    goto alt788_end
-  alt788_1:
+    lt $I11, 0, rx811_fail
+    goto alt817_end
+  alt817_1:
   # rx subrule "panic" subtype=method negate=
-    rx782_cur."!cursor_pos"(rx782_pos)
-    $P10 = rx782_cur."panic"("Quoted method name requires parenthesized arguments")
-    unless $P10, rx782_fail
-    rx782_pos = $P10."pos"()
-  alt788_end:
-  alt787_end:
-.annotate 'line', 372
-  # rx rxquantr789 ** 0..1
-    set_addr $I10, rxquantr789_done
-    rx782_cur."!mark_push"(0, rx782_pos, $I10)
-  rxquantr789_loop:
-  alt790_0:
-.annotate 'line', 369
-    set_addr $I10, alt790_1
-    rx782_cur."!mark_push"(0, rx782_pos, $I10)
-.annotate 'line', 370
+    rx811_cur."!cursor_pos"(rx811_pos)
+    $P10 = rx811_cur."panic"("Quoted method name requires parenthesized arguments")
+    unless $P10, rx811_fail
+    rx811_pos = $P10."pos"()
+  alt817_end:
+  alt816_end:
+.annotate 'line', 379
+  # rx rxquantr818 ** 0..1
+    set_addr $I10, rxquantr818_done
+    rx811_cur."!mark_push"(0, rx811_pos, $I10)
+  rxquantr818_loop:
+  alt819_0:
+.annotate 'line', 376
+    set_addr $I10, alt819_1
+    rx811_cur."!mark_push"(0, rx811_pos, $I10)
+.annotate 'line', 377
   # rx enumcharlist negate=0 zerowidth
-    ge rx782_pos, rx782_eos, rx782_fail
-    sub $I10, rx782_pos, rx782_off
-    substr $S10, rx782_tgt, $I10, 1
+    sub $I10, rx811_pos, rx811_off
+    substr $S10, rx811_tgt, $I10, 1
     index $I11, "(", $S10
-    lt $I11, 0, rx782_fail
+    lt $I11, 0, rx811_fail
   # rx subrule "args" subtype=capture negate=
-    rx782_cur."!cursor_pos"(rx782_pos)
-    $P10 = rx782_cur."args"()
-    unless $P10, rx782_fail
-    rx782_cur."!mark_push"(0, -1, 0, $P10)
+    rx811_cur."!cursor_pos"(rx811_pos)
+    $P10 = rx811_cur."args"()
+    unless $P10, rx811_fail
+    rx811_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx782_pos = $P10."pos"()
-    goto alt790_end
-  alt790_1:
-.annotate 'line', 371
+    rx811_pos = $P10."pos"()
+    goto alt819_end
+  alt819_1:
+.annotate 'line', 378
   # rx literal  ":"
-    add $I11, rx782_pos, 1
-    gt $I11, rx782_eos, rx782_fail
-    sub $I11, rx782_pos, rx782_off
-    ord $I11, rx782_tgt, $I11
-    ne $I11, 58, rx782_fail
-    add rx782_pos, 1
+    add $I11, rx811_pos, 1
+    gt $I11, rx811_eos, rx811_fail
+    sub $I11, rx811_pos, rx811_off
+    ord $I11, rx811_tgt, $I11
+    ne $I11, 58, rx811_fail
+    add rx811_pos, 1
   # rx charclass s
-    ge rx782_pos, rx782_eos, rx782_fail
-    sub $I10, rx782_pos, rx782_off
-    is_cclass $I11, 32, rx782_tgt, $I10
-    unless $I11, rx782_fail
-    inc rx782_pos
+    ge rx811_pos, rx811_eos, rx811_fail
+    sub $I10, rx811_pos, rx811_off
+    is_cclass $I11, 32, rx811_tgt, $I10
+    unless $I11, rx811_fail
+    inc rx811_pos
   # rx subrule "arglist" subtype=capture negate=
-    rx782_cur."!cursor_pos"(rx782_pos)
-    $P10 = rx782_cur."arglist"()
-    unless $P10, rx782_fail
-    rx782_cur."!mark_push"(0, -1, 0, $P10)
+    rx811_cur."!cursor_pos"(rx811_pos)
+    $P10 = rx811_cur."arglist"()
+    unless $P10, rx811_fail
+    rx811_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx782_pos = $P10."pos"()
-  alt790_end:
-.annotate 'line', 372
-    set_addr $I10, rxquantr789_done
-    (rx782_rep) = rx782_cur."!mark_commit"($I10)
-  rxquantr789_done:
-.annotate 'line', 362
+    rx811_pos = $P10."pos"()
+  alt819_end:
+.annotate 'line', 379
+    set_addr $I10, rxquantr818_done
+    (rx811_rep) = rx811_cur."!mark_commit"($I10)
+  rxquantr818_done:
+.annotate 'line', 369
   # rx pass
-    rx782_cur."!cursor_pass"(rx782_pos, "dotty")
-    if_null rx782_debug, debug_697
-    rx782_cur."!cursor_debug"("PASS", "dotty", " at pos=", rx782_pos)
-  debug_697:
-    .return (rx782_cur)
-  rx782_restart:
+    rx811_cur."!cursor_pass"(rx811_pos, "dotty")
+    if_null rx811_debug, debug_711
+    rx811_cur."!cursor_debug"("PASS", "dotty", " at pos=", rx811_pos)
+  debug_711:
+    .return (rx811_cur)
+  rx811_restart:
 .annotate 'line', 4
-    if_null rx782_debug, debug_698
-    rx782_cur."!cursor_debug"("NEXT", "dotty")
-  debug_698:
-  rx782_fail:
-    (rx782_rep, rx782_pos, $I10, $P10) = rx782_cur."!mark_fail"(0)
-    lt rx782_pos, -1, rx782_done
-    eq rx782_pos, -1, rx782_fail
-    jump $I10
-  rx782_done:
-    rx782_cur."!cursor_fail"()
-    if_null rx782_debug, debug_699
-    rx782_cur."!cursor_debug"("FAIL", "dotty")
-  debug_699:
-    .return (rx782_cur)
+    if_null rx811_debug, debug_712
+    rx811_cur."!cursor_debug"("NEXT", "dotty")
+  debug_712:
+  rx811_fail:
+    (rx811_rep, rx811_pos, $I10, $P10) = rx811_cur."!mark_fail"(0)
+    lt rx811_pos, -1, rx811_done
+    eq rx811_pos, -1, rx811_fail
+    jump $I10
+  rx811_done:
+    rx811_cur."!cursor_fail"()
+    if_null rx811_debug, debug_713
+    rx811_cur."!cursor_debug"("FAIL", "dotty")
+  debug_713:
+    .return (rx811_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__dotty"  :subid("183_1282324002.40722") :method
+.sub "!PREFIX__dotty"  :subid("189_1284728478.15265") :method
 .annotate 'line', 4
-    $P784 = self."!PREFIX__!subrule"("deflongname", ".")
-    new $P785, "ResizablePMCArray"
-    push $P785, "'"
-    push $P785, "\""
-    push $P785, $P784
-    .return ($P785)
+    $P813 = self."!PREFIX__!subrule"("deflongname", ".")
+    new $P814, "ResizablePMCArray"
+    push $P814, "'"
+    push $P814, "\""
+    push $P814, $P813
+    .return ($P814)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term"  :subid("184_1282324002.40722") :method
-.annotate 'line', 376
-    $P792 = self."!protoregex"("term")
-    .return ($P792)
+.sub "term"  :subid("190_1284728478.15265") :method
+.annotate 'line', 383
+    $P821 = self."!protoregex"("term")
+    .return ($P821)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term"  :subid("185_1282324002.40722") :method
-.annotate 'line', 376
-    $P794 = self."!PREFIX__!protoregex"("term")
-    .return ($P794)
+.sub "!PREFIX__term"  :subid("191_1284728478.15265") :method
+.annotate 'line', 383
+    $P823 = self."!PREFIX__!protoregex"("term")
+    .return ($P823)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<self>"  :subid("186_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "term:sym<self>"  :subid("192_1284728478.15265") :method :outer("11_1284728478.15265")
 .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
-    .local pmc rx796_debug
-    (rx796_cur, rx796_pos, rx796_tgt, $I10) = self."!cursor_start"()
-    getattribute rx796_debug, rx796_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx796_cur
-    .local pmc match
-    .lex "$/", match
-    length rx796_eos, rx796_tgt
-    gt rx796_pos, rx796_eos, rx796_done
-    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:
-    eq $I10, 1, rx796_restart
-    if_null rx796_debug, debug_700
-    rx796_cur."!cursor_debug"("START", "term:sym<self>")
-  debug_700:
+    .local string rx825_tgt
+    .local int rx825_pos
+    .local int rx825_off
+    .local int rx825_eos
+    .local int rx825_rep
+    .local pmc rx825_cur
+    .local pmc rx825_debug
+    (rx825_cur, rx825_pos, rx825_tgt, $I10) = self."!cursor_start"()
+    getattribute rx825_debug, rx825_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx825_cur
+    .local pmc match
+    .lex "$/", match
+    length rx825_eos, rx825_tgt
+    gt rx825_pos, rx825_eos, rx825_done
+    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:
+    eq $I10, 1, rx825_restart
+    if_null rx825_debug, debug_714
+    rx825_cur."!cursor_debug"("START", "term:sym<self>")
+  debug_714:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan799_done
-    goto rxscan799_scan
-  rxscan799_loop:
-    ($P10) = rx796_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', 378
+    ne $I10, -1, rxscan828_done
+    goto rxscan828_scan
+  rxscan828_loop:
+    ($P10) = rx825_cur."from"()
+    inc $P10
+    set rx825_pos, $P10
+    ge rx825_pos, rx825_eos, rxscan828_done
+  rxscan828_scan:
+    set_addr $I10, rxscan828_loop
+    rx825_cur."!mark_push"(0, rx825_pos, $I10)
+  rxscan828_done:
+.annotate 'line', 385
   # rx subcapture "sym"
-    set_addr $I10, rxcap_800_fail
-    rx796_cur."!mark_push"(0, rx796_pos, $I10)
+    set_addr $I10, rxcap_829_fail
+    rx825_cur."!mark_push"(0, rx825_pos, $I10)
   # rx literal  "self"
-    add $I11, rx796_pos, 4
-    gt $I11, rx796_eos, rx796_fail
-    sub $I11, rx796_pos, rx796_off
-    substr $S10, rx796_tgt, $I11, 4
-    ne $S10, "self", rx796_fail
-    add rx796_pos, 4
-    set_addr $I10, rxcap_800_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)
+    add $I11, rx825_pos, 4
+    gt $I11, rx825_eos, rx825_fail
+    sub $I11, rx825_pos, rx825_off
+    substr $S10, rx825_tgt, $I11, 4
+    ne $S10, "self", rx825_fail
+    add rx825_pos, 4
+    set_addr $I10, rxcap_829_fail
+    ($I12, $I11) = rx825_cur."!mark_peek"($I10)
+    rx825_cur."!cursor_pos"($I11)
+    ($P10) = rx825_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx825_pos, "")
+    rx825_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_800_done
-  rxcap_800_fail:
-    goto rx796_fail
-  rxcap_800_done:
+    goto rxcap_829_done
+  rxcap_829_fail:
+    goto rx825_fail
+  rxcap_829_done:
   # rxanchor rwb
-    le rx796_pos, 0, rx796_fail
-    sub $I10, rx796_pos, rx796_off
-    is_cclass $I11, 8192, rx796_tgt, $I10
-    if $I11, rx796_fail
+    le rx825_pos, 0, rx825_fail
+    sub $I10, rx825_pos, rx825_off
+    is_cclass $I11, 8192, rx825_tgt, $I10
+    if $I11, rx825_fail
     dec $I10
-    is_cclass $I11, 8192, rx796_tgt, $I10
-    unless $I11, rx796_fail
+    is_cclass $I11, 8192, rx825_tgt, $I10
+    unless $I11, rx825_fail
   # rx pass
-    rx796_cur."!cursor_pass"(rx796_pos, "term:sym<self>")
-    if_null rx796_debug, debug_701
-    rx796_cur."!cursor_debug"("PASS", "term:sym<self>", " at pos=", rx796_pos)
-  debug_701:
-    .return (rx796_cur)
-  rx796_restart:
+    rx825_cur."!cursor_pass"(rx825_pos, "term:sym<self>")
+    if_null rx825_debug, debug_715
+    rx825_cur."!cursor_debug"("PASS", "term:sym<self>", " at pos=", rx825_pos)
+  debug_715:
+    .return (rx825_cur)
+  rx825_restart:
 .annotate 'line', 4
-    if_null rx796_debug, debug_702
-    rx796_cur."!cursor_debug"("NEXT", "term:sym<self>")
-  debug_702:
-  rx796_fail:
-    (rx796_rep, rx796_pos, $I10, $P10) = rx796_cur."!mark_fail"(0)
-    lt rx796_pos, -1, rx796_done
-    eq rx796_pos, -1, rx796_fail
-    jump $I10
-  rx796_done:
-    rx796_cur."!cursor_fail"()
-    if_null rx796_debug, debug_703
-    rx796_cur."!cursor_debug"("FAIL", "term:sym<self>")
-  debug_703:
-    .return (rx796_cur)
+    if_null rx825_debug, debug_716
+    rx825_cur."!cursor_debug"("NEXT", "term:sym<self>")
+  debug_716:
+  rx825_fail:
+    (rx825_rep, rx825_pos, $I10, $P10) = rx825_cur."!mark_fail"(0)
+    lt rx825_pos, -1, rx825_done
+    eq rx825_pos, -1, rx825_fail
+    jump $I10
+  rx825_done:
+    rx825_cur."!cursor_fail"()
+    if_null rx825_debug, debug_717
+    rx825_cur."!cursor_debug"("FAIL", "term:sym<self>")
+  debug_717:
+    .return (rx825_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<self>"  :subid("187_1282324002.40722") :method
+.sub "!PREFIX__term:sym<self>"  :subid("193_1284728478.15265") :method
 .annotate 'line', 4
-    new $P798, "ResizablePMCArray"
-    push $P798, "self"
-    .return ($P798)
+    new $P827, "ResizablePMCArray"
+    push $P827, "self"
+    .return ($P827)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<identifier>"  :subid("188_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "term:sym<identifier>"  :subid("194_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .local string rx802_tgt
-    .local int rx802_pos
-    .local int rx802_off
-    .local int rx802_eos
-    .local int rx802_rep
-    .local pmc rx802_cur
-    .local pmc rx802_debug
-    (rx802_cur, rx802_pos, rx802_tgt, $I10) = self."!cursor_start"()
-    getattribute rx802_debug, rx802_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx802_cur
-    .local pmc match
-    .lex "$/", match
-    length rx802_eos, rx802_tgt
-    gt rx802_pos, rx802_eos, rx802_done
-    set rx802_off, 0
-    lt rx802_pos, 2, rx802_start
-    sub rx802_off, rx802_pos, 1
-    substr rx802_tgt, rx802_tgt, rx802_off
-  rx802_start:
-    eq $I10, 1, rx802_restart
-    if_null rx802_debug, debug_704
-    rx802_cur."!cursor_debug"("START", "term:sym<identifier>")
-  debug_704:
+    .local string rx831_tgt
+    .local int rx831_pos
+    .local int rx831_off
+    .local int rx831_eos
+    .local int rx831_rep
+    .local pmc rx831_cur
+    .local pmc rx831_debug
+    (rx831_cur, rx831_pos, rx831_tgt, $I10) = self."!cursor_start"()
+    getattribute rx831_debug, rx831_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx831_cur
+    .local pmc match
+    .lex "$/", match
+    length rx831_eos, rx831_tgt
+    gt rx831_pos, rx831_eos, rx831_done
+    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:
+    eq $I10, 1, rx831_restart
+    if_null rx831_debug, debug_718
+    rx831_cur."!cursor_debug"("START", "term:sym<identifier>")
+  debug_718:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan806_done
-    goto rxscan806_scan
-  rxscan806_loop:
-    ($P10) = rx802_cur."from"()
-    inc $P10
-    set rx802_pos, $P10
-    ge rx802_pos, rx802_eos, rxscan806_done
-  rxscan806_scan:
-    set_addr $I10, rxscan806_loop
-    rx802_cur."!mark_push"(0, rx802_pos, $I10)
-  rxscan806_done:
-.annotate 'line', 381
+    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', 388
   # rx subrule "deflongname" subtype=capture negate=
-    rx802_cur."!cursor_pos"(rx802_pos)
-    $P10 = rx802_cur."deflongname"()
-    unless $P10, rx802_fail
-    rx802_cur."!mark_push"(0, -1, 0, $P10)
+    rx831_cur."!cursor_pos"(rx831_pos)
+    $P10 = rx831_cur."deflongname"()
+    unless $P10, rx831_fail
+    rx831_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("deflongname")
-    rx802_pos = $P10."pos"()
+    rx831_pos = $P10."pos"()
   # rx enumcharlist negate=0 zerowidth
-    ge rx802_pos, rx802_eos, rx802_fail
-    sub $I10, rx802_pos, rx802_off
-    substr $S10, rx802_tgt, $I10, 1
+    sub $I10, rx831_pos, rx831_off
+    substr $S10, rx831_tgt, $I10, 1
     index $I11, "(", $S10
-    lt $I11, 0, rx802_fail
+    lt $I11, 0, rx831_fail
   # rx subrule "args" subtype=capture negate=
-    rx802_cur."!cursor_pos"(rx802_pos)
-    $P10 = rx802_cur."args"()
-    unless $P10, rx802_fail
-    rx802_cur."!mark_push"(0, -1, 0, $P10)
+    rx831_cur."!cursor_pos"(rx831_pos)
+    $P10 = rx831_cur."args"()
+    unless $P10, rx831_fail
+    rx831_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx802_pos = $P10."pos"()
-.annotate 'line', 380
+    rx831_pos = $P10."pos"()
+.annotate 'line', 387
   # rx pass
-    rx802_cur."!cursor_pass"(rx802_pos, "term:sym<identifier>")
-    if_null rx802_debug, debug_705
-    rx802_cur."!cursor_debug"("PASS", "term:sym<identifier>", " at pos=", rx802_pos)
-  debug_705:
-    .return (rx802_cur)
-  rx802_restart:
+    rx831_cur."!cursor_pass"(rx831_pos, "term:sym<identifier>")
+    if_null rx831_debug, debug_719
+    rx831_cur."!cursor_debug"("PASS", "term:sym<identifier>", " at pos=", rx831_pos)
+  debug_719:
+    .return (rx831_cur)
+  rx831_restart:
 .annotate 'line', 4
-    if_null rx802_debug, debug_706
-    rx802_cur."!cursor_debug"("NEXT", "term:sym<identifier>")
-  debug_706:
-  rx802_fail:
-    (rx802_rep, rx802_pos, $I10, $P10) = rx802_cur."!mark_fail"(0)
-    lt rx802_pos, -1, rx802_done
-    eq rx802_pos, -1, rx802_fail
-    jump $I10
-  rx802_done:
-    rx802_cur."!cursor_fail"()
-    if_null rx802_debug, debug_707
-    rx802_cur."!cursor_debug"("FAIL", "term:sym<identifier>")
-  debug_707:
-    .return (rx802_cur)
+    if_null rx831_debug, debug_720
+    rx831_cur."!cursor_debug"("NEXT", "term:sym<identifier>")
+  debug_720:
+  rx831_fail:
+    (rx831_rep, rx831_pos, $I10, $P10) = rx831_cur."!mark_fail"(0)
+    lt rx831_pos, -1, rx831_done
+    eq rx831_pos, -1, rx831_fail
+    jump $I10
+  rx831_done:
+    rx831_cur."!cursor_fail"()
+    if_null rx831_debug, debug_721
+    rx831_cur."!cursor_debug"("FAIL", "term:sym<identifier>")
+  debug_721:
+    .return (rx831_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<identifier>"  :subid("189_1282324002.40722") :method
+.sub "!PREFIX__term:sym<identifier>"  :subid("195_1284728478.15265") :method
 .annotate 'line', 4
-    $P804 = self."!PREFIX__!subrule"("deflongname", "")
-    new $P805, "ResizablePMCArray"
-    push $P805, $P804
-    .return ($P805)
+    $P833 = self."!PREFIX__!subrule"("deflongname", "")
+    new $P834, "ResizablePMCArray"
+    push $P834, $P833
+    .return ($P834)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<name>"  :subid("190_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "term:sym<name>"  :subid("196_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .local string rx808_tgt
-    .local int rx808_pos
-    .local int rx808_off
-    .local int rx808_eos
-    .local int rx808_rep
-    .local pmc rx808_cur
-    .local pmc rx808_debug
-    (rx808_cur, rx808_pos, rx808_tgt, $I10) = self."!cursor_start"()
-    rx808_cur."!cursor_caparray"("args")
-    getattribute rx808_debug, rx808_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx808_cur
+    .local string rx837_tgt
+    .local int rx837_pos
+    .local int rx837_off
+    .local int rx837_eos
+    .local int rx837_rep
+    .local pmc rx837_cur
+    .local pmc rx837_debug
+    (rx837_cur, rx837_pos, rx837_tgt, $I10) = self."!cursor_start"()
+    rx837_cur."!cursor_caparray"("args")
+    getattribute rx837_debug, rx837_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx837_cur
     .local pmc match
     .lex "$/", match
-    length rx808_eos, rx808_tgt
-    gt rx808_pos, rx808_eos, rx808_done
-    set rx808_off, 0
-    lt rx808_pos, 2, rx808_start
-    sub rx808_off, rx808_pos, 1
-    substr rx808_tgt, rx808_tgt, rx808_off
-  rx808_start:
-    eq $I10, 1, rx808_restart
-    if_null rx808_debug, debug_708
-    rx808_cur."!cursor_debug"("START", "term:sym<name>")
-  debug_708:
+    length rx837_eos, rx837_tgt
+    gt rx837_pos, rx837_eos, rx837_done
+    set rx837_off, 0
+    lt rx837_pos, 2, rx837_start
+    sub rx837_off, rx837_pos, 1
+    substr rx837_tgt, rx837_tgt, rx837_off
+  rx837_start:
+    eq $I10, 1, rx837_restart
+    if_null rx837_debug, debug_722
+    rx837_cur."!cursor_debug"("START", "term:sym<name>")
+  debug_722:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan812_done
-    goto rxscan812_scan
-  rxscan812_loop:
-    ($P10) = rx808_cur."from"()
-    inc $P10
-    set rx808_pos, $P10
-    ge rx808_pos, rx808_eos, rxscan812_done
-  rxscan812_scan:
-    set_addr $I10, rxscan812_loop
-    rx808_cur."!mark_push"(0, rx808_pos, $I10)
-  rxscan812_done:
-.annotate 'line', 385
+    ne $I10, -1, rxscan841_done
+    goto rxscan841_scan
+  rxscan841_loop:
+    ($P10) = rx837_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', 392
   # rx subrule "name" subtype=capture negate=
-    rx808_cur."!cursor_pos"(rx808_pos)
-    $P10 = rx808_cur."name"()
-    unless $P10, rx808_fail
-    rx808_cur."!mark_push"(0, -1, 0, $P10)
+    rx837_cur."!cursor_pos"(rx837_pos)
+    $P10 = rx837_cur."name"()
+    unless $P10, rx837_fail
+    rx837_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    rx808_pos = $P10."pos"()
-  # rx rxquantr813 ** 0..1
-    set_addr $I10, rxquantr813_done
-    rx808_cur."!mark_push"(0, rx808_pos, $I10)
-  rxquantr813_loop:
+    rx837_pos = $P10."pos"()
+  # rx rxquantr842 ** 0..1
+    set_addr $I10, rxquantr842_done
+    rx837_cur."!mark_push"(0, rx837_pos, $I10)
+  rxquantr842_loop:
   # rx subrule "args" subtype=capture negate=
-    rx808_cur."!cursor_pos"(rx808_pos)
-    $P10 = rx808_cur."args"()
-    unless $P10, rx808_fail
-    goto rxsubrule814_pass
-  rxsubrule814_back:
+    rx837_cur."!cursor_pos"(rx837_pos)
+    $P10 = rx837_cur."args"()
+    unless $P10, rx837_fail
+    goto rxsubrule843_pass
+  rxsubrule843_back:
     $P10 = $P10."!cursor_next"()
-    unless $P10, rx808_fail
-  rxsubrule814_pass:
-    set_addr $I10, rxsubrule814_back
-    rx808_cur."!mark_push"(0, rx808_pos, $I10, $P10)
+    unless $P10, rx837_fail
+  rxsubrule843_pass:
+    set_addr $I10, rxsubrule843_back
+    rx837_cur."!mark_push"(0, rx837_pos, $I10, $P10)
     $P10."!cursor_names"("args")
-    rx808_pos = $P10."pos"()
-    set_addr $I10, rxquantr813_done
-    (rx808_rep) = rx808_cur."!mark_commit"($I10)
-  rxquantr813_done:
-.annotate 'line', 384
+    rx837_pos = $P10."pos"()
+    set_addr $I10, rxquantr842_done
+    (rx837_rep) = rx837_cur."!mark_commit"($I10)
+  rxquantr842_done:
+.annotate 'line', 391
   # rx pass
-    rx808_cur."!cursor_pass"(rx808_pos, "term:sym<name>")
-    if_null rx808_debug, debug_709
-    rx808_cur."!cursor_debug"("PASS", "term:sym<name>", " at pos=", rx808_pos)
-  debug_709:
-    .return (rx808_cur)
-  rx808_restart:
+    rx837_cur."!cursor_pass"(rx837_pos, "term:sym<name>")
+    if_null rx837_debug, debug_723
+    rx837_cur."!cursor_debug"("PASS", "term:sym<name>", " at pos=", rx837_pos)
+  debug_723:
+    .return (rx837_cur)
+  rx837_restart:
 .annotate 'line', 4
-    if_null rx808_debug, debug_710
-    rx808_cur."!cursor_debug"("NEXT", "term:sym<name>")
-  debug_710:
-  rx808_fail:
-    (rx808_rep, rx808_pos, $I10, $P10) = rx808_cur."!mark_fail"(0)
-    lt rx808_pos, -1, rx808_done
-    eq rx808_pos, -1, rx808_fail
-    jump $I10
-  rx808_done:
-    rx808_cur."!cursor_fail"()
-    if_null rx808_debug, debug_711
-    rx808_cur."!cursor_debug"("FAIL", "term:sym<name>")
-  debug_711:
-    .return (rx808_cur)
+    if_null rx837_debug, debug_724
+    rx837_cur."!cursor_debug"("NEXT", "term:sym<name>")
+  debug_724:
+  rx837_fail:
+    (rx837_rep, rx837_pos, $I10, $P10) = rx837_cur."!mark_fail"(0)
+    lt rx837_pos, -1, rx837_done
+    eq rx837_pos, -1, rx837_fail
+    jump $I10
+  rx837_done:
+    rx837_cur."!cursor_fail"()
+    if_null rx837_debug, debug_725
+    rx837_cur."!cursor_debug"("FAIL", "term:sym<name>")
+  debug_725:
+    .return (rx837_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<name>"  :subid("191_1282324002.40722") :method
+.sub "!PREFIX__term:sym<name>"  :subid("197_1284728478.15265") :method
 .annotate 'line', 4
-    $P810 = self."!PREFIX__!subrule"("name", "")
-    new $P811, "ResizablePMCArray"
-    push $P811, $P810
-    .return ($P811)
+    $P839 = self."!PREFIX__!subrule"("name", "")
+    new $P840, "ResizablePMCArray"
+    push $P840, $P839
+    .return ($P840)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<pir::op>"  :subid("192_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "term:sym<pir::op>"  :subid("198_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .local string rx816_tgt
-    .local int rx816_pos
-    .local int rx816_off
-    .local int rx816_eos
-    .local int rx816_rep
-    .local pmc rx816_cur
-    .local pmc rx816_debug
-    (rx816_cur, rx816_pos, rx816_tgt, $I10) = self."!cursor_start"()
-    rx816_cur."!cursor_caparray"("args")
-    getattribute rx816_debug, rx816_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx816_cur
-    .local pmc match
-    .lex "$/", match
-    length rx816_eos, rx816_tgt
-    gt rx816_pos, rx816_eos, rx816_done
-    set rx816_off, 0
-    lt rx816_pos, 2, rx816_start
-    sub rx816_off, rx816_pos, 1
-    substr rx816_tgt, rx816_tgt, rx816_off
-  rx816_start:
-    eq $I10, 1, rx816_restart
-    if_null rx816_debug, debug_712
-    rx816_cur."!cursor_debug"("START", "term:sym<pir::op>")
-  debug_712:
+    .local string rx845_tgt
+    .local int rx845_pos
+    .local int rx845_off
+    .local int rx845_eos
+    .local int rx845_rep
+    .local pmc rx845_cur
+    .local pmc rx845_debug
+    (rx845_cur, rx845_pos, rx845_tgt, $I10) = self."!cursor_start"()
+    rx845_cur."!cursor_caparray"("args")
+    getattribute rx845_debug, rx845_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx845_cur
+    .local pmc match
+    .lex "$/", match
+    length rx845_eos, rx845_tgt
+    gt rx845_pos, rx845_eos, rx845_done
+    set rx845_off, 0
+    lt rx845_pos, 2, rx845_start
+    sub rx845_off, rx845_pos, 1
+    substr rx845_tgt, rx845_tgt, rx845_off
+  rx845_start:
+    eq $I10, 1, rx845_restart
+    if_null rx845_debug, debug_726
+    rx845_cur."!cursor_debug"("START", "term:sym<pir::op>")
+  debug_726:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan819_done
-    goto rxscan819_scan
-  rxscan819_loop:
-    ($P10) = rx816_cur."from"()
-    inc $P10
-    set rx816_pos, $P10
-    ge rx816_pos, rx816_eos, rxscan819_done
-  rxscan819_scan:
-    set_addr $I10, rxscan819_loop
-    rx816_cur."!mark_push"(0, rx816_pos, $I10)
-  rxscan819_done:
-.annotate 'line', 389
+    ne $I10, -1, rxscan848_done
+    goto rxscan848_scan
+  rxscan848_loop:
+    ($P10) = rx845_cur."from"()
+    inc $P10
+    set rx845_pos, $P10
+    ge rx845_pos, rx845_eos, rxscan848_done
+  rxscan848_scan:
+    set_addr $I10, rxscan848_loop
+    rx845_cur."!mark_push"(0, rx845_pos, $I10)
+  rxscan848_done:
+.annotate 'line', 396
   # rx literal  "pir::"
-    add $I11, rx816_pos, 5
-    gt $I11, rx816_eos, rx816_fail
-    sub $I11, rx816_pos, rx816_off
-    substr $S10, rx816_tgt, $I11, 5
-    ne $S10, "pir::", rx816_fail
-    add rx816_pos, 5
+    add $I11, rx845_pos, 5
+    gt $I11, rx845_eos, rx845_fail
+    sub $I11, rx845_pos, rx845_off
+    substr $S10, rx845_tgt, $I11, 5
+    ne $S10, "pir::", rx845_fail
+    add rx845_pos, 5
   # rx subcapture "op"
-    set_addr $I10, rxcap_820_fail
-    rx816_cur."!mark_push"(0, rx816_pos, $I10)
+    set_addr $I10, rxcap_849_fail
+    rx845_cur."!mark_push"(0, rx845_pos, $I10)
   # rx charclass_q w r 1..-1
-    sub $I10, rx816_pos, rx816_off
-    find_not_cclass $I11, 8192, rx816_tgt, $I10, rx816_eos
+    sub $I10, rx845_pos, rx845_off
+    find_not_cclass $I11, 8192, rx845_tgt, $I10, rx845_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx816_fail
-    add rx816_pos, rx816_off, $I11
-    set_addr $I10, rxcap_820_fail
-    ($I12, $I11) = rx816_cur."!mark_peek"($I10)
-    rx816_cur."!cursor_pos"($I11)
-    ($P10) = rx816_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx816_pos, "")
-    rx816_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, $I12, rx845_fail
+    add rx845_pos, rx845_off, $I11
+    set_addr $I10, rxcap_849_fail
+    ($I12, $I11) = rx845_cur."!mark_peek"($I10)
+    rx845_cur."!cursor_pos"($I11)
+    ($P10) = rx845_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx845_pos, "")
+    rx845_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("op")
-    goto rxcap_820_done
-  rxcap_820_fail:
-    goto rx816_fail
-  rxcap_820_done:
-  # rx rxquantr821 ** 0..1
-    set_addr $I10, rxquantr821_done
-    rx816_cur."!mark_push"(0, rx816_pos, $I10)
-  rxquantr821_loop:
+    goto rxcap_849_done
+  rxcap_849_fail:
+    goto rx845_fail
+  rxcap_849_done:
+  # rx rxquantr850 ** 0..1
+    set_addr $I10, rxquantr850_done
+    rx845_cur."!mark_push"(0, rx845_pos, $I10)
+  rxquantr850_loop:
   # rx subrule "args" subtype=capture negate=
-    rx816_cur."!cursor_pos"(rx816_pos)
-    $P10 = rx816_cur."args"()
-    unless $P10, rx816_fail
-    goto rxsubrule822_pass
-  rxsubrule822_back:
+    rx845_cur."!cursor_pos"(rx845_pos)
+    $P10 = rx845_cur."args"()
+    unless $P10, rx845_fail
+    goto rxsubrule851_pass
+  rxsubrule851_back:
     $P10 = $P10."!cursor_next"()
-    unless $P10, rx816_fail
-  rxsubrule822_pass:
-    set_addr $I10, rxsubrule822_back
-    rx816_cur."!mark_push"(0, rx816_pos, $I10, $P10)
+    unless $P10, rx845_fail
+  rxsubrule851_pass:
+    set_addr $I10, rxsubrule851_back
+    rx845_cur."!mark_push"(0, rx845_pos, $I10, $P10)
     $P10."!cursor_names"("args")
-    rx816_pos = $P10."pos"()
-    set_addr $I10, rxquantr821_done
-    (rx816_rep) = rx816_cur."!mark_commit"($I10)
-  rxquantr821_done:
-.annotate 'line', 388
-  # rx pass
-    rx816_cur."!cursor_pass"(rx816_pos, "term:sym<pir::op>")
-    if_null rx816_debug, debug_713
-    rx816_cur."!cursor_debug"("PASS", "term:sym<pir::op>", " at pos=", rx816_pos)
-  debug_713:
-    .return (rx816_cur)
-  rx816_restart:
+    rx845_pos = $P10."pos"()
+    set_addr $I10, rxquantr850_done
+    (rx845_rep) = rx845_cur."!mark_commit"($I10)
+  rxquantr850_done:
+.annotate 'line', 395
+  # rx pass
+    rx845_cur."!cursor_pass"(rx845_pos, "term:sym<pir::op>")
+    if_null rx845_debug, debug_727
+    rx845_cur."!cursor_debug"("PASS", "term:sym<pir::op>", " at pos=", rx845_pos)
+  debug_727:
+    .return (rx845_cur)
+  rx845_restart:
 .annotate 'line', 4
-    if_null rx816_debug, debug_714
-    rx816_cur."!cursor_debug"("NEXT", "term:sym<pir::op>")
-  debug_714:
-  rx816_fail:
-    (rx816_rep, rx816_pos, $I10, $P10) = rx816_cur."!mark_fail"(0)
-    lt rx816_pos, -1, rx816_done
-    eq rx816_pos, -1, rx816_fail
-    jump $I10
-  rx816_done:
-    rx816_cur."!cursor_fail"()
-    if_null rx816_debug, debug_715
-    rx816_cur."!cursor_debug"("FAIL", "term:sym<pir::op>")
-  debug_715:
-    .return (rx816_cur)
+    if_null rx845_debug, debug_728
+    rx845_cur."!cursor_debug"("NEXT", "term:sym<pir::op>")
+  debug_728:
+  rx845_fail:
+    (rx845_rep, rx845_pos, $I10, $P10) = rx845_cur."!mark_fail"(0)
+    lt rx845_pos, -1, rx845_done
+    eq rx845_pos, -1, rx845_fail
+    jump $I10
+  rx845_done:
+    rx845_cur."!cursor_fail"()
+    if_null rx845_debug, debug_729
+    rx845_cur."!cursor_debug"("FAIL", "term:sym<pir::op>")
+  debug_729:
+    .return (rx845_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<pir::op>"  :subid("193_1282324002.40722") :method
+.sub "!PREFIX__term:sym<pir::op>"  :subid("199_1284728478.15265") :method
 .annotate 'line', 4
-    new $P818, "ResizablePMCArray"
-    push $P818, "pir::"
-    .return ($P818)
+    new $P847, "ResizablePMCArray"
+    push $P847, "pir::"
+    .return ($P847)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "args"  :subid("194_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "args"  :subid("200_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .local string rx824_tgt
-    .local int rx824_pos
-    .local int rx824_off
-    .local int rx824_eos
-    .local int rx824_rep
-    .local pmc rx824_cur
-    .local pmc rx824_debug
-    (rx824_cur, rx824_pos, rx824_tgt, $I10) = self."!cursor_start"()
-    getattribute rx824_debug, rx824_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx824_cur
-    .local pmc match
-    .lex "$/", match
-    length rx824_eos, rx824_tgt
-    gt rx824_pos, rx824_eos, rx824_done
-    set rx824_off, 0
-    lt rx824_pos, 2, rx824_start
-    sub rx824_off, rx824_pos, 1
-    substr rx824_tgt, rx824_tgt, rx824_off
-  rx824_start:
-    eq $I10, 1, rx824_restart
-    if_null rx824_debug, debug_716
-    rx824_cur."!cursor_debug"("START", "args")
-  debug_716:
+    .local string rx853_tgt
+    .local int rx853_pos
+    .local int rx853_off
+    .local int rx853_eos
+    .local int rx853_rep
+    .local pmc rx853_cur
+    .local pmc rx853_debug
+    (rx853_cur, rx853_pos, rx853_tgt, $I10) = self."!cursor_start"()
+    getattribute rx853_debug, rx853_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx853_cur
+    .local pmc match
+    .lex "$/", match
+    length rx853_eos, rx853_tgt
+    gt rx853_pos, rx853_eos, rx853_done
+    set rx853_off, 0
+    lt rx853_pos, 2, rx853_start
+    sub rx853_off, rx853_pos, 1
+    substr rx853_tgt, rx853_tgt, rx853_off
+  rx853_start:
+    eq $I10, 1, rx853_restart
+    if_null rx853_debug, debug_730
+    rx853_cur."!cursor_debug"("START", "args")
+  debug_730:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan828_done
-    goto rxscan828_scan
-  rxscan828_loop:
-    ($P10) = rx824_cur."from"()
-    inc $P10
-    set rx824_pos, $P10
-    ge rx824_pos, rx824_eos, rxscan828_done
-  rxscan828_scan:
-    set_addr $I10, rxscan828_loop
-    rx824_cur."!mark_push"(0, rx824_pos, $I10)
-  rxscan828_done:
-.annotate 'line', 393
+    ne $I10, -1, rxscan857_done
+    goto rxscan857_scan
+  rxscan857_loop:
+    ($P10) = rx853_cur."from"()
+    inc $P10
+    set rx853_pos, $P10
+    ge rx853_pos, rx853_eos, rxscan857_done
+  rxscan857_scan:
+    set_addr $I10, rxscan857_loop
+    rx853_cur."!mark_push"(0, rx853_pos, $I10)
+  rxscan857_done:
+.annotate 'line', 400
   # rx literal  "("
-    add $I11, rx824_pos, 1
-    gt $I11, rx824_eos, rx824_fail
-    sub $I11, rx824_pos, rx824_off
-    ord $I11, rx824_tgt, $I11
-    ne $I11, 40, rx824_fail
-    add rx824_pos, 1
+    add $I11, rx853_pos, 1
+    gt $I11, rx853_eos, rx853_fail
+    sub $I11, rx853_pos, rx853_off
+    ord $I11, rx853_tgt, $I11
+    ne $I11, 40, rx853_fail
+    add rx853_pos, 1
   # rx subrule "arglist" subtype=capture negate=
-    rx824_cur."!cursor_pos"(rx824_pos)
-    $P10 = rx824_cur."arglist"()
-    unless $P10, rx824_fail
-    rx824_cur."!mark_push"(0, -1, 0, $P10)
+    rx853_cur."!cursor_pos"(rx853_pos)
+    $P10 = rx853_cur."arglist"()
+    unless $P10, rx853_fail
+    rx853_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("arglist")
-    rx824_pos = $P10."pos"()
+    rx853_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx824_pos, 1
-    gt $I11, rx824_eos, rx824_fail
-    sub $I11, rx824_pos, rx824_off
-    ord $I11, rx824_tgt, $I11
-    ne $I11, 41, rx824_fail
-    add rx824_pos, 1
-  # rx pass
-    rx824_cur."!cursor_pass"(rx824_pos, "args")
-    if_null rx824_debug, debug_717
-    rx824_cur."!cursor_debug"("PASS", "args", " at pos=", rx824_pos)
-  debug_717:
-    .return (rx824_cur)
-  rx824_restart:
+    add $I11, rx853_pos, 1
+    gt $I11, rx853_eos, rx853_fail
+    sub $I11, rx853_pos, rx853_off
+    ord $I11, rx853_tgt, $I11
+    ne $I11, 41, rx853_fail
+    add rx853_pos, 1
+  # rx pass
+    rx853_cur."!cursor_pass"(rx853_pos, "args")
+    if_null rx853_debug, debug_731
+    rx853_cur."!cursor_debug"("PASS", "args", " at pos=", rx853_pos)
+  debug_731:
+    .return (rx853_cur)
+  rx853_restart:
 .annotate 'line', 4
-    if_null rx824_debug, debug_718
-    rx824_cur."!cursor_debug"("NEXT", "args")
-  debug_718:
-  rx824_fail:
-    (rx824_rep, rx824_pos, $I10, $P10) = rx824_cur."!mark_fail"(0)
-    lt rx824_pos, -1, rx824_done
-    eq rx824_pos, -1, rx824_fail
-    jump $I10
-  rx824_done:
-    rx824_cur."!cursor_fail"()
-    if_null rx824_debug, debug_719
-    rx824_cur."!cursor_debug"("FAIL", "args")
-  debug_719:
-    .return (rx824_cur)
+    if_null rx853_debug, debug_732
+    rx853_cur."!cursor_debug"("NEXT", "args")
+  debug_732:
+  rx853_fail:
+    (rx853_rep, rx853_pos, $I10, $P10) = rx853_cur."!mark_fail"(0)
+    lt rx853_pos, -1, rx853_done
+    eq rx853_pos, -1, rx853_fail
+    jump $I10
+  rx853_done:
+    rx853_cur."!cursor_fail"()
+    if_null rx853_debug, debug_733
+    rx853_cur."!cursor_debug"("FAIL", "args")
+  debug_733:
+    .return (rx853_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__args"  :subid("195_1282324002.40722") :method
+.sub "!PREFIX__args"  :subid("201_1284728478.15265") :method
 .annotate 'line', 4
-    $P826 = self."!PREFIX__!subrule"("arglist", "(")
-    new $P827, "ResizablePMCArray"
-    push $P827, $P826
-    .return ($P827)
+    $P855 = self."!PREFIX__!subrule"("arglist", "(")
+    new $P856, "ResizablePMCArray"
+    push $P856, $P855
+    .return ($P856)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "arglist"  :subid("196_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "arglist"  :subid("202_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .local string rx830_tgt
-    .local int rx830_pos
-    .local int rx830_off
-    .local int rx830_eos
-    .local int rx830_rep
-    .local pmc rx830_cur
-    .local pmc rx830_debug
-    (rx830_cur, rx830_pos, rx830_tgt, $I10) = self."!cursor_start"()
-    getattribute rx830_debug, rx830_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx830_cur
-    .local pmc match
-    .lex "$/", match
-    length rx830_eos, rx830_tgt
-    gt rx830_pos, rx830_eos, rx830_done
-    set rx830_off, 0
-    lt rx830_pos, 2, rx830_start
-    sub rx830_off, rx830_pos, 1
-    substr rx830_tgt, rx830_tgt, rx830_off
-  rx830_start:
-    eq $I10, 1, rx830_restart
-    if_null rx830_debug, debug_720
-    rx830_cur."!cursor_debug"("START", "arglist")
-  debug_720:
+    .local string rx859_tgt
+    .local int rx859_pos
+    .local int rx859_off
+    .local int rx859_eos
+    .local int rx859_rep
+    .local pmc rx859_cur
+    .local pmc rx859_debug
+    (rx859_cur, rx859_pos, rx859_tgt, $I10) = self."!cursor_start"()
+    getattribute rx859_debug, rx859_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx859_cur
+    .local pmc match
+    .lex "$/", match
+    length rx859_eos, rx859_tgt
+    gt rx859_pos, rx859_eos, rx859_done
+    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:
+    eq $I10, 1, rx859_restart
+    if_null rx859_debug, debug_734
+    rx859_cur."!cursor_debug"("START", "arglist")
+  debug_734:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan834_done
-    goto rxscan834_scan
-  rxscan834_loop:
-    ($P10) = rx830_cur."from"()
-    inc $P10
-    set rx830_pos, $P10
-    ge rx830_pos, rx830_eos, rxscan834_done
-  rxscan834_scan:
-    set_addr $I10, rxscan834_loop
-    rx830_cur."!mark_push"(0, rx830_pos, $I10)
-  rxscan834_done:
-.annotate 'line', 397
+    ne $I10, -1, rxscan863_done
+    goto rxscan863_scan
+  rxscan863_loop:
+    ($P10) = rx859_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', 404
   # rx subrule "ws" subtype=method negate=
-    rx830_cur."!cursor_pos"(rx830_pos)
-    $P10 = rx830_cur."ws"()
-    unless $P10, rx830_fail
-    rx830_pos = $P10."pos"()
-  alt835_0:
-.annotate 'line', 398
-    set_addr $I10, alt835_1
-    rx830_cur."!mark_push"(0, rx830_pos, $I10)
-.annotate 'line', 399
+    rx859_cur."!cursor_pos"(rx859_pos)
+    $P10 = rx859_cur."ws"()
+    unless $P10, rx859_fail
+    rx859_pos = $P10."pos"()
+  alt864_0:
+.annotate 'line', 405
+    set_addr $I10, alt864_1
+    rx859_cur."!mark_push"(0, rx859_pos, $I10)
+.annotate 'line', 406
   # rx subrule "EXPR" subtype=capture negate=
-    rx830_cur."!cursor_pos"(rx830_pos)
-    $P10 = rx830_cur."EXPR"("f=")
-    unless $P10, rx830_fail
-    rx830_cur."!mark_push"(0, -1, 0, $P10)
+    rx859_cur."!cursor_pos"(rx859_pos)
+    $P10 = rx859_cur."EXPR"("f=")
+    unless $P10, rx859_fail
+    rx859_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx830_pos = $P10."pos"()
-    goto alt835_end
-  alt835_1:
-  alt835_end:
-.annotate 'line', 396
+    rx859_pos = $P10."pos"()
+    goto alt864_end
+  alt864_1:
+  alt864_end:
+.annotate 'line', 403
   # rx pass
-    rx830_cur."!cursor_pass"(rx830_pos, "arglist")
-    if_null rx830_debug, debug_721
-    rx830_cur."!cursor_debug"("PASS", "arglist", " at pos=", rx830_pos)
-  debug_721:
-    .return (rx830_cur)
-  rx830_restart:
+    rx859_cur."!cursor_pass"(rx859_pos, "arglist")
+    if_null rx859_debug, debug_735
+    rx859_cur."!cursor_debug"("PASS", "arglist", " at pos=", rx859_pos)
+  debug_735:
+    .return (rx859_cur)
+  rx859_restart:
 .annotate 'line', 4
-    if_null rx830_debug, debug_722
-    rx830_cur."!cursor_debug"("NEXT", "arglist")
-  debug_722:
-  rx830_fail:
-    (rx830_rep, rx830_pos, $I10, $P10) = rx830_cur."!mark_fail"(0)
-    lt rx830_pos, -1, rx830_done
-    eq rx830_pos, -1, rx830_fail
-    jump $I10
-  rx830_done:
-    rx830_cur."!cursor_fail"()
-    if_null rx830_debug, debug_723
-    rx830_cur."!cursor_debug"("FAIL", "arglist")
-  debug_723:
-    .return (rx830_cur)
+    if_null rx859_debug, debug_736
+    rx859_cur."!cursor_debug"("NEXT", "arglist")
+  debug_736:
+  rx859_fail:
+    (rx859_rep, rx859_pos, $I10, $P10) = rx859_cur."!mark_fail"(0)
+    lt rx859_pos, -1, rx859_done
+    eq rx859_pos, -1, rx859_fail
+    jump $I10
+  rx859_done:
+    rx859_cur."!cursor_fail"()
+    if_null rx859_debug, debug_737
+    rx859_cur."!cursor_debug"("FAIL", "arglist")
+  debug_737:
+    .return (rx859_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__arglist"  :subid("197_1282324002.40722") :method
+.sub "!PREFIX__arglist"  :subid("203_1284728478.15265") :method
 .annotate 'line', 4
-    $P832 = self."!PREFIX__!subrule"("ws", "")
-    new $P833, "ResizablePMCArray"
-    push $P833, $P832
-    .return ($P833)
+    $P861 = self."!PREFIX__!subrule"("ws", "")
+    new $P862, "ResizablePMCArray"
+    push $P862, $P861
+    .return ($P862)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<value>"  :subid("198_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "term:sym<value>"  :subid("204_1284728478.15265") :method :outer("11_1284728478.15265")
 .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
-    .local pmc rx837_debug
-    (rx837_cur, rx837_pos, rx837_tgt, $I10) = self."!cursor_start"()
-    getattribute rx837_debug, rx837_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx837_cur
+    .local string rx866_tgt
+    .local int rx866_pos
+    .local int rx866_off
+    .local int rx866_eos
+    .local int rx866_rep
+    .local pmc rx866_cur
+    .local pmc rx866_debug
+    (rx866_cur, rx866_pos, rx866_tgt, $I10) = self."!cursor_start"()
+    getattribute rx866_debug, rx866_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx866_cur
     .local pmc match
     .lex "$/", match
-    length rx837_eos, rx837_tgt
-    gt rx837_pos, rx837_eos, rx837_done
-    set rx837_off, 0
-    lt rx837_pos, 2, rx837_start
-    sub rx837_off, rx837_pos, 1
-    substr rx837_tgt, rx837_tgt, rx837_off
-  rx837_start:
-    eq $I10, 1, rx837_restart
-    if_null rx837_debug, debug_724
-    rx837_cur."!cursor_debug"("START", "term:sym<value>")
-  debug_724:
+    length rx866_eos, rx866_tgt
+    gt rx866_pos, rx866_eos, rx866_done
+    set rx866_off, 0
+    lt rx866_pos, 2, rx866_start
+    sub rx866_off, rx866_pos, 1
+    substr rx866_tgt, rx866_tgt, rx866_off
+  rx866_start:
+    eq $I10, 1, rx866_restart
+    if_null rx866_debug, debug_738
+    rx866_cur."!cursor_debug"("START", "term:sym<value>")
+  debug_738:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan841_done
-    goto rxscan841_scan
-  rxscan841_loop:
-    ($P10) = rx837_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', 405
+    ne $I10, -1, rxscan870_done
+    goto rxscan870_scan
+  rxscan870_loop:
+    ($P10) = rx866_cur."from"()
+    inc $P10
+    set rx866_pos, $P10
+    ge rx866_pos, rx866_eos, rxscan870_done
+  rxscan870_scan:
+    set_addr $I10, rxscan870_loop
+    rx866_cur."!mark_push"(0, rx866_pos, $I10)
+  rxscan870_done:
+.annotate 'line', 412
   # rx subrule "value" subtype=capture negate=
-    rx837_cur."!cursor_pos"(rx837_pos)
-    $P10 = rx837_cur."value"()
-    unless $P10, rx837_fail
-    rx837_cur."!mark_push"(0, -1, 0, $P10)
+    rx866_cur."!cursor_pos"(rx866_pos)
+    $P10 = rx866_cur."value"()
+    unless $P10, rx866_fail
+    rx866_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("value")
-    rx837_pos = $P10."pos"()
+    rx866_pos = $P10."pos"()
   # rx pass
-    rx837_cur."!cursor_pass"(rx837_pos, "term:sym<value>")
-    if_null rx837_debug, debug_725
-    rx837_cur."!cursor_debug"("PASS", "term:sym<value>", " at pos=", rx837_pos)
-  debug_725:
-    .return (rx837_cur)
-  rx837_restart:
+    rx866_cur."!cursor_pass"(rx866_pos, "term:sym<value>")
+    if_null rx866_debug, debug_739
+    rx866_cur."!cursor_debug"("PASS", "term:sym<value>", " at pos=", rx866_pos)
+  debug_739:
+    .return (rx866_cur)
+  rx866_restart:
 .annotate 'line', 4
-    if_null rx837_debug, debug_726
-    rx837_cur."!cursor_debug"("NEXT", "term:sym<value>")
-  debug_726:
-  rx837_fail:
-    (rx837_rep, rx837_pos, $I10, $P10) = rx837_cur."!mark_fail"(0)
-    lt rx837_pos, -1, rx837_done
-    eq rx837_pos, -1, rx837_fail
-    jump $I10
-  rx837_done:
-    rx837_cur."!cursor_fail"()
-    if_null rx837_debug, debug_727
-    rx837_cur."!cursor_debug"("FAIL", "term:sym<value>")
-  debug_727:
-    .return (rx837_cur)
+    if_null rx866_debug, debug_740
+    rx866_cur."!cursor_debug"("NEXT", "term:sym<value>")
+  debug_740:
+  rx866_fail:
+    (rx866_rep, rx866_pos, $I10, $P10) = rx866_cur."!mark_fail"(0)
+    lt rx866_pos, -1, rx866_done
+    eq rx866_pos, -1, rx866_fail
+    jump $I10
+  rx866_done:
+    rx866_cur."!cursor_fail"()
+    if_null rx866_debug, debug_741
+    rx866_cur."!cursor_debug"("FAIL", "term:sym<value>")
+  debug_741:
+    .return (rx866_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<value>"  :subid("199_1282324002.40722") :method
+.sub "!PREFIX__term:sym<value>"  :subid("205_1284728478.15265") :method
 .annotate 'line', 4
-    $P839 = self."!PREFIX__!subrule"("value", "")
-    new $P840, "ResizablePMCArray"
-    push $P840, $P839
-    .return ($P840)
+    $P868 = self."!PREFIX__!subrule"("value", "")
+    new $P869, "ResizablePMCArray"
+    push $P869, $P868
+    .return ($P869)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "value"  :subid("200_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "value"  :subid("206_1284728478.15265") :method :outer("11_1284728478.15265")
 .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
-    .local pmc rx843_debug
-    (rx843_cur, rx843_pos, rx843_tgt, $I10) = self."!cursor_start"()
-    getattribute rx843_debug, rx843_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx843_cur
-    .local pmc match
-    .lex "$/", match
-    length rx843_eos, rx843_tgt
-    gt rx843_pos, rx843_eos, rx843_done
-    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:
-    eq $I10, 1, rx843_restart
-    if_null rx843_debug, debug_728
-    rx843_cur."!cursor_debug"("START", "value")
-  debug_728:
+    .local string rx872_tgt
+    .local int rx872_pos
+    .local int rx872_off
+    .local int rx872_eos
+    .local int rx872_rep
+    .local pmc rx872_cur
+    .local pmc rx872_debug
+    (rx872_cur, rx872_pos, rx872_tgt, $I10) = self."!cursor_start"()
+    getattribute rx872_debug, rx872_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx872_cur
+    .local pmc match
+    .lex "$/", match
+    length rx872_eos, rx872_tgt
+    gt rx872_pos, rx872_eos, rx872_done
+    set rx872_off, 0
+    lt rx872_pos, 2, rx872_start
+    sub rx872_off, rx872_pos, 1
+    substr rx872_tgt, rx872_tgt, rx872_off
+  rx872_start:
+    eq $I10, 1, rx872_restart
+    if_null rx872_debug, debug_742
+    rx872_cur."!cursor_debug"("START", "value")
+  debug_742:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan848_done
-    goto rxscan848_scan
-  rxscan848_loop:
-    ($P10) = rx843_cur."from"()
+    ne $I10, -1, rxscan877_done
+    goto rxscan877_scan
+  rxscan877_loop:
+    ($P10) = rx872_cur."from"()
     inc $P10
-    set rx843_pos, $P10
-    ge rx843_pos, rx843_eos, rxscan848_done
-  rxscan848_scan:
-    set_addr $I10, rxscan848_loop
-    rx843_cur."!mark_push"(0, rx843_pos, $I10)
-  rxscan848_done:
-  alt849_0:
-.annotate 'line', 407
-    set_addr $I10, alt849_1
-    rx843_cur."!mark_push"(0, rx843_pos, $I10)
-.annotate 'line', 408
+    set rx872_pos, $P10
+    ge rx872_pos, rx872_eos, rxscan877_done
+  rxscan877_scan:
+    set_addr $I10, rxscan877_loop
+    rx872_cur."!mark_push"(0, rx872_pos, $I10)
+  rxscan877_done:
+  alt878_0:
+.annotate 'line', 414
+    set_addr $I10, alt878_1
+    rx872_cur."!mark_push"(0, rx872_pos, $I10)
+.annotate 'line', 415
   # rx subrule "quote" subtype=capture negate=
-    rx843_cur."!cursor_pos"(rx843_pos)
-    $P10 = rx843_cur."quote"()
-    unless $P10, rx843_fail
-    rx843_cur."!mark_push"(0, -1, 0, $P10)
+    rx872_cur."!cursor_pos"(rx872_pos)
+    $P10 = rx872_cur."quote"()
+    unless $P10, rx872_fail
+    rx872_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote")
-    rx843_pos = $P10."pos"()
-    goto alt849_end
-  alt849_1:
-.annotate 'line', 409
+    rx872_pos = $P10."pos"()
+    goto alt878_end
+  alt878_1:
+.annotate 'line', 416
   # rx subrule "number" subtype=capture negate=
-    rx843_cur."!cursor_pos"(rx843_pos)
-    $P10 = rx843_cur."number"()
-    unless $P10, rx843_fail
-    rx843_cur."!mark_push"(0, -1, 0, $P10)
+    rx872_cur."!cursor_pos"(rx872_pos)
+    $P10 = rx872_cur."number"()
+    unless $P10, rx872_fail
+    rx872_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("number")
-    rx843_pos = $P10."pos"()
-  alt849_end:
-.annotate 'line', 407
+    rx872_pos = $P10."pos"()
+  alt878_end:
+.annotate 'line', 414
   # rx pass
-    rx843_cur."!cursor_pass"(rx843_pos, "value")
-    if_null rx843_debug, debug_729
-    rx843_cur."!cursor_debug"("PASS", "value", " at pos=", rx843_pos)
-  debug_729:
-    .return (rx843_cur)
-  rx843_restart:
+    rx872_cur."!cursor_pass"(rx872_pos, "value")
+    if_null rx872_debug, debug_743
+    rx872_cur."!cursor_debug"("PASS", "value", " at pos=", rx872_pos)
+  debug_743:
+    .return (rx872_cur)
+  rx872_restart:
 .annotate 'line', 4
-    if_null rx843_debug, debug_730
-    rx843_cur."!cursor_debug"("NEXT", "value")
-  debug_730:
-  rx843_fail:
-    (rx843_rep, rx843_pos, $I10, $P10) = rx843_cur."!mark_fail"(0)
-    lt rx843_pos, -1, rx843_done
-    eq rx843_pos, -1, rx843_fail
-    jump $I10
-  rx843_done:
-    rx843_cur."!cursor_fail"()
-    if_null rx843_debug, debug_731
-    rx843_cur."!cursor_debug"("FAIL", "value")
-  debug_731:
-    .return (rx843_cur)
+    if_null rx872_debug, debug_744
+    rx872_cur."!cursor_debug"("NEXT", "value")
+  debug_744:
+  rx872_fail:
+    (rx872_rep, rx872_pos, $I10, $P10) = rx872_cur."!mark_fail"(0)
+    lt rx872_pos, -1, rx872_done
+    eq rx872_pos, -1, rx872_fail
+    jump $I10
+  rx872_done:
+    rx872_cur."!cursor_fail"()
+    if_null rx872_debug, debug_745
+    rx872_cur."!cursor_debug"("FAIL", "value")
+  debug_745:
+    .return (rx872_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__value"  :subid("201_1282324002.40722") :method
+.sub "!PREFIX__value"  :subid("207_1284728478.15265") :method
 .annotate 'line', 4
-    $P845 = self."!PREFIX__!subrule"("number", "")
-    $P846 = self."!PREFIX__!subrule"("quote", "")
-    new $P847, "ResizablePMCArray"
-    push $P847, $P845
-    push $P847, $P846
-    .return ($P847)
+    $P874 = self."!PREFIX__!subrule"("number", "")
+    $P875 = self."!PREFIX__!subrule"("quote", "")
+    new $P876, "ResizablePMCArray"
+    push $P876, $P874
+    push $P876, $P875
+    .return ($P876)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "number"  :subid("202_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "number"  :subid("208_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .local string rx851_tgt
-    .local int rx851_pos
-    .local int rx851_off
-    .local int rx851_eos
-    .local int rx851_rep
-    .local pmc rx851_cur
-    .local pmc rx851_debug
-    (rx851_cur, rx851_pos, rx851_tgt, $I10) = self."!cursor_start"()
-    getattribute rx851_debug, rx851_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx851_cur
-    .local pmc match
-    .lex "$/", match
-    length rx851_eos, rx851_tgt
-    gt rx851_pos, rx851_eos, rx851_done
-    set rx851_off, 0
-    lt rx851_pos, 2, rx851_start
-    sub rx851_off, rx851_pos, 1
-    substr rx851_tgt, rx851_tgt, rx851_off
-  rx851_start:
-    eq $I10, 1, rx851_restart
-    if_null rx851_debug, debug_732
-    rx851_cur."!cursor_debug"("START", "number")
-  debug_732:
+    .local string rx880_tgt
+    .local int rx880_pos
+    .local int rx880_off
+    .local int rx880_eos
+    .local int rx880_rep
+    .local pmc rx880_cur
+    .local pmc rx880_debug
+    (rx880_cur, rx880_pos, rx880_tgt, $I10) = self."!cursor_start"()
+    getattribute rx880_debug, rx880_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx880_cur
+    .local pmc match
+    .lex "$/", match
+    length rx880_eos, rx880_tgt
+    gt rx880_pos, rx880_eos, rx880_done
+    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:
+    eq $I10, 1, rx880_restart
+    if_null rx880_debug, debug_746
+    rx880_cur."!cursor_debug"("START", "number")
+  debug_746:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan854_done
-    goto rxscan854_scan
-  rxscan854_loop:
-    ($P10) = rx851_cur."from"()
-    inc $P10
-    set rx851_pos, $P10
-    ge rx851_pos, rx851_eos, rxscan854_done
-  rxscan854_scan:
-    set_addr $I10, rxscan854_loop
-    rx851_cur."!mark_push"(0, rx851_pos, $I10)
-  rxscan854_done:
-.annotate 'line', 413
+    ne $I10, -1, rxscan883_done
+    goto rxscan883_scan
+  rxscan883_loop:
+    ($P10) = rx880_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', 420
   # rx subcapture "sign"
-    set_addr $I10, rxcap_856_fail
-    rx851_cur."!mark_push"(0, rx851_pos, $I10)
+    set_addr $I10, rxcap_885_fail
+    rx880_cur."!mark_push"(0, rx880_pos, $I10)
   # rx enumcharlist_q negate=0  r 0..1
-    sub $I10, rx851_pos, rx851_off
-    set rx851_rep, 0
-    sub $I12, rx851_eos, rx851_pos
-    le $I12, 1, rxenumcharlistq855_loop
+    sub $I10, rx880_pos, rx880_off
+    set rx880_rep, 0
+    sub $I12, rx880_eos, rx880_pos
+    le $I12, 1, rxenumcharlistq884_loop
     set $I12, 1
-  rxenumcharlistq855_loop:
-    le $I12, 0, rxenumcharlistq855_done
-    substr $S10, rx851_tgt, $I10, 1
+  rxenumcharlistq884_loop:
+    le $I12, 0, rxenumcharlistq884_done
+    substr $S10, rx880_tgt, $I10, 1
     index $I11, "+-", $S10
-    lt $I11, 0, rxenumcharlistq855_done
-    inc rx851_rep
-  rxenumcharlistq855_done:
-    add rx851_pos, rx851_pos, rx851_rep
-    set_addr $I10, rxcap_856_fail
-    ($I12, $I11) = rx851_cur."!mark_peek"($I10)
-    rx851_cur."!cursor_pos"($I11)
-    ($P10) = rx851_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx851_pos, "")
-    rx851_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rxenumcharlistq884_done
+    inc rx880_rep
+  rxenumcharlistq884_done:
+    add rx880_pos, rx880_pos, rx880_rep
+    set_addr $I10, rxcap_885_fail
+    ($I12, $I11) = rx880_cur."!mark_peek"($I10)
+    rx880_cur."!cursor_pos"($I11)
+    ($P10) = rx880_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx880_pos, "")
+    rx880_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sign")
-    goto rxcap_856_done
-  rxcap_856_fail:
-    goto rx851_fail
-  rxcap_856_done:
-  alt857_0:
-.annotate 'line', 414
-    set_addr $I10, alt857_1
-    rx851_cur."!mark_push"(0, rx851_pos, $I10)
+    goto rxcap_885_done
+  rxcap_885_fail:
+    goto rx880_fail
+  rxcap_885_done:
+  alt886_0:
+.annotate 'line', 421
+    set_addr $I10, alt886_1
+    rx880_cur."!mark_push"(0, rx880_pos, $I10)
   # rx subrule "dec_number" subtype=capture negate=
-    rx851_cur."!cursor_pos"(rx851_pos)
-    $P10 = rx851_cur."dec_number"()
-    unless $P10, rx851_fail
-    rx851_cur."!mark_push"(0, -1, 0, $P10)
+    rx880_cur."!cursor_pos"(rx880_pos)
+    $P10 = rx880_cur."dec_number"()
+    unless $P10, rx880_fail
+    rx880_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("dec_number")
-    rx851_pos = $P10."pos"()
-    goto alt857_end
-  alt857_1:
+    rx880_pos = $P10."pos"()
+    goto alt886_end
+  alt886_1:
   # rx subrule "integer" subtype=capture negate=
-    rx851_cur."!cursor_pos"(rx851_pos)
-    $P10 = rx851_cur."integer"()
-    unless $P10, rx851_fail
-    rx851_cur."!mark_push"(0, -1, 0, $P10)
+    rx880_cur."!cursor_pos"(rx880_pos)
+    $P10 = rx880_cur."integer"()
+    unless $P10, rx880_fail
+    rx880_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("integer")
-    rx851_pos = $P10."pos"()
-  alt857_end:
-.annotate 'line', 412
+    rx880_pos = $P10."pos"()
+  alt886_end:
+.annotate 'line', 419
   # rx pass
-    rx851_cur."!cursor_pass"(rx851_pos, "number")
-    if_null rx851_debug, debug_733
-    rx851_cur."!cursor_debug"("PASS", "number", " at pos=", rx851_pos)
-  debug_733:
-    .return (rx851_cur)
-  rx851_restart:
+    rx880_cur."!cursor_pass"(rx880_pos, "number")
+    if_null rx880_debug, debug_747
+    rx880_cur."!cursor_debug"("PASS", "number", " at pos=", rx880_pos)
+  debug_747:
+    .return (rx880_cur)
+  rx880_restart:
 .annotate 'line', 4
-    if_null rx851_debug, debug_734
-    rx851_cur."!cursor_debug"("NEXT", "number")
-  debug_734:
-  rx851_fail:
-    (rx851_rep, rx851_pos, $I10, $P10) = rx851_cur."!mark_fail"(0)
-    lt rx851_pos, -1, rx851_done
-    eq rx851_pos, -1, rx851_fail
-    jump $I10
-  rx851_done:
-    rx851_cur."!cursor_fail"()
-    if_null rx851_debug, debug_735
-    rx851_cur."!cursor_debug"("FAIL", "number")
-  debug_735:
-    .return (rx851_cur)
+    if_null rx880_debug, debug_748
+    rx880_cur."!cursor_debug"("NEXT", "number")
+  debug_748:
+  rx880_fail:
+    (rx880_rep, rx880_pos, $I10, $P10) = rx880_cur."!mark_fail"(0)
+    lt rx880_pos, -1, rx880_done
+    eq rx880_pos, -1, rx880_fail
+    jump $I10
+  rx880_done:
+    rx880_cur."!cursor_fail"()
+    if_null rx880_debug, debug_749
+    rx880_cur."!cursor_debug"("FAIL", "number")
+  debug_749:
+    .return (rx880_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__number"  :subid("203_1282324002.40722") :method
+.sub "!PREFIX__number"  :subid("209_1284728478.15265") :method
 .annotate 'line', 4
-    new $P853, "ResizablePMCArray"
-    push $P853, ""
-    .return ($P853)
+    new $P882, "ResizablePMCArray"
+    push $P882, ""
+    .return ($P882)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote"  :subid("204_1282324002.40722") :method
-.annotate 'line', 417
-    $P859 = self."!protoregex"("quote")
-    .return ($P859)
+.sub "quote"  :subid("210_1284728478.15265") :method
+.annotate 'line', 424
+    $P888 = self."!protoregex"("quote")
+    .return ($P888)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote"  :subid("205_1282324002.40722") :method
-.annotate 'line', 417
-    $P861 = self."!PREFIX__!protoregex"("quote")
-    .return ($P861)
+.sub "!PREFIX__quote"  :subid("211_1284728478.15265") :method
+.annotate 'line', 424
+    $P890 = self."!PREFIX__!protoregex"("quote")
+    .return ($P890)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<apos>"  :subid("206_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "quote:sym<apos>"  :subid("212_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .local string rx863_tgt
-    .local int rx863_pos
-    .local int rx863_off
-    .local int rx863_eos
-    .local int rx863_rep
-    .local pmc rx863_cur
-    .local pmc rx863_debug
-    (rx863_cur, rx863_pos, rx863_tgt, $I10) = self."!cursor_start"()
-    getattribute rx863_debug, rx863_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx863_cur
-    .local pmc match
-    .lex "$/", match
-    length rx863_eos, rx863_tgt
-    gt rx863_pos, rx863_eos, rx863_done
-    set rx863_off, 0
-    lt rx863_pos, 2, rx863_start
-    sub rx863_off, rx863_pos, 1
-    substr rx863_tgt, rx863_tgt, rx863_off
-  rx863_start:
-    eq $I10, 1, rx863_restart
-    if_null rx863_debug, debug_736
-    rx863_cur."!cursor_debug"("START", "quote:sym<apos>")
-  debug_736:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan866_done
-    goto rxscan866_scan
-  rxscan866_loop:
-    ($P10) = rx863_cur."from"()
-    inc $P10
-    set rx863_pos, $P10
-    ge rx863_pos, rx863_eos, rxscan866_done
-  rxscan866_scan:
-    set_addr $I10, rxscan866_loop
-    rx863_cur."!mark_push"(0, rx863_pos, $I10)
-  rxscan866_done:
-.annotate 'line', 418
-  # rx enumcharlist negate=0 zerowidth
-    ge rx863_pos, rx863_eos, rx863_fail
-    sub $I10, rx863_pos, rx863_off
-    substr $S10, rx863_tgt, $I10, 1
-    index $I11, "'", $S10
-    lt $I11, 0, rx863_fail
-  # rx subrule "quote_EXPR" subtype=capture negate=
-    rx863_cur."!cursor_pos"(rx863_pos)
-    $P10 = rx863_cur."quote_EXPR"(":q")
-    unless $P10, rx863_fail
-    rx863_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote_EXPR")
-    rx863_pos = $P10."pos"()
-  # rx pass
-    rx863_cur."!cursor_pass"(rx863_pos, "quote:sym<apos>")
-    if_null rx863_debug, debug_737
-    rx863_cur."!cursor_debug"("PASS", "quote:sym<apos>", " at pos=", rx863_pos)
-  debug_737:
-    .return (rx863_cur)
-  rx863_restart:
-.annotate 'line', 4
-    if_null rx863_debug, debug_738
-    rx863_cur."!cursor_debug"("NEXT", "quote:sym<apos>")
-  debug_738:
-  rx863_fail:
-    (rx863_rep, rx863_pos, $I10, $P10) = rx863_cur."!mark_fail"(0)
-    lt rx863_pos, -1, rx863_done
-    eq rx863_pos, -1, rx863_fail
-    jump $I10
-  rx863_done:
-    rx863_cur."!cursor_fail"()
-    if_null rx863_debug, debug_739
-    rx863_cur."!cursor_debug"("FAIL", "quote:sym<apos>")
-  debug_739:
-    .return (rx863_cur)
-    .return ()
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<apos>"  :subid("207_1282324002.40722") :method
-.annotate 'line', 4
-    new $P865, "ResizablePMCArray"
-    push $P865, "'"
-    .return ($P865)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "quote:sym<dblq>"  :subid("208_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 4
-    .local string rx868_tgt
-    .local int rx868_pos
-    .local int rx868_off
-    .local int rx868_eos
-    .local int rx868_rep
-    .local pmc rx868_cur
-    .local pmc rx868_debug
-    (rx868_cur, rx868_pos, rx868_tgt, $I10) = self."!cursor_start"()
-    getattribute rx868_debug, rx868_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx868_cur
-    .local pmc match
-    .lex "$/", match
-    length rx868_eos, rx868_tgt
-    gt rx868_pos, rx868_eos, rx868_done
-    set rx868_off, 0
-    lt rx868_pos, 2, rx868_start
-    sub rx868_off, rx868_pos, 1
-    substr rx868_tgt, rx868_tgt, rx868_off
-  rx868_start:
-    eq $I10, 1, rx868_restart
-    if_null rx868_debug, debug_740
-    rx868_cur."!cursor_debug"("START", "quote:sym<dblq>")
-  debug_740:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan871_done
-    goto rxscan871_scan
-  rxscan871_loop:
-    ($P10) = rx868_cur."from"()
-    inc $P10
-    set rx868_pos, $P10
-    ge rx868_pos, rx868_eos, rxscan871_done
-  rxscan871_scan:
-    set_addr $I10, rxscan871_loop
-    rx868_cur."!mark_push"(0, rx868_pos, $I10)
-  rxscan871_done:
-.annotate 'line', 419
-  # rx enumcharlist negate=0 zerowidth
-    ge rx868_pos, rx868_eos, rx868_fail
-    sub $I10, rx868_pos, rx868_off
-    substr $S10, rx868_tgt, $I10, 1
-    index $I11, "\"", $S10
-    lt $I11, 0, rx868_fail
-  # rx subrule "quote_EXPR" subtype=capture negate=
-    rx868_cur."!cursor_pos"(rx868_pos)
-    $P10 = rx868_cur."quote_EXPR"(":qq")
-    unless $P10, rx868_fail
-    rx868_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote_EXPR")
-    rx868_pos = $P10."pos"()
-  # rx pass
-    rx868_cur."!cursor_pass"(rx868_pos, "quote:sym<dblq>")
-    if_null rx868_debug, debug_741
-    rx868_cur."!cursor_debug"("PASS", "quote:sym<dblq>", " at pos=", rx868_pos)
-  debug_741:
-    .return (rx868_cur)
-  rx868_restart:
-.annotate 'line', 4
-    if_null rx868_debug, debug_742
-    rx868_cur."!cursor_debug"("NEXT", "quote:sym<dblq>")
-  debug_742:
-  rx868_fail:
-    (rx868_rep, rx868_pos, $I10, $P10) = rx868_cur."!mark_fail"(0)
-    lt rx868_pos, -1, rx868_done
-    eq rx868_pos, -1, rx868_fail
-    jump $I10
-  rx868_done:
-    rx868_cur."!cursor_fail"()
-    if_null rx868_debug, debug_743
-    rx868_cur."!cursor_debug"("FAIL", "quote:sym<dblq>")
-  debug_743:
-    .return (rx868_cur)
-    .return ()
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<dblq>"  :subid("209_1282324002.40722") :method
-.annotate 'line', 4
-    new $P870, "ResizablePMCArray"
-    push $P870, "\""
-    .return ($P870)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "quote:sym<q>"  :subid("210_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 4
-    .local string rx873_tgt
-    .local int rx873_pos
-    .local int rx873_off
-    .local int rx873_eos
-    .local int rx873_rep
-    .local pmc rx873_cur
-    .local pmc rx873_debug
-    (rx873_cur, rx873_pos, rx873_tgt, $I10) = self."!cursor_start"()
-    getattribute rx873_debug, rx873_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx873_cur
-    .local pmc match
-    .lex "$/", match
-    length rx873_eos, rx873_tgt
-    gt rx873_pos, rx873_eos, rx873_done
-    set rx873_off, 0
-    lt rx873_pos, 2, rx873_start
-    sub rx873_off, rx873_pos, 1
-    substr rx873_tgt, rx873_tgt, rx873_off
-  rx873_start:
-    eq $I10, 1, rx873_restart
-    if_null rx873_debug, debug_744
-    rx873_cur."!cursor_debug"("START", "quote:sym<q>")
-  debug_744:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan877_done
-    goto rxscan877_scan
-  rxscan877_loop:
-    ($P10) = rx873_cur."from"()
-    inc $P10
-    set rx873_pos, $P10
-    ge rx873_pos, rx873_eos, rxscan877_done
-  rxscan877_scan:
-    set_addr $I10, rxscan877_loop
-    rx873_cur."!mark_push"(0, rx873_pos, $I10)
-  rxscan877_done:
-.annotate 'line', 420
-  # rx literal  "q"
-    add $I11, rx873_pos, 1
-    gt $I11, rx873_eos, rx873_fail
-    sub $I11, rx873_pos, rx873_off
-    ord $I11, rx873_tgt, $I11
-    ne $I11, 113, rx873_fail
-    add rx873_pos, 1
-  # rxanchor rwb
-    le rx873_pos, 0, rx873_fail
-    sub $I10, rx873_pos, rx873_off
-    is_cclass $I11, 8192, rx873_tgt, $I10
-    if $I11, rx873_fail
-    dec $I10
-    is_cclass $I11, 8192, rx873_tgt, $I10
-    unless $I11, rx873_fail
-  # rx enumcharlist negate=1 zerowidth
-    ge rx873_pos, rx873_eos, rx873_fail
-    sub $I10, rx873_pos, rx873_off
-    substr $S10, rx873_tgt, $I10, 1
-    index $I11, "(", $S10
-    ge $I11, 0, rx873_fail
-  # rx subrule "ws" subtype=method negate=
-    rx873_cur."!cursor_pos"(rx873_pos)
-    $P10 = rx873_cur."ws"()
-    unless $P10, rx873_fail
-    rx873_pos = $P10."pos"()
-  # rx subrule "quote_EXPR" subtype=capture negate=
-    rx873_cur."!cursor_pos"(rx873_pos)
-    $P10 = rx873_cur."quote_EXPR"(":q")
-    unless $P10, rx873_fail
-    rx873_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote_EXPR")
-    rx873_pos = $P10."pos"()
-  # rx pass
-    rx873_cur."!cursor_pass"(rx873_pos, "quote:sym<q>")
-    if_null rx873_debug, debug_745
-    rx873_cur."!cursor_debug"("PASS", "quote:sym<q>", " at pos=", rx873_pos)
-  debug_745:
-    .return (rx873_cur)
-  rx873_restart:
-.annotate 'line', 4
-    if_null rx873_debug, debug_746
-    rx873_cur."!cursor_debug"("NEXT", "quote:sym<q>")
-  debug_746:
-  rx873_fail:
-    (rx873_rep, rx873_pos, $I10, $P10) = rx873_cur."!mark_fail"(0)
-    lt rx873_pos, -1, rx873_done
-    eq rx873_pos, -1, rx873_fail
-    jump $I10
-  rx873_done:
-    rx873_cur."!cursor_fail"()
-    if_null rx873_debug, debug_747
-    rx873_cur."!cursor_debug"("FAIL", "quote:sym<q>")
-  debug_747:
-    .return (rx873_cur)
-    .return ()
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<q>"  :subid("211_1282324002.40722") :method
-.annotate 'line', 4
-    $P875 = self."!PREFIX__!subrule"("ws", "q")
-    new $P876, "ResizablePMCArray"
-    push $P876, $P875
-    .return ($P876)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "quote:sym<qq>"  :subid("212_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 4
-    .local string rx879_tgt
-    .local int rx879_pos
-    .local int rx879_off
-    .local int rx879_eos
-    .local int rx879_rep
-    .local pmc rx879_cur
-    .local pmc rx879_debug
-    (rx879_cur, rx879_pos, rx879_tgt, $I10) = self."!cursor_start"()
-    getattribute rx879_debug, rx879_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx879_cur
-    .local pmc match
-    .lex "$/", match
-    length rx879_eos, rx879_tgt
-    gt rx879_pos, rx879_eos, rx879_done
-    set rx879_off, 0
-    lt rx879_pos, 2, rx879_start
-    sub rx879_off, rx879_pos, 1
-    substr rx879_tgt, rx879_tgt, rx879_off
-  rx879_start:
-    eq $I10, 1, rx879_restart
-    if_null rx879_debug, debug_748
-    rx879_cur."!cursor_debug"("START", "quote:sym<qq>")
-  debug_748:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan883_done
-    goto rxscan883_scan
-  rxscan883_loop:
-    ($P10) = rx879_cur."from"()
-    inc $P10
-    set rx879_pos, $P10
-    ge rx879_pos, rx879_eos, rxscan883_done
-  rxscan883_scan:
-    set_addr $I10, rxscan883_loop
-    rx879_cur."!mark_push"(0, rx879_pos, $I10)
-  rxscan883_done:
-.annotate 'line', 421
-  # rx literal  "qq"
-    add $I11, rx879_pos, 2
-    gt $I11, rx879_eos, rx879_fail
-    sub $I11, rx879_pos, rx879_off
-    substr $S10, rx879_tgt, $I11, 2
-    ne $S10, "qq", rx879_fail
-    add rx879_pos, 2
-  # rxanchor rwb
-    le rx879_pos, 0, rx879_fail
-    sub $I10, rx879_pos, rx879_off
-    is_cclass $I11, 8192, rx879_tgt, $I10
-    if $I11, rx879_fail
-    dec $I10
-    is_cclass $I11, 8192, rx879_tgt, $I10
-    unless $I11, rx879_fail
-  # rx enumcharlist negate=1 zerowidth
-    ge rx879_pos, rx879_eos, rx879_fail
-    sub $I10, rx879_pos, rx879_off
-    substr $S10, rx879_tgt, $I10, 1
-    index $I11, "(", $S10
-    ge $I11, 0, rx879_fail
-  # rx subrule "ws" subtype=method negate=
-    rx879_cur."!cursor_pos"(rx879_pos)
-    $P10 = rx879_cur."ws"()
-    unless $P10, rx879_fail
-    rx879_pos = $P10."pos"()
-  # rx subrule "quote_EXPR" subtype=capture negate=
-    rx879_cur."!cursor_pos"(rx879_pos)
-    $P10 = rx879_cur."quote_EXPR"(":qq")
-    unless $P10, rx879_fail
-    rx879_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote_EXPR")
-    rx879_pos = $P10."pos"()
-  # rx pass
-    rx879_cur."!cursor_pass"(rx879_pos, "quote:sym<qq>")
-    if_null rx879_debug, debug_749
-    rx879_cur."!cursor_debug"("PASS", "quote:sym<qq>", " at pos=", rx879_pos)
-  debug_749:
-    .return (rx879_cur)
-  rx879_restart:
-.annotate 'line', 4
-    if_null rx879_debug, debug_750
-    rx879_cur."!cursor_debug"("NEXT", "quote:sym<qq>")
-  debug_750:
-  rx879_fail:
-    (rx879_rep, rx879_pos, $I10, $P10) = rx879_cur."!mark_fail"(0)
-    lt rx879_pos, -1, rx879_done
-    eq rx879_pos, -1, rx879_fail
-    jump $I10
-  rx879_done:
-    rx879_cur."!cursor_fail"()
-    if_null rx879_debug, debug_751
-    rx879_cur."!cursor_debug"("FAIL", "quote:sym<qq>")
-  debug_751:
-    .return (rx879_cur)
-    .return ()
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<qq>"  :subid("213_1282324002.40722") :method
-.annotate 'line', 4
-    $P881 = self."!PREFIX__!subrule"("ws", "qq")
-    new $P882, "ResizablePMCArray"
-    push $P882, $P881
-    .return ($P882)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "quote:sym<Q>"  :subid("214_1282324002.40722") :method :outer("11_1282324002.40722")
-.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
-    .local pmc rx885_debug
-    (rx885_cur, rx885_pos, rx885_tgt, $I10) = self."!cursor_start"()
-    getattribute rx885_debug, rx885_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx885_cur
-    .local pmc match
-    .lex "$/", match
-    length rx885_eos, rx885_tgt
-    gt rx885_pos, rx885_eos, rx885_done
-    set rx885_off, 0
-    lt rx885_pos, 2, rx885_start
-    sub rx885_off, rx885_pos, 1
-    substr rx885_tgt, rx885_tgt, rx885_off
-  rx885_start:
-    eq $I10, 1, rx885_restart
-    if_null rx885_debug, debug_752
-    rx885_cur."!cursor_debug"("START", "quote:sym<Q>")
-  debug_752:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan889_done
-    goto rxscan889_scan
-  rxscan889_loop:
-    ($P10) = rx885_cur."from"()
-    inc $P10
-    set rx885_pos, $P10
-    ge rx885_pos, rx885_eos, rxscan889_done
-  rxscan889_scan:
-    set_addr $I10, rxscan889_loop
-    rx885_cur."!mark_push"(0, rx885_pos, $I10)
-  rxscan889_done:
-.annotate 'line', 422
-  # rx literal  "Q"
-    add $I11, rx885_pos, 1
-    gt $I11, rx885_eos, rx885_fail
-    sub $I11, rx885_pos, rx885_off
-    ord $I11, rx885_tgt, $I11
-    ne $I11, 81, rx885_fail
-    add rx885_pos, 1
-  # rxanchor rwb
-    le rx885_pos, 0, rx885_fail
-    sub $I10, rx885_pos, rx885_off
-    is_cclass $I11, 8192, rx885_tgt, $I10
-    if $I11, rx885_fail
-    dec $I10
-    is_cclass $I11, 8192, rx885_tgt, $I10
-    unless $I11, rx885_fail
-  # rx enumcharlist negate=1 zerowidth
-    ge rx885_pos, rx885_eos, rx885_fail
-    sub $I10, rx885_pos, rx885_off
-    substr $S10, rx885_tgt, $I10, 1
-    index $I11, "(", $S10
-    ge $I11, 0, rx885_fail
-  # rx subrule "ws" subtype=method negate=
-    rx885_cur."!cursor_pos"(rx885_pos)
-    $P10 = rx885_cur."ws"()
-    unless $P10, rx885_fail
-    rx885_pos = $P10."pos"()
-  # rx subrule "quote_EXPR" subtype=capture negate=
-    rx885_cur."!cursor_pos"(rx885_pos)
-    $P10 = rx885_cur."quote_EXPR"()
-    unless $P10, rx885_fail
-    rx885_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote_EXPR")
-    rx885_pos = $P10."pos"()
-  # rx pass
-    rx885_cur."!cursor_pass"(rx885_pos, "quote:sym<Q>")
-    if_null rx885_debug, debug_753
-    rx885_cur."!cursor_debug"("PASS", "quote:sym<Q>", " at pos=", rx885_pos)
-  debug_753:
-    .return (rx885_cur)
-  rx885_restart:
-.annotate 'line', 4
-    if_null rx885_debug, debug_754
-    rx885_cur."!cursor_debug"("NEXT", "quote:sym<Q>")
-  debug_754:
-  rx885_fail:
-    (rx885_rep, rx885_pos, $I10, $P10) = rx885_cur."!mark_fail"(0)
-    lt rx885_pos, -1, rx885_done
-    eq rx885_pos, -1, rx885_fail
-    jump $I10
-  rx885_done:
-    rx885_cur."!cursor_fail"()
-    if_null rx885_debug, debug_755
-    rx885_cur."!cursor_debug"("FAIL", "quote:sym<Q>")
-  debug_755:
-    .return (rx885_cur)
-    .return ()
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<Q>"  :subid("215_1282324002.40722") :method
-.annotate 'line', 4
-    $P887 = self."!PREFIX__!subrule"("ws", "Q")
-    new $P888, "ResizablePMCArray"
-    push $P888, $P887
-    .return ($P888)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "quote:sym<Q:PIR>"  :subid("216_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 4
-    .local string rx891_tgt
-    .local int rx891_pos
-    .local int rx891_off
-    .local int rx891_eos
-    .local int rx891_rep
-    .local pmc rx891_cur
-    .local pmc rx891_debug
-    (rx891_cur, rx891_pos, rx891_tgt, $I10) = self."!cursor_start"()
-    getattribute rx891_debug, rx891_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx891_cur
-    .local pmc match
-    .lex "$/", match
-    length rx891_eos, rx891_tgt
-    gt rx891_pos, rx891_eos, rx891_done
-    set rx891_off, 0
-    lt rx891_pos, 2, rx891_start
-    sub rx891_off, rx891_pos, 1
-    substr rx891_tgt, rx891_tgt, rx891_off
-  rx891_start:
-    eq $I10, 1, rx891_restart
-    if_null rx891_debug, debug_756
-    rx891_cur."!cursor_debug"("START", "quote:sym<Q:PIR>")
-  debug_756:
+    .local string rx892_tgt
+    .local int rx892_pos
+    .local int rx892_off
+    .local int rx892_eos
+    .local int rx892_rep
+    .local pmc rx892_cur
+    .local pmc rx892_debug
+    (rx892_cur, rx892_pos, rx892_tgt, $I10) = self."!cursor_start"()
+    getattribute rx892_debug, rx892_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx892_cur
+    .local pmc match
+    .lex "$/", match
+    length rx892_eos, rx892_tgt
+    gt rx892_pos, rx892_eos, rx892_done
+    set rx892_off, 0
+    lt rx892_pos, 2, rx892_start
+    sub rx892_off, rx892_pos, 1
+    substr rx892_tgt, rx892_tgt, rx892_off
+  rx892_start:
+    eq $I10, 1, rx892_restart
+    if_null rx892_debug, debug_750
+    rx892_cur."!cursor_debug"("START", "quote:sym<apos>")
+  debug_750:
     $I10 = self.'from'()
     ne $I10, -1, rxscan895_done
     goto rxscan895_scan
   rxscan895_loop:
-    ($P10) = rx891_cur."from"()
+    ($P10) = rx892_cur."from"()
     inc $P10
-    set rx891_pos, $P10
-    ge rx891_pos, rx891_eos, rxscan895_done
+    set rx892_pos, $P10
+    ge rx892_pos, rx892_eos, rxscan895_done
   rxscan895_scan:
     set_addr $I10, rxscan895_loop
-    rx891_cur."!mark_push"(0, rx891_pos, $I10)
+    rx892_cur."!mark_push"(0, rx892_pos, $I10)
   rxscan895_done:
-.annotate 'line', 423
-  # rx literal  "Q:PIR"
-    add $I11, rx891_pos, 5
-    gt $I11, rx891_eos, rx891_fail
-    sub $I11, rx891_pos, rx891_off
-    substr $S10, rx891_tgt, $I11, 5
-    ne $S10, "Q:PIR", rx891_fail
-    add rx891_pos, 5
-  # rx subrule "ws" subtype=method negate=
-    rx891_cur."!cursor_pos"(rx891_pos)
-    $P10 = rx891_cur."ws"()
-    unless $P10, rx891_fail
-    rx891_pos = $P10."pos"()
+.annotate 'line', 425
+  # rx enumcharlist negate=0 zerowidth
+    sub $I10, rx892_pos, rx892_off
+    substr $S10, rx892_tgt, $I10, 1
+    index $I11, "'", $S10
+    lt $I11, 0, rx892_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx891_cur."!cursor_pos"(rx891_pos)
-    $P10 = rx891_cur."quote_EXPR"()
-    unless $P10, rx891_fail
-    rx891_cur."!mark_push"(0, -1, 0, $P10)
+    rx892_cur."!cursor_pos"(rx892_pos)
+    $P10 = rx892_cur."quote_EXPR"(":q")
+    unless $P10, rx892_fail
+    rx892_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx891_pos = $P10."pos"()
+    rx892_pos = $P10."pos"()
   # rx pass
-    rx891_cur."!cursor_pass"(rx891_pos, "quote:sym<Q:PIR>")
-    if_null rx891_debug, debug_757
-    rx891_cur."!cursor_debug"("PASS", "quote:sym<Q:PIR>", " at pos=", rx891_pos)
-  debug_757:
-    .return (rx891_cur)
-  rx891_restart:
+    rx892_cur."!cursor_pass"(rx892_pos, "quote:sym<apos>")
+    if_null rx892_debug, debug_751
+    rx892_cur."!cursor_debug"("PASS", "quote:sym<apos>", " at pos=", rx892_pos)
+  debug_751:
+    .return (rx892_cur)
+  rx892_restart:
 .annotate 'line', 4
-    if_null rx891_debug, debug_758
-    rx891_cur."!cursor_debug"("NEXT", "quote:sym<Q:PIR>")
-  debug_758:
-  rx891_fail:
-    (rx891_rep, rx891_pos, $I10, $P10) = rx891_cur."!mark_fail"(0)
-    lt rx891_pos, -1, rx891_done
-    eq rx891_pos, -1, rx891_fail
-    jump $I10
-  rx891_done:
-    rx891_cur."!cursor_fail"()
-    if_null rx891_debug, debug_759
-    rx891_cur."!cursor_debug"("FAIL", "quote:sym<Q:PIR>")
-  debug_759:
-    .return (rx891_cur)
+    if_null rx892_debug, debug_752
+    rx892_cur."!cursor_debug"("NEXT", "quote:sym<apos>")
+  debug_752:
+  rx892_fail:
+    (rx892_rep, rx892_pos, $I10, $P10) = rx892_cur."!mark_fail"(0)
+    lt rx892_pos, -1, rx892_done
+    eq rx892_pos, -1, rx892_fail
+    jump $I10
+  rx892_done:
+    rx892_cur."!cursor_fail"()
+    if_null rx892_debug, debug_753
+    rx892_cur."!cursor_debug"("FAIL", "quote:sym<apos>")
+  debug_753:
+    .return (rx892_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<Q:PIR>"  :subid("217_1282324002.40722") :method
+.sub "!PREFIX__quote:sym<apos>"  :subid("213_1284728478.15265") :method
 .annotate 'line', 4
-    $P893 = self."!PREFIX__!subrule"("ws", "Q:PIR")
     new $P894, "ResizablePMCArray"
-    push $P894, $P893
+    push $P894, "'"
     .return ($P894)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym</ />"  :subid("218_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "quote:sym<dblq>"  :subid("214_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx897_tgt
     .local int rx897_pos
@@ -12365,67 +12152,45 @@
     substr rx897_tgt, rx897_tgt, rx897_off
   rx897_start:
     eq $I10, 1, rx897_restart
-    if_null rx897_debug, debug_760
-    rx897_cur."!cursor_debug"("START", "quote:sym</ />")
-  debug_760:
+    if_null rx897_debug, debug_754
+    rx897_cur."!cursor_debug"("START", "quote:sym<dblq>")
+  debug_754:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan901_done
-    goto rxscan901_scan
-  rxscan901_loop:
+    ne $I10, -1, rxscan900_done
+    goto rxscan900_scan
+  rxscan900_loop:
     ($P10) = rx897_cur."from"()
     inc $P10
     set rx897_pos, $P10
-    ge rx897_pos, rx897_eos, rxscan901_done
-  rxscan901_scan:
-    set_addr $I10, rxscan901_loop
+    ge rx897_pos, rx897_eos, rxscan900_done
+  rxscan900_scan:
+    set_addr $I10, rxscan900_loop
     rx897_cur."!mark_push"(0, rx897_pos, $I10)
-  rxscan901_done:
-.annotate 'line', 425
-  # rx literal  "/"
-    add $I11, rx897_pos, 1
-    gt $I11, rx897_eos, rx897_fail
-    sub $I11, rx897_pos, rx897_off
-    ord $I11, rx897_tgt, $I11
-    ne $I11, 47, rx897_fail
-    add rx897_pos, 1
+  rxscan900_done:
 .annotate 'line', 426
-  # rx subrule "newpad" subtype=method negate=
-    rx897_cur."!cursor_pos"(rx897_pos)
-    $P10 = rx897_cur."newpad"()
-    unless $P10, rx897_fail
-    rx897_pos = $P10."pos"()
-.annotate 'line', 427
-  # rx reduce name="quote:sym</ />" key="open"
-    rx897_cur."!cursor_pos"(rx897_pos)
-    rx897_cur."!reduce"("quote:sym</ />", "open")
-.annotate 'line', 428
-  # rx subrule "LANG" subtype=capture negate=
+  # rx enumcharlist negate=0 zerowidth
+    sub $I10, rx897_pos, rx897_off
+    substr $S10, rx897_tgt, $I10, 1
+    index $I11, "\"", $S10
+    lt $I11, 0, rx897_fail
+  # rx subrule "quote_EXPR" subtype=capture negate=
     rx897_cur."!cursor_pos"(rx897_pos)
-    $P10 = rx897_cur."LANG"("Regex", "nibbler")
+    $P10 = rx897_cur."quote_EXPR"(":qq")
     unless $P10, rx897_fail
     rx897_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("p6regex")
+    $P10."!cursor_names"("quote_EXPR")
     rx897_pos = $P10."pos"()
-.annotate 'line', 429
-  # rx literal  "/"
-    add $I11, rx897_pos, 1
-    gt $I11, rx897_eos, rx897_fail
-    sub $I11, rx897_pos, rx897_off
-    ord $I11, rx897_tgt, $I11
-    ne $I11, 47, rx897_fail
-    add rx897_pos, 1
-.annotate 'line', 424
   # rx pass
-    rx897_cur."!cursor_pass"(rx897_pos, "quote:sym</ />")
-    if_null rx897_debug, debug_761
-    rx897_cur."!cursor_debug"("PASS", "quote:sym</ />", " at pos=", rx897_pos)
-  debug_761:
+    rx897_cur."!cursor_pass"(rx897_pos, "quote:sym<dblq>")
+    if_null rx897_debug, debug_755
+    rx897_cur."!cursor_debug"("PASS", "quote:sym<dblq>", " at pos=", rx897_pos)
+  debug_755:
     .return (rx897_cur)
   rx897_restart:
 .annotate 'line', 4
-    if_null rx897_debug, debug_762
-    rx897_cur."!cursor_debug"("NEXT", "quote:sym</ />")
-  debug_762:
+    if_null rx897_debug, debug_756
+    rx897_cur."!cursor_debug"("NEXT", "quote:sym<dblq>")
+  debug_756:
   rx897_fail:
     (rx897_rep, rx897_pos, $I10, $P10) = rx897_cur."!mark_fail"(0)
     lt rx897_pos, -1, rx897_done
@@ -12433,117 +12198,132 @@
     jump $I10
   rx897_done:
     rx897_cur."!cursor_fail"()
-    if_null rx897_debug, debug_763
-    rx897_cur."!cursor_debug"("FAIL", "quote:sym</ />")
-  debug_763:
+    if_null rx897_debug, debug_757
+    rx897_cur."!cursor_debug"("FAIL", "quote:sym<dblq>")
+  debug_757:
     .return (rx897_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym</ />"  :subid("219_1282324002.40722") :method
+.sub "!PREFIX__quote:sym<dblq>"  :subid("215_1284728478.15265") :method
 .annotate 'line', 4
-    $P899 = self."!PREFIX__!subrule"("newpad", "/")
-    new $P900, "ResizablePMCArray"
-    push $P900, $P899
-    .return ($P900)
+    new $P899, "ResizablePMCArray"
+    push $P899, "\""
+    .return ($P899)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote_escape:sym<$>"  :subid("220_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 4
-    .local string rx903_tgt
-    .local int rx903_pos
-    .local int rx903_off
-    .local int rx903_eos
-    .local int rx903_rep
-    .local pmc rx903_cur
-    .local pmc rx903_debug
-    (rx903_cur, rx903_pos, rx903_tgt, $I10) = self."!cursor_start"()
-    getattribute rx903_debug, rx903_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx903_cur
-    .local pmc match
-    .lex "$/", match
-    length rx903_eos, rx903_tgt
-    gt rx903_pos, rx903_eos, rx903_done
-    set rx903_off, 0
-    lt rx903_pos, 2, rx903_start
-    sub rx903_off, rx903_pos, 1
-    substr rx903_tgt, rx903_tgt, rx903_off
-  rx903_start:
-    eq $I10, 1, rx903_restart
-    if_null rx903_debug, debug_764
-    rx903_cur."!cursor_debug"("START", "quote_escape:sym<$>")
-  debug_764:
+.sub "quote:sym<q>"  :subid("216_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 4
+    .local string rx902_tgt
+    .local int rx902_pos
+    .local int rx902_off
+    .local int rx902_eos
+    .local int rx902_rep
+    .local pmc rx902_cur
+    .local pmc rx902_debug
+    (rx902_cur, rx902_pos, rx902_tgt, $I10) = self."!cursor_start"()
+    getattribute rx902_debug, rx902_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx902_cur
+    .local pmc match
+    .lex "$/", match
+    length rx902_eos, rx902_tgt
+    gt rx902_pos, rx902_eos, rx902_done
+    set rx902_off, 0
+    lt rx902_pos, 2, rx902_start
+    sub rx902_off, rx902_pos, 1
+    substr rx902_tgt, rx902_tgt, rx902_off
+  rx902_start:
+    eq $I10, 1, rx902_restart
+    if_null rx902_debug, debug_758
+    rx902_cur."!cursor_debug"("START", "quote:sym<q>")
+  debug_758:
     $I10 = self.'from'()
     ne $I10, -1, rxscan906_done
     goto rxscan906_scan
   rxscan906_loop:
-    ($P10) = rx903_cur."from"()
+    ($P10) = rx902_cur."from"()
     inc $P10
-    set rx903_pos, $P10
-    ge rx903_pos, rx903_eos, rxscan906_done
+    set rx902_pos, $P10
+    ge rx902_pos, rx902_eos, rxscan906_done
   rxscan906_scan:
     set_addr $I10, rxscan906_loop
-    rx903_cur."!mark_push"(0, rx903_pos, $I10)
+    rx902_cur."!mark_push"(0, rx902_pos, $I10)
   rxscan906_done:
-.annotate 'line', 432
-  # rx enumcharlist negate=0 zerowidth
-    ge rx903_pos, rx903_eos, rx903_fail
-    sub $I10, rx903_pos, rx903_off
-    substr $S10, rx903_tgt, $I10, 1
-    index $I11, "$", $S10
-    lt $I11, 0, rx903_fail
-  # rx subrule "quotemod_check" subtype=zerowidth negate=
-    rx903_cur."!cursor_pos"(rx903_pos)
-    $P10 = rx903_cur."quotemod_check"("s")
-    unless $P10, rx903_fail
-  # rx subrule "variable" subtype=capture negate=
-    rx903_cur."!cursor_pos"(rx903_pos)
-    $P10 = rx903_cur."variable"()
-    unless $P10, rx903_fail
-    rx903_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("variable")
-    rx903_pos = $P10."pos"()
+.annotate 'line', 427
+  # rx literal  "q"
+    add $I11, rx902_pos, 1
+    gt $I11, rx902_eos, rx902_fail
+    sub $I11, rx902_pos, rx902_off
+    ord $I11, rx902_tgt, $I11
+    ne $I11, 113, rx902_fail
+    add rx902_pos, 1
+  # rxanchor rwb
+    le rx902_pos, 0, rx902_fail
+    sub $I10, rx902_pos, rx902_off
+    is_cclass $I11, 8192, rx902_tgt, $I10
+    if $I11, rx902_fail
+    dec $I10
+    is_cclass $I11, 8192, rx902_tgt, $I10
+    unless $I11, rx902_fail
+  # rx enumcharlist negate=1 zerowidth
+    sub $I10, rx902_pos, rx902_off
+    substr $S10, rx902_tgt, $I10, 1
+    index $I11, "(", $S10
+    ge $I11, 0, rx902_fail
+  # rx subrule "ws" subtype=method negate=
+    rx902_cur."!cursor_pos"(rx902_pos)
+    $P10 = rx902_cur."ws"()
+    unless $P10, rx902_fail
+    rx902_pos = $P10."pos"()
+  # rx subrule "quote_EXPR" subtype=capture negate=
+    rx902_cur."!cursor_pos"(rx902_pos)
+    $P10 = rx902_cur."quote_EXPR"(":q")
+    unless $P10, rx902_fail
+    rx902_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quote_EXPR")
+    rx902_pos = $P10."pos"()
   # rx pass
-    rx903_cur."!cursor_pass"(rx903_pos, "quote_escape:sym<$>")
-    if_null rx903_debug, debug_765
-    rx903_cur."!cursor_debug"("PASS", "quote_escape:sym<$>", " at pos=", rx903_pos)
-  debug_765:
-    .return (rx903_cur)
-  rx903_restart:
+    rx902_cur."!cursor_pass"(rx902_pos, "quote:sym<q>")
+    if_null rx902_debug, debug_759
+    rx902_cur."!cursor_debug"("PASS", "quote:sym<q>", " at pos=", rx902_pos)
+  debug_759:
+    .return (rx902_cur)
+  rx902_restart:
 .annotate 'line', 4
-    if_null rx903_debug, debug_766
-    rx903_cur."!cursor_debug"("NEXT", "quote_escape:sym<$>")
-  debug_766:
-  rx903_fail:
-    (rx903_rep, rx903_pos, $I10, $P10) = rx903_cur."!mark_fail"(0)
-    lt rx903_pos, -1, rx903_done
-    eq rx903_pos, -1, rx903_fail
-    jump $I10
-  rx903_done:
-    rx903_cur."!cursor_fail"()
-    if_null rx903_debug, debug_767
-    rx903_cur."!cursor_debug"("FAIL", "quote_escape:sym<$>")
-  debug_767:
-    .return (rx903_cur)
+    if_null rx902_debug, debug_760
+    rx902_cur."!cursor_debug"("NEXT", "quote:sym<q>")
+  debug_760:
+  rx902_fail:
+    (rx902_rep, rx902_pos, $I10, $P10) = rx902_cur."!mark_fail"(0)
+    lt rx902_pos, -1, rx902_done
+    eq rx902_pos, -1, rx902_fail
+    jump $I10
+  rx902_done:
+    rx902_cur."!cursor_fail"()
+    if_null rx902_debug, debug_761
+    rx902_cur."!cursor_debug"("FAIL", "quote:sym<q>")
+  debug_761:
+    .return (rx902_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<$>"  :subid("221_1282324002.40722") :method
+.sub "!PREFIX__quote:sym<q>"  :subid("217_1284728478.15265") :method
 .annotate 'line', 4
+    $P904 = self."!PREFIX__!subrule"("ws", "q")
     new $P905, "ResizablePMCArray"
-    push $P905, "$"
+    push $P905, $P904
     .return ($P905)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote_escape:sym<{ }>"  :subid("222_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "quote:sym<qq>"  :subid("218_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx908_tgt
     .local int rx908_pos
@@ -12565,50 +12345,65 @@
     substr rx908_tgt, rx908_tgt, rx908_off
   rx908_start:
     eq $I10, 1, rx908_restart
-    if_null rx908_debug, debug_768
-    rx908_cur."!cursor_debug"("START", "quote_escape:sym<{ }>")
-  debug_768:
+    if_null rx908_debug, debug_762
+    rx908_cur."!cursor_debug"("START", "quote:sym<qq>")
+  debug_762:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan911_done
-    goto rxscan911_scan
-  rxscan911_loop:
+    ne $I10, -1, rxscan912_done
+    goto rxscan912_scan
+  rxscan912_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
+    ge rx908_pos, rx908_eos, rxscan912_done
+  rxscan912_scan:
+    set_addr $I10, rxscan912_loop
     rx908_cur."!mark_push"(0, rx908_pos, $I10)
-  rxscan911_done:
-.annotate 'line', 433
-  # rx enumcharlist negate=0 zerowidth
-    ge rx908_pos, rx908_eos, rx908_fail
+  rxscan912_done:
+.annotate 'line', 428
+  # rx literal  "qq"
+    add $I11, rx908_pos, 2
+    gt $I11, rx908_eos, rx908_fail
+    sub $I11, rx908_pos, rx908_off
+    substr $S10, rx908_tgt, $I11, 2
+    ne $S10, "qq", rx908_fail
+    add rx908_pos, 2
+  # rxanchor rwb
+    le rx908_pos, 0, rx908_fail
+    sub $I10, rx908_pos, rx908_off
+    is_cclass $I11, 8192, rx908_tgt, $I10
+    if $I11, rx908_fail
+    dec $I10
+    is_cclass $I11, 8192, rx908_tgt, $I10
+    unless $I11, rx908_fail
+  # rx enumcharlist negate=1 zerowidth
     sub $I10, rx908_pos, rx908_off
     substr $S10, rx908_tgt, $I10, 1
-    index $I11, "{", $S10
-    lt $I11, 0, rx908_fail
-  # rx subrule "quotemod_check" subtype=zerowidth negate=
+    index $I11, "(", $S10
+    ge $I11, 0, rx908_fail
+  # rx subrule "ws" subtype=method negate=
     rx908_cur."!cursor_pos"(rx908_pos)
-    $P10 = rx908_cur."quotemod_check"("c")
+    $P10 = rx908_cur."ws"()
     unless $P10, rx908_fail
-  # rx subrule "block" subtype=capture negate=
+    rx908_pos = $P10."pos"()
+  # rx subrule "quote_EXPR" subtype=capture negate=
     rx908_cur."!cursor_pos"(rx908_pos)
-    $P10 = rx908_cur."block"()
+    $P10 = rx908_cur."quote_EXPR"(":qq")
     unless $P10, rx908_fail
     rx908_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("block")
+    $P10."!cursor_names"("quote_EXPR")
     rx908_pos = $P10."pos"()
   # rx pass
-    rx908_cur."!cursor_pass"(rx908_pos, "quote_escape:sym<{ }>")
-    if_null rx908_debug, debug_769
-    rx908_cur."!cursor_debug"("PASS", "quote_escape:sym<{ }>", " at pos=", rx908_pos)
-  debug_769:
+    rx908_cur."!cursor_pass"(rx908_pos, "quote:sym<qq>")
+    if_null rx908_debug, debug_763
+    rx908_cur."!cursor_debug"("PASS", "quote:sym<qq>", " at pos=", rx908_pos)
+  debug_763:
     .return (rx908_cur)
   rx908_restart:
 .annotate 'line', 4
-    if_null rx908_debug, debug_770
-    rx908_cur."!cursor_debug"("NEXT", "quote_escape:sym<{ }>")
-  debug_770:
+    if_null rx908_debug, debug_764
+    rx908_cur."!cursor_debug"("NEXT", "quote:sym<qq>")
+  debug_764:
   rx908_fail:
     (rx908_rep, rx908_pos, $I10, $P10) = rx908_cur."!mark_fail"(0)
     lt rx908_pos, -1, rx908_done
@@ -12616,225 +12411,227 @@
     jump $I10
   rx908_done:
     rx908_cur."!cursor_fail"()
-    if_null rx908_debug, debug_771
-    rx908_cur."!cursor_debug"("FAIL", "quote_escape:sym<{ }>")
-  debug_771:
+    if_null rx908_debug, debug_765
+    rx908_cur."!cursor_debug"("FAIL", "quote:sym<qq>")
+  debug_765:
     .return (rx908_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<{ }>"  :subid("223_1282324002.40722") :method
+.sub "!PREFIX__quote:sym<qq>"  :subid("219_1284728478.15265") :method
 .annotate 'line', 4
-    new $P910, "ResizablePMCArray"
-    push $P910, "{"
-    .return ($P910)
+    $P910 = self."!PREFIX__!subrule"("ws", "qq")
+    new $P911, "ResizablePMCArray"
+    push $P911, $P910
+    .return ($P911)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote_escape:sym<esc>"  :subid("224_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 4
-    .local string rx913_tgt
-    .local int rx913_pos
-    .local int rx913_off
-    .local int rx913_eos
-    .local int rx913_rep
-    .local pmc rx913_cur
-    .local pmc rx913_debug
-    (rx913_cur, rx913_pos, rx913_tgt, $I10) = self."!cursor_start"()
-    getattribute rx913_debug, rx913_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx913_cur
-    .local pmc match
-    .lex "$/", match
-    length rx913_eos, rx913_tgt
-    gt rx913_pos, rx913_eos, rx913_done
-    set rx913_off, 0
-    lt rx913_pos, 2, rx913_start
-    sub rx913_off, rx913_pos, 1
-    substr rx913_tgt, rx913_tgt, rx913_off
-  rx913_start:
-    eq $I10, 1, rx913_restart
-    if_null rx913_debug, debug_772
-    rx913_cur."!cursor_debug"("START", "quote_escape:sym<esc>")
-  debug_772:
+.sub "quote:sym<Q>"  :subid("220_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 4
+    .local string rx914_tgt
+    .local int rx914_pos
+    .local int rx914_off
+    .local int rx914_eos
+    .local int rx914_rep
+    .local pmc rx914_cur
+    .local pmc rx914_debug
+    (rx914_cur, rx914_pos, rx914_tgt, $I10) = self."!cursor_start"()
+    getattribute rx914_debug, rx914_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx914_cur
+    .local pmc match
+    .lex "$/", match
+    length rx914_eos, rx914_tgt
+    gt rx914_pos, rx914_eos, rx914_done
+    set rx914_off, 0
+    lt rx914_pos, 2, rx914_start
+    sub rx914_off, rx914_pos, 1
+    substr rx914_tgt, rx914_tgt, rx914_off
+  rx914_start:
+    eq $I10, 1, rx914_restart
+    if_null rx914_debug, debug_766
+    rx914_cur."!cursor_debug"("START", "quote:sym<Q>")
+  debug_766:
     $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', 434
-  # rx literal  "\\e"
-    add $I11, rx913_pos, 2
-    gt $I11, rx913_eos, rx913_fail
-    sub $I11, rx913_pos, rx913_off
-    substr $S10, rx913_tgt, $I11, 2
-    ne $S10, "\\e", rx913_fail
-    add rx913_pos, 2
-  # rx subrule "quotemod_check" subtype=zerowidth negate=
-    rx913_cur."!cursor_pos"(rx913_pos)
-    $P10 = rx913_cur."quotemod_check"("b")
-    unless $P10, rx913_fail
-  # rx pass
-    rx913_cur."!cursor_pass"(rx913_pos, "quote_escape:sym<esc>")
-    if_null rx913_debug, debug_773
-    rx913_cur."!cursor_debug"("PASS", "quote_escape:sym<esc>", " at pos=", rx913_pos)
-  debug_773:
-    .return (rx913_cur)
-  rx913_restart:
+    ne $I10, -1, rxscan918_done
+    goto rxscan918_scan
+  rxscan918_loop:
+    ($P10) = rx914_cur."from"()
+    inc $P10
+    set rx914_pos, $P10
+    ge rx914_pos, rx914_eos, rxscan918_done
+  rxscan918_scan:
+    set_addr $I10, rxscan918_loop
+    rx914_cur."!mark_push"(0, rx914_pos, $I10)
+  rxscan918_done:
+.annotate 'line', 429
+  # rx literal  "Q"
+    add $I11, rx914_pos, 1
+    gt $I11, rx914_eos, rx914_fail
+    sub $I11, rx914_pos, rx914_off
+    ord $I11, rx914_tgt, $I11
+    ne $I11, 81, rx914_fail
+    add rx914_pos, 1
+  # rxanchor rwb
+    le rx914_pos, 0, rx914_fail
+    sub $I10, rx914_pos, rx914_off
+    is_cclass $I11, 8192, rx914_tgt, $I10
+    if $I11, rx914_fail
+    dec $I10
+    is_cclass $I11, 8192, rx914_tgt, $I10
+    unless $I11, rx914_fail
+  # rx enumcharlist negate=1 zerowidth
+    sub $I10, rx914_pos, rx914_off
+    substr $S10, rx914_tgt, $I10, 1
+    index $I11, "(", $S10
+    ge $I11, 0, rx914_fail
+  # rx subrule "ws" subtype=method negate=
+    rx914_cur."!cursor_pos"(rx914_pos)
+    $P10 = rx914_cur."ws"()
+    unless $P10, rx914_fail
+    rx914_pos = $P10."pos"()
+  # rx subrule "quote_EXPR" subtype=capture negate=
+    rx914_cur."!cursor_pos"(rx914_pos)
+    $P10 = rx914_cur."quote_EXPR"()
+    unless $P10, rx914_fail
+    rx914_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quote_EXPR")
+    rx914_pos = $P10."pos"()
+  # rx pass
+    rx914_cur."!cursor_pass"(rx914_pos, "quote:sym<Q>")
+    if_null rx914_debug, debug_767
+    rx914_cur."!cursor_debug"("PASS", "quote:sym<Q>", " at pos=", rx914_pos)
+  debug_767:
+    .return (rx914_cur)
+  rx914_restart:
 .annotate 'line', 4
-    if_null rx913_debug, debug_774
-    rx913_cur."!cursor_debug"("NEXT", "quote_escape:sym<esc>")
-  debug_774:
-  rx913_fail:
-    (rx913_rep, rx913_pos, $I10, $P10) = rx913_cur."!mark_fail"(0)
-    lt rx913_pos, -1, rx913_done
-    eq rx913_pos, -1, rx913_fail
-    jump $I10
-  rx913_done:
-    rx913_cur."!cursor_fail"()
-    if_null rx913_debug, debug_775
-    rx913_cur."!cursor_debug"("FAIL", "quote_escape:sym<esc>")
-  debug_775:
-    .return (rx913_cur)
+    if_null rx914_debug, debug_768
+    rx914_cur."!cursor_debug"("NEXT", "quote:sym<Q>")
+  debug_768:
+  rx914_fail:
+    (rx914_rep, rx914_pos, $I10, $P10) = rx914_cur."!mark_fail"(0)
+    lt rx914_pos, -1, rx914_done
+    eq rx914_pos, -1, rx914_fail
+    jump $I10
+  rx914_done:
+    rx914_cur."!cursor_fail"()
+    if_null rx914_debug, debug_769
+    rx914_cur."!cursor_debug"("FAIL", "quote:sym<Q>")
+  debug_769:
+    .return (rx914_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<esc>"  :subid("225_1282324002.40722") :method
+.sub "!PREFIX__quote:sym<Q>"  :subid("221_1284728478.15265") :method
 .annotate 'line', 4
-    new $P915, "ResizablePMCArray"
-    push $P915, "\\e"
-    .return ($P915)
+    $P916 = self."!PREFIX__!subrule"("ws", "Q")
+    new $P917, "ResizablePMCArray"
+    push $P917, $P916
+    .return ($P917)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<( )>"  :subid("226_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "quote:sym<Q:PIR>"  :subid("222_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .local string rx918_tgt
-    .local int rx918_pos
-    .local int rx918_off
-    .local int rx918_eos
-    .local int rx918_rep
-    .local pmc rx918_cur
-    .local pmc rx918_debug
-    (rx918_cur, rx918_pos, rx918_tgt, $I10) = self."!cursor_start"()
-    rx918_cur."!cursor_caparray"("EXPR")
-    getattribute rx918_debug, rx918_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx918_cur
+    .local string rx920_tgt
+    .local int rx920_pos
+    .local int rx920_off
+    .local int rx920_eos
+    .local int rx920_rep
+    .local pmc rx920_cur
+    .local pmc rx920_debug
+    (rx920_cur, rx920_pos, rx920_tgt, $I10) = self."!cursor_start"()
+    getattribute rx920_debug, rx920_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx920_cur
     .local pmc match
     .lex "$/", match
-    length rx918_eos, rx918_tgt
-    gt rx918_pos, rx918_eos, rx918_done
-    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:
-    eq $I10, 1, rx918_restart
-    if_null rx918_debug, debug_776
-    rx918_cur."!cursor_debug"("START", "circumfix:sym<( )>")
-  debug_776:
+    length rx920_eos, rx920_tgt
+    gt rx920_pos, rx920_eos, rx920_done
+    set rx920_off, 0
+    lt rx920_pos, 2, rx920_start
+    sub rx920_off, rx920_pos, 1
+    substr rx920_tgt, rx920_tgt, rx920_off
+  rx920_start:
+    eq $I10, 1, rx920_restart
+    if_null rx920_debug, debug_770
+    rx920_cur."!cursor_debug"("START", "quote:sym<Q:PIR>")
+  debug_770:
     $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', 436
-  # rx literal  "("
-    add $I11, rx918_pos, 1
-    gt $I11, rx918_eos, rx918_fail
-    sub $I11, rx918_pos, rx918_off
-    ord $I11, rx918_tgt, $I11
-    ne $I11, 40, rx918_fail
-    add rx918_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx918_cur."!cursor_pos"(rx918_pos)
-    $P10 = rx918_cur."ws"()
-    unless $P10, rx918_fail
-    rx918_pos = $P10."pos"()
-  # rx rxquantr923 ** 0..1
-    set_addr $I10, rxquantr923_done
-    rx918_cur."!mark_push"(0, rx918_pos, $I10)
-  rxquantr923_loop:
-  # rx subrule "EXPR" subtype=capture negate=
-    rx918_cur."!cursor_pos"(rx918_pos)
-    $P10 = rx918_cur."EXPR"()
-    unless $P10, rx918_fail
-    goto rxsubrule924_pass
-  rxsubrule924_back:
-    $P10 = $P10."!cursor_next"()
-    unless $P10, rx918_fail
-  rxsubrule924_pass:
-    set_addr $I10, rxsubrule924_back
-    rx918_cur."!mark_push"(0, rx918_pos, $I10, $P10)
-    $P10."!cursor_names"("EXPR")
-    rx918_pos = $P10."pos"()
-    set_addr $I10, rxquantr923_done
-    (rx918_rep) = rx918_cur."!mark_commit"($I10)
-  rxquantr923_done:
-  # rx literal  ")"
-    add $I11, rx918_pos, 1
-    gt $I11, rx918_eos, rx918_fail
-    sub $I11, rx918_pos, rx918_off
-    ord $I11, rx918_tgt, $I11
-    ne $I11, 41, rx918_fail
-    add rx918_pos, 1
-  # rx pass
-    rx918_cur."!cursor_pass"(rx918_pos, "circumfix:sym<( )>")
-    if_null rx918_debug, debug_777
-    rx918_cur."!cursor_debug"("PASS", "circumfix:sym<( )>", " at pos=", rx918_pos)
-  debug_777:
-    .return (rx918_cur)
-  rx918_restart:
+    ne $I10, -1, rxscan924_done
+    goto rxscan924_scan
+  rxscan924_loop:
+    ($P10) = rx920_cur."from"()
+    inc $P10
+    set rx920_pos, $P10
+    ge rx920_pos, rx920_eos, rxscan924_done
+  rxscan924_scan:
+    set_addr $I10, rxscan924_loop
+    rx920_cur."!mark_push"(0, rx920_pos, $I10)
+  rxscan924_done:
+.annotate 'line', 430
+  # rx literal  "Q:PIR"
+    add $I11, rx920_pos, 5
+    gt $I11, rx920_eos, rx920_fail
+    sub $I11, rx920_pos, rx920_off
+    substr $S10, rx920_tgt, $I11, 5
+    ne $S10, "Q:PIR", rx920_fail
+    add rx920_pos, 5
+  # rx subrule "ws" subtype=method negate=
+    rx920_cur."!cursor_pos"(rx920_pos)
+    $P10 = rx920_cur."ws"()
+    unless $P10, rx920_fail
+    rx920_pos = $P10."pos"()
+  # rx subrule "quote_EXPR" subtype=capture negate=
+    rx920_cur."!cursor_pos"(rx920_pos)
+    $P10 = rx920_cur."quote_EXPR"()
+    unless $P10, rx920_fail
+    rx920_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quote_EXPR")
+    rx920_pos = $P10."pos"()
+  # rx pass
+    rx920_cur."!cursor_pass"(rx920_pos, "quote:sym<Q:PIR>")
+    if_null rx920_debug, debug_771
+    rx920_cur."!cursor_debug"("PASS", "quote:sym<Q:PIR>", " at pos=", rx920_pos)
+  debug_771:
+    .return (rx920_cur)
+  rx920_restart:
 .annotate 'line', 4
-    if_null rx918_debug, debug_778
-    rx918_cur."!cursor_debug"("NEXT", "circumfix:sym<( )>")
-  debug_778:
-  rx918_fail:
-    (rx918_rep, rx918_pos, $I10, $P10) = rx918_cur."!mark_fail"(0)
-    lt rx918_pos, -1, rx918_done
-    eq rx918_pos, -1, rx918_fail
-    jump $I10
-  rx918_done:
-    rx918_cur."!cursor_fail"()
-    if_null rx918_debug, debug_779
-    rx918_cur."!cursor_debug"("FAIL", "circumfix:sym<( )>")
-  debug_779:
-    .return (rx918_cur)
+    if_null rx920_debug, debug_772
+    rx920_cur."!cursor_debug"("NEXT", "quote:sym<Q:PIR>")
+  debug_772:
+  rx920_fail:
+    (rx920_rep, rx920_pos, $I10, $P10) = rx920_cur."!mark_fail"(0)
+    lt rx920_pos, -1, rx920_done
+    eq rx920_pos, -1, rx920_fail
+    jump $I10
+  rx920_done:
+    rx920_cur."!cursor_fail"()
+    if_null rx920_debug, debug_773
+    rx920_cur."!cursor_debug"("FAIL", "quote:sym<Q:PIR>")
+  debug_773:
+    .return (rx920_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<( )>"  :subid("227_1282324002.40722") :method
+.sub "!PREFIX__quote:sym<Q:PIR>"  :subid("223_1284728478.15265") :method
 .annotate 'line', 4
-    $P920 = self."!PREFIX__!subrule"("ws", "(")
-    new $P921, "ResizablePMCArray"
-    push $P921, $P920
-    .return ($P921)
+    $P922 = self."!PREFIX__!subrule"("ws", "Q:PIR")
+    new $P923, "ResizablePMCArray"
+    push $P923, $P922
+    .return ($P923)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<[ ]>"  :subid("228_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "quote:sym</ />"  :subid("224_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
     .local string rx926_tgt
     .local int rx926_pos
@@ -12844,7 +12641,6 @@
     .local pmc rx926_cur
     .local pmc rx926_debug
     (rx926_cur, rx926_pos, rx926_tgt, $I10) = self."!cursor_start"()
-    rx926_cur."!cursor_caparray"("EXPR")
     getattribute rx926_debug, rx926_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx926_cur
     .local pmc match
@@ -12857,9 +12653,9 @@
     substr rx926_tgt, rx926_tgt, rx926_off
   rx926_start:
     eq $I10, 1, rx926_restart
-    if_null rx926_debug, debug_780
-    rx926_cur."!cursor_debug"("START", "circumfix:sym<[ ]>")
-  debug_780:
+    if_null rx926_debug, debug_774
+    rx926_cur."!cursor_debug"("START", "quote:sym</ />")
+  debug_774:
     $I10 = self.'from'()
     ne $I10, -1, rxscan930_done
     goto rxscan930_scan
@@ -12872,57 +12668,52 @@
     set_addr $I10, rxscan930_loop
     rx926_cur."!mark_push"(0, rx926_pos, $I10)
   rxscan930_done:
-.annotate 'line', 437
-  # rx literal  "["
+.annotate 'line', 432
+  # rx literal  "/"
     add $I11, rx926_pos, 1
     gt $I11, rx926_eos, rx926_fail
     sub $I11, rx926_pos, rx926_off
     ord $I11, rx926_tgt, $I11
-    ne $I11, 91, rx926_fail
+    ne $I11, 47, rx926_fail
     add rx926_pos, 1
-  # rx subrule "ws" subtype=method negate=
+.annotate 'line', 433
+  # rx subrule "newpad" subtype=method negate=
     rx926_cur."!cursor_pos"(rx926_pos)
-    $P10 = rx926_cur."ws"()
+    $P10 = rx926_cur."newpad"()
     unless $P10, rx926_fail
     rx926_pos = $P10."pos"()
-  # rx rxquantr931 ** 0..1
-    set_addr $I10, rxquantr931_done
-    rx926_cur."!mark_push"(0, rx926_pos, $I10)
-  rxquantr931_loop:
-  # rx subrule "EXPR" subtype=capture negate=
+.annotate 'line', 434
+  # rx reduce name="quote:sym</ />" key="open"
     rx926_cur."!cursor_pos"(rx926_pos)
-    $P10 = rx926_cur."EXPR"()
-    unless $P10, rx926_fail
-    goto rxsubrule932_pass
-  rxsubrule932_back:
-    $P10 = $P10."!cursor_next"()
+    rx926_cur."!reduce"("quote:sym</ />", "open")
+.annotate 'line', 435
+  # rx subrule "LANG" subtype=capture negate=
+    rx926_cur."!cursor_pos"(rx926_pos)
+    $P10 = rx926_cur."LANG"("Regex", "nibbler")
     unless $P10, rx926_fail
-  rxsubrule932_pass:
-    set_addr $I10, rxsubrule932_back
-    rx926_cur."!mark_push"(0, rx926_pos, $I10, $P10)
-    $P10."!cursor_names"("EXPR")
+    rx926_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("p6regex")
     rx926_pos = $P10."pos"()
-    set_addr $I10, rxquantr931_done
-    (rx926_rep) = rx926_cur."!mark_commit"($I10)
-  rxquantr931_done:
-  # rx literal  "]"
+.annotate 'line', 436
+  # rx literal  "/"
     add $I11, rx926_pos, 1
     gt $I11, rx926_eos, rx926_fail
     sub $I11, rx926_pos, rx926_off
     ord $I11, rx926_tgt, $I11
-    ne $I11, 93, rx926_fail
+    ne $I11, 47, rx926_fail
     add rx926_pos, 1
+.annotate 'line', 431
   # rx pass
-    rx926_cur."!cursor_pass"(rx926_pos, "circumfix:sym<[ ]>")
-    if_null rx926_debug, debug_781
-    rx926_cur."!cursor_debug"("PASS", "circumfix:sym<[ ]>", " at pos=", rx926_pos)
-  debug_781:
+    rx926_cur."!cursor_pass"(rx926_pos, "quote:sym</ />")
+    if_null rx926_debug, debug_775
+    rx926_cur."!cursor_debug"("PASS", "quote:sym</ />", " at pos=", rx926_pos)
+  debug_775:
     .return (rx926_cur)
   rx926_restart:
 .annotate 'line', 4
-    if_null rx926_debug, debug_782
-    rx926_cur."!cursor_debug"("NEXT", "circumfix:sym<[ ]>")
-  debug_782:
+    if_null rx926_debug, debug_776
+    rx926_cur."!cursor_debug"("NEXT", "quote:sym</ />")
+  debug_776:
   rx926_fail:
     (rx926_rep, rx926_pos, $I10, $P10) = rx926_cur."!mark_fail"(0)
     lt rx926_pos, -1, rx926_done
@@ -12930,18 +12721,18 @@
     jump $I10
   rx926_done:
     rx926_cur."!cursor_fail"()
-    if_null rx926_debug, debug_783
-    rx926_cur."!cursor_debug"("FAIL", "circumfix:sym<[ ]>")
-  debug_783:
+    if_null rx926_debug, debug_777
+    rx926_cur."!cursor_debug"("FAIL", "quote:sym</ />")
+  debug_777:
     .return (rx926_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<[ ]>"  :subid("229_1282324002.40722") :method
+.sub "!PREFIX__quote:sym</ />"  :subid("225_1284728478.15265") :method
 .annotate 'line', 4
-    $P928 = self."!PREFIX__!subrule"("ws", "[")
+    $P928 = self."!PREFIX__!subrule"("newpad", "/")
     new $P929, "ResizablePMCArray"
     push $P929, $P928
     .return ($P929)
@@ -12949,1160 +12740,1137 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<ang>"  :subid("230_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "quote_escape:sym<$>"  :subid("226_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .local string rx934_tgt
-    .local int rx934_pos
-    .local int rx934_off
-    .local int rx934_eos
-    .local int rx934_rep
-    .local pmc rx934_cur
-    .local pmc rx934_debug
-    (rx934_cur, rx934_pos, rx934_tgt, $I10) = self."!cursor_start"()
-    getattribute rx934_debug, rx934_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx934_cur
-    .local pmc match
-    .lex "$/", match
-    length rx934_eos, rx934_tgt
-    gt rx934_pos, rx934_eos, rx934_done
-    set rx934_off, 0
-    lt rx934_pos, 2, rx934_start
-    sub rx934_off, rx934_pos, 1
-    substr rx934_tgt, rx934_tgt, rx934_off
-  rx934_start:
-    eq $I10, 1, rx934_restart
-    if_null rx934_debug, debug_784
-    rx934_cur."!cursor_debug"("START", "circumfix:sym<ang>")
-  debug_784:
+    .local string rx932_tgt
+    .local int rx932_pos
+    .local int rx932_off
+    .local int rx932_eos
+    .local int rx932_rep
+    .local pmc rx932_cur
+    .local pmc rx932_debug
+    (rx932_cur, rx932_pos, rx932_tgt, $I10) = self."!cursor_start"()
+    getattribute rx932_debug, rx932_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx932_cur
+    .local pmc match
+    .lex "$/", match
+    length rx932_eos, rx932_tgt
+    gt rx932_pos, rx932_eos, rx932_done
+    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:
+    eq $I10, 1, rx932_restart
+    if_null rx932_debug, debug_778
+    rx932_cur."!cursor_debug"("START", "quote_escape:sym<$>")
+  debug_778:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan937_done
-    goto rxscan937_scan
-  rxscan937_loop:
-    ($P10) = rx934_cur."from"()
-    inc $P10
-    set rx934_pos, $P10
-    ge rx934_pos, rx934_eos, rxscan937_done
-  rxscan937_scan:
-    set_addr $I10, rxscan937_loop
-    rx934_cur."!mark_push"(0, rx934_pos, $I10)
-  rxscan937_done:
-.annotate 'line', 438
+    ne $I10, -1, rxscan935_done
+    goto rxscan935_scan
+  rxscan935_loop:
+    ($P10) = rx932_cur."from"()
+    inc $P10
+    set rx932_pos, $P10
+    ge rx932_pos, rx932_eos, rxscan935_done
+  rxscan935_scan:
+    set_addr $I10, rxscan935_loop
+    rx932_cur."!mark_push"(0, rx932_pos, $I10)
+  rxscan935_done:
+.annotate 'line', 439
   # rx enumcharlist negate=0 zerowidth
-    ge rx934_pos, rx934_eos, rx934_fail
-    sub $I10, rx934_pos, rx934_off
-    substr $S10, rx934_tgt, $I10, 1
-    index $I11, "<", $S10
-    lt $I11, 0, rx934_fail
-  # rx subrule "quote_EXPR" subtype=capture negate=
-    rx934_cur."!cursor_pos"(rx934_pos)
-    $P10 = rx934_cur."quote_EXPR"(":q", ":w")
-    unless $P10, rx934_fail
-    rx934_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote_EXPR")
-    rx934_pos = $P10."pos"()
+    sub $I10, rx932_pos, rx932_off
+    substr $S10, rx932_tgt, $I10, 1
+    index $I11, "$", $S10
+    lt $I11, 0, rx932_fail
+  # rx subrule "quotemod_check" subtype=zerowidth negate=
+    rx932_cur."!cursor_pos"(rx932_pos)
+    $P10 = rx932_cur."quotemod_check"("s")
+    unless $P10, rx932_fail
+  # rx subrule "variable" subtype=capture negate=
+    rx932_cur."!cursor_pos"(rx932_pos)
+    $P10 = rx932_cur."variable"()
+    unless $P10, rx932_fail
+    rx932_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("variable")
+    rx932_pos = $P10."pos"()
   # rx pass
-    rx934_cur."!cursor_pass"(rx934_pos, "circumfix:sym<ang>")
-    if_null rx934_debug, debug_785
-    rx934_cur."!cursor_debug"("PASS", "circumfix:sym<ang>", " at pos=", rx934_pos)
-  debug_785:
-    .return (rx934_cur)
-  rx934_restart:
+    rx932_cur."!cursor_pass"(rx932_pos, "quote_escape:sym<$>")
+    if_null rx932_debug, debug_779
+    rx932_cur."!cursor_debug"("PASS", "quote_escape:sym<$>", " at pos=", rx932_pos)
+  debug_779:
+    .return (rx932_cur)
+  rx932_restart:
 .annotate 'line', 4
-    if_null rx934_debug, debug_786
-    rx934_cur."!cursor_debug"("NEXT", "circumfix:sym<ang>")
-  debug_786:
-  rx934_fail:
-    (rx934_rep, rx934_pos, $I10, $P10) = rx934_cur."!mark_fail"(0)
-    lt rx934_pos, -1, rx934_done
-    eq rx934_pos, -1, rx934_fail
-    jump $I10
-  rx934_done:
-    rx934_cur."!cursor_fail"()
-    if_null rx934_debug, debug_787
-    rx934_cur."!cursor_debug"("FAIL", "circumfix:sym<ang>")
-  debug_787:
-    .return (rx934_cur)
+    if_null rx932_debug, debug_780
+    rx932_cur."!cursor_debug"("NEXT", "quote_escape:sym<$>")
+  debug_780:
+  rx932_fail:
+    (rx932_rep, rx932_pos, $I10, $P10) = rx932_cur."!mark_fail"(0)
+    lt rx932_pos, -1, rx932_done
+    eq rx932_pos, -1, rx932_fail
+    jump $I10
+  rx932_done:
+    rx932_cur."!cursor_fail"()
+    if_null rx932_debug, debug_781
+    rx932_cur."!cursor_debug"("FAIL", "quote_escape:sym<$>")
+  debug_781:
+    .return (rx932_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<ang>"  :subid("231_1282324002.40722") :method
+.sub "!PREFIX__quote_escape:sym<$>"  :subid("227_1284728478.15265") :method
 .annotate 'line', 4
-    new $P936, "ResizablePMCArray"
-    push $P936, "<"
-    .return ($P936)
+    new $P934, "ResizablePMCArray"
+    push $P934, "$"
+    .return ($P934)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("232_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "quote_escape:sym<{ }>"  :subid("228_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .local string rx939_tgt
-    .local int rx939_pos
-    .local int rx939_off
-    .local int rx939_eos
-    .local int rx939_rep
-    .local pmc rx939_cur
-    .local pmc rx939_debug
-    (rx939_cur, rx939_pos, rx939_tgt, $I10) = self."!cursor_start"()
-    getattribute rx939_debug, rx939_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx939_cur
+    .local string rx937_tgt
+    .local int rx937_pos
+    .local int rx937_off
+    .local int rx937_eos
+    .local int rx937_rep
+    .local pmc rx937_cur
+    .local pmc rx937_debug
+    (rx937_cur, rx937_pos, rx937_tgt, $I10) = self."!cursor_start"()
+    getattribute rx937_debug, rx937_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx937_cur
     .local pmc match
     .lex "$/", match
-    length rx939_eos, rx939_tgt
-    gt rx939_pos, rx939_eos, rx939_done
-    set rx939_off, 0
-    lt rx939_pos, 2, rx939_start
-    sub rx939_off, rx939_pos, 1
-    substr rx939_tgt, rx939_tgt, rx939_off
-  rx939_start:
-    eq $I10, 1, rx939_restart
-    if_null rx939_debug, debug_788
-    rx939_cur."!cursor_debug"("START", unicode:"circumfix:sym<\x{ab} \x{bb}>")
-  debug_788:
+    length rx937_eos, rx937_tgt
+    gt rx937_pos, rx937_eos, rx937_done
+    set rx937_off, 0
+    lt rx937_pos, 2, rx937_start
+    sub rx937_off, rx937_pos, 1
+    substr rx937_tgt, rx937_tgt, rx937_off
+  rx937_start:
+    eq $I10, 1, rx937_restart
+    if_null rx937_debug, debug_782
+    rx937_cur."!cursor_debug"("START", "quote_escape:sym<{ }>")
+  debug_782:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan942_done
-    goto rxscan942_scan
-  rxscan942_loop:
-    ($P10) = rx939_cur."from"()
-    inc $P10
-    set rx939_pos, $P10
-    ge rx939_pos, rx939_eos, rxscan942_done
-  rxscan942_scan:
-    set_addr $I10, rxscan942_loop
-    rx939_cur."!mark_push"(0, rx939_pos, $I10)
-  rxscan942_done:
-.annotate 'line', 439
+    ne $I10, -1, rxscan940_done
+    goto rxscan940_scan
+  rxscan940_loop:
+    ($P10) = rx937_cur."from"()
+    inc $P10
+    set rx937_pos, $P10
+    ge rx937_pos, rx937_eos, rxscan940_done
+  rxscan940_scan:
+    set_addr $I10, rxscan940_loop
+    rx937_cur."!mark_push"(0, rx937_pos, $I10)
+  rxscan940_done:
+.annotate 'line', 440
   # rx enumcharlist negate=0 zerowidth
-    ge rx939_pos, rx939_eos, rx939_fail
-    sub $I10, rx939_pos, rx939_off
-    substr $S10, rx939_tgt, $I10, 1
-    index $I11, unicode:"\x{ab}", $S10
-    lt $I11, 0, rx939_fail
-  # rx subrule "quote_EXPR" subtype=capture negate=
-    rx939_cur."!cursor_pos"(rx939_pos)
-    $P10 = rx939_cur."quote_EXPR"(":qq", ":w")
-    unless $P10, rx939_fail
-    rx939_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote_EXPR")
-    rx939_pos = $P10."pos"()
+    sub $I10, rx937_pos, rx937_off
+    substr $S10, rx937_tgt, $I10, 1
+    index $I11, "{", $S10
+    lt $I11, 0, rx937_fail
+  # rx subrule "quotemod_check" subtype=zerowidth negate=
+    rx937_cur."!cursor_pos"(rx937_pos)
+    $P10 = rx937_cur."quotemod_check"("c")
+    unless $P10, rx937_fail
+  # rx subrule "block" subtype=capture negate=
+    rx937_cur."!cursor_pos"(rx937_pos)
+    $P10 = rx937_cur."block"()
+    unless $P10, rx937_fail
+    rx937_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("block")
+    rx937_pos = $P10."pos"()
   # rx pass
-    rx939_cur."!cursor_pass"(rx939_pos, unicode:"circumfix:sym<\x{ab} \x{bb}>")
-    if_null rx939_debug, debug_789
-    rx939_cur."!cursor_debug"("PASS", unicode:"circumfix:sym<\x{ab} \x{bb}>", " at pos=", rx939_pos)
-  debug_789:
-    .return (rx939_cur)
-  rx939_restart:
+    rx937_cur."!cursor_pass"(rx937_pos, "quote_escape:sym<{ }>")
+    if_null rx937_debug, debug_783
+    rx937_cur."!cursor_debug"("PASS", "quote_escape:sym<{ }>", " at pos=", rx937_pos)
+  debug_783:
+    .return (rx937_cur)
+  rx937_restart:
 .annotate 'line', 4
-    if_null rx939_debug, debug_790
-    rx939_cur."!cursor_debug"("NEXT", unicode:"circumfix:sym<\x{ab} \x{bb}>")
-  debug_790:
-  rx939_fail:
-    (rx939_rep, rx939_pos, $I10, $P10) = rx939_cur."!mark_fail"(0)
-    lt rx939_pos, -1, rx939_done
-    eq rx939_pos, -1, rx939_fail
-    jump $I10
-  rx939_done:
-    rx939_cur."!cursor_fail"()
-    if_null rx939_debug, debug_791
-    rx939_cur."!cursor_debug"("FAIL", unicode:"circumfix:sym<\x{ab} \x{bb}>")
-  debug_791:
-    .return (rx939_cur)
+    if_null rx937_debug, debug_784
+    rx937_cur."!cursor_debug"("NEXT", "quote_escape:sym<{ }>")
+  debug_784:
+  rx937_fail:
+    (rx937_rep, rx937_pos, $I10, $P10) = rx937_cur."!mark_fail"(0)
+    lt rx937_pos, -1, rx937_done
+    eq rx937_pos, -1, rx937_fail
+    jump $I10
+  rx937_done:
+    rx937_cur."!cursor_fail"()
+    if_null rx937_debug, debug_785
+    rx937_cur."!cursor_debug"("FAIL", "quote_escape:sym<{ }>")
+  debug_785:
+    .return (rx937_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub unicode:"!PREFIX__circumfix:sym<\x{ab} \x{bb}>"  :subid("233_1282324002.40722") :method
+.sub "!PREFIX__quote_escape:sym<{ }>"  :subid("229_1284728478.15265") :method
 .annotate 'line', 4
-    new $P941, "ResizablePMCArray"
-    push $P941, unicode:"\x{ab}"
-    .return ($P941)
+    new $P939, "ResizablePMCArray"
+    push $P939, "{"
+    .return ($P939)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<{ }>"  :subid("234_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "quote_escape:sym<esc>"  :subid("230_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .local string rx944_tgt
-    .local int rx944_pos
-    .local int rx944_off
-    .local int rx944_eos
-    .local int rx944_rep
-    .local pmc rx944_cur
-    .local pmc rx944_debug
-    (rx944_cur, rx944_pos, rx944_tgt, $I10) = self."!cursor_start"()
-    getattribute rx944_debug, rx944_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx944_cur
+    .local string rx942_tgt
+    .local int rx942_pos
+    .local int rx942_off
+    .local int rx942_eos
+    .local int rx942_rep
+    .local pmc rx942_cur
+    .local pmc rx942_debug
+    (rx942_cur, rx942_pos, rx942_tgt, $I10) = self."!cursor_start"()
+    getattribute rx942_debug, rx942_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx942_cur
     .local pmc match
     .lex "$/", match
-    length rx944_eos, rx944_tgt
-    gt rx944_pos, rx944_eos, rx944_done
-    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:
-    eq $I10, 1, rx944_restart
-    if_null rx944_debug, debug_792
-    rx944_cur."!cursor_debug"("START", "circumfix:sym<{ }>")
-  debug_792:
+    length rx942_eos, rx942_tgt
+    gt rx942_pos, rx942_eos, rx942_done
+    set rx942_off, 0
+    lt rx942_pos, 2, rx942_start
+    sub rx942_off, rx942_pos, 1
+    substr rx942_tgt, rx942_tgt, rx942_off
+  rx942_start:
+    eq $I10, 1, rx942_restart
+    if_null rx942_debug, debug_786
+    rx942_cur."!cursor_debug"("START", "quote_escape:sym<esc>")
+  debug_786:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan947_done
-    goto rxscan947_scan
-  rxscan947_loop:
-    ($P10) = rx944_cur."from"()
-    inc $P10
-    set rx944_pos, $P10
-    ge rx944_pos, rx944_eos, rxscan947_done
-  rxscan947_scan:
-    set_addr $I10, rxscan947_loop
-    rx944_cur."!mark_push"(0, rx944_pos, $I10)
-  rxscan947_done:
-.annotate 'line', 440
-  # rx enumcharlist negate=0 zerowidth
-    ge rx944_pos, rx944_eos, rx944_fail
-    sub $I10, rx944_pos, rx944_off
-    substr $S10, rx944_tgt, $I10, 1
-    index $I11, "{", $S10
-    lt $I11, 0, rx944_fail
-  # rx subrule "pblock" subtype=capture negate=
-    rx944_cur."!cursor_pos"(rx944_pos)
-    $P10 = rx944_cur."pblock"()
-    unless $P10, rx944_fail
-    rx944_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("pblock")
-    rx944_pos = $P10."pos"()
-  # rx pass
-    rx944_cur."!cursor_pass"(rx944_pos, "circumfix:sym<{ }>")
-    if_null rx944_debug, debug_793
-    rx944_cur."!cursor_debug"("PASS", "circumfix:sym<{ }>", " at pos=", rx944_pos)
-  debug_793:
-    .return (rx944_cur)
-  rx944_restart:
+    ne $I10, -1, rxscan945_done
+    goto rxscan945_scan
+  rxscan945_loop:
+    ($P10) = rx942_cur."from"()
+    inc $P10
+    set rx942_pos, $P10
+    ge rx942_pos, rx942_eos, rxscan945_done
+  rxscan945_scan:
+    set_addr $I10, rxscan945_loop
+    rx942_cur."!mark_push"(0, rx942_pos, $I10)
+  rxscan945_done:
+.annotate 'line', 441
+  # rx literal  "\\e"
+    add $I11, rx942_pos, 2
+    gt $I11, rx942_eos, rx942_fail
+    sub $I11, rx942_pos, rx942_off
+    substr $S10, rx942_tgt, $I11, 2
+    ne $S10, "\\e", rx942_fail
+    add rx942_pos, 2
+  # rx subrule "quotemod_check" subtype=zerowidth negate=
+    rx942_cur."!cursor_pos"(rx942_pos)
+    $P10 = rx942_cur."quotemod_check"("b")
+    unless $P10, rx942_fail
+  # rx pass
+    rx942_cur."!cursor_pass"(rx942_pos, "quote_escape:sym<esc>")
+    if_null rx942_debug, debug_787
+    rx942_cur."!cursor_debug"("PASS", "quote_escape:sym<esc>", " at pos=", rx942_pos)
+  debug_787:
+    .return (rx942_cur)
+  rx942_restart:
 .annotate 'line', 4
-    if_null rx944_debug, debug_794
-    rx944_cur."!cursor_debug"("NEXT", "circumfix:sym<{ }>")
-  debug_794:
-  rx944_fail:
-    (rx944_rep, rx944_pos, $I10, $P10) = rx944_cur."!mark_fail"(0)
-    lt rx944_pos, -1, rx944_done
-    eq rx944_pos, -1, rx944_fail
-    jump $I10
-  rx944_done:
-    rx944_cur."!cursor_fail"()
-    if_null rx944_debug, debug_795
-    rx944_cur."!cursor_debug"("FAIL", "circumfix:sym<{ }>")
-  debug_795:
-    .return (rx944_cur)
+    if_null rx942_debug, debug_788
+    rx942_cur."!cursor_debug"("NEXT", "quote_escape:sym<esc>")
+  debug_788:
+  rx942_fail:
+    (rx942_rep, rx942_pos, $I10, $P10) = rx942_cur."!mark_fail"(0)
+    lt rx942_pos, -1, rx942_done
+    eq rx942_pos, -1, rx942_fail
+    jump $I10
+  rx942_done:
+    rx942_cur."!cursor_fail"()
+    if_null rx942_debug, debug_789
+    rx942_cur."!cursor_debug"("FAIL", "quote_escape:sym<esc>")
+  debug_789:
+    .return (rx942_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<{ }>"  :subid("235_1282324002.40722") :method
+.sub "!PREFIX__quote_escape:sym<esc>"  :subid("231_1284728478.15265") :method
 .annotate 'line', 4
-    new $P946, "ResizablePMCArray"
-    push $P946, "{"
-    .return ($P946)
+    new $P944, "ResizablePMCArray"
+    push $P944, "\\e"
+    .return ($P944)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<sigil>"  :subid("236_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "circumfix:sym<( )>"  :subid("232_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .local string rx949_tgt
-    .local int rx949_pos
-    .local int rx949_off
-    .local int rx949_eos
-    .local int rx949_rep
-    .local pmc rx949_cur
-    .local pmc rx949_debug
-    (rx949_cur, rx949_pos, rx949_tgt, $I10) = self."!cursor_start"()
-    getattribute rx949_debug, rx949_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx949_cur
+    .local string rx947_tgt
+    .local int rx947_pos
+    .local int rx947_off
+    .local int rx947_eos
+    .local int rx947_rep
+    .local pmc rx947_cur
+    .local pmc rx947_debug
+    (rx947_cur, rx947_pos, rx947_tgt, $I10) = self."!cursor_start"()
+    rx947_cur."!cursor_caparray"("EXPR")
+    getattribute rx947_debug, rx947_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx947_cur
     .local pmc match
     .lex "$/", match
-    length rx949_eos, rx949_tgt
-    gt rx949_pos, rx949_eos, rx949_done
-    set rx949_off, 0
-    lt rx949_pos, 2, rx949_start
-    sub rx949_off, rx949_pos, 1
-    substr rx949_tgt, rx949_tgt, rx949_off
-  rx949_start:
-    eq $I10, 1, rx949_restart
-    if_null rx949_debug, debug_796
-    rx949_cur."!cursor_debug"("START", "circumfix:sym<sigil>")
-  debug_796:
+    length rx947_eos, rx947_tgt
+    gt rx947_pos, rx947_eos, rx947_done
+    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:
+    eq $I10, 1, rx947_restart
+    if_null rx947_debug, debug_790
+    rx947_cur."!cursor_debug"("START", "circumfix:sym<( )>")
+  debug_790:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan953_done
-    goto rxscan953_scan
-  rxscan953_loop:
-    ($P10) = rx949_cur."from"()
-    inc $P10
-    set rx949_pos, $P10
-    ge rx949_pos, rx949_eos, rxscan953_done
-  rxscan953_scan:
-    set_addr $I10, rxscan953_loop
-    rx949_cur."!mark_push"(0, rx949_pos, $I10)
-  rxscan953_done:
-.annotate 'line', 441
-  # rx subrule "sigil" subtype=capture negate=
-    rx949_cur."!cursor_pos"(rx949_pos)
-    $P10 = rx949_cur."sigil"()
-    unless $P10, rx949_fail
-    rx949_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sigil")
-    rx949_pos = $P10."pos"()
+    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', 443
   # rx literal  "("
-    add $I11, rx949_pos, 1
-    gt $I11, rx949_eos, rx949_fail
-    sub $I11, rx949_pos, rx949_off
-    ord $I11, rx949_tgt, $I11
-    ne $I11, 40, rx949_fail
-    add rx949_pos, 1
-  # rx subrule "semilist" subtype=capture negate=
-    rx949_cur."!cursor_pos"(rx949_pos)
-    $P10 = rx949_cur."semilist"()
-    unless $P10, rx949_fail
-    rx949_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("semilist")
-    rx949_pos = $P10."pos"()
-  alt954_0:
-    set_addr $I10, alt954_1
-    rx949_cur."!mark_push"(0, rx949_pos, $I10)
-  # rx literal  ")"
-    add $I11, rx949_pos, 1
-    gt $I11, rx949_eos, rx949_fail
-    sub $I11, rx949_pos, rx949_off
-    ord $I11, rx949_tgt, $I11
-    ne $I11, 41, rx949_fail
-    add rx949_pos, 1
-    goto alt954_end
-  alt954_1:
-  # rx subrule "FAILGOAL" subtype=method negate=
-    rx949_cur."!cursor_pos"(rx949_pos)
-    $P10 = rx949_cur."FAILGOAL"("')'")
-    unless $P10, rx949_fail
-    goto rxsubrule956_pass
-  rxsubrule956_back:
+    add $I11, rx947_pos, 1
+    gt $I11, rx947_eos, rx947_fail
+    sub $I11, rx947_pos, rx947_off
+    ord $I11, rx947_tgt, $I11
+    ne $I11, 40, rx947_fail
+    add rx947_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx947_cur."!cursor_pos"(rx947_pos)
+    $P10 = rx947_cur."ws"()
+    unless $P10, rx947_fail
+    rx947_pos = $P10."pos"()
+  # rx rxquantr952 ** 0..1
+    set_addr $I10, rxquantr952_done
+    rx947_cur."!mark_push"(0, rx947_pos, $I10)
+  rxquantr952_loop:
+  # rx subrule "EXPR" subtype=capture negate=
+    rx947_cur."!cursor_pos"(rx947_pos)
+    $P10 = rx947_cur."EXPR"()
+    unless $P10, rx947_fail
+    goto rxsubrule953_pass
+  rxsubrule953_back:
     $P10 = $P10."!cursor_next"()
-    unless $P10, rx949_fail
-  rxsubrule956_pass:
-    set_addr $I10, rxsubrule956_back
-    rx949_cur."!mark_push"(0, rx949_pos, $I10, $P10)
-    rx949_pos = $P10."pos"()
-  alt954_end:
-  # rx pass
-    rx949_cur."!cursor_pass"(rx949_pos, "circumfix:sym<sigil>")
-    if_null rx949_debug, debug_797
-    rx949_cur."!cursor_debug"("PASS", "circumfix:sym<sigil>", " at pos=", rx949_pos)
-  debug_797:
-    .return (rx949_cur)
-  rx949_restart:
+    unless $P10, rx947_fail
+  rxsubrule953_pass:
+    set_addr $I10, rxsubrule953_back
+    rx947_cur."!mark_push"(0, rx947_pos, $I10, $P10)
+    $P10."!cursor_names"("EXPR")
+    rx947_pos = $P10."pos"()
+    set_addr $I10, rxquantr952_done
+    (rx947_rep) = rx947_cur."!mark_commit"($I10)
+  rxquantr952_done:
+  # rx literal  ")"
+    add $I11, rx947_pos, 1
+    gt $I11, rx947_eos, rx947_fail
+    sub $I11, rx947_pos, rx947_off
+    ord $I11, rx947_tgt, $I11
+    ne $I11, 41, rx947_fail
+    add rx947_pos, 1
+  # rx pass
+    rx947_cur."!cursor_pass"(rx947_pos, "circumfix:sym<( )>")
+    if_null rx947_debug, debug_791
+    rx947_cur."!cursor_debug"("PASS", "circumfix:sym<( )>", " at pos=", rx947_pos)
+  debug_791:
+    .return (rx947_cur)
+  rx947_restart:
 .annotate 'line', 4
-    if_null rx949_debug, debug_798
-    rx949_cur."!cursor_debug"("NEXT", "circumfix:sym<sigil>")
-  debug_798:
-  rx949_fail:
-    (rx949_rep, rx949_pos, $I10, $P10) = rx949_cur."!mark_fail"(0)
-    lt rx949_pos, -1, rx949_done
-    eq rx949_pos, -1, rx949_fail
-    jump $I10
-  rx949_done:
-    rx949_cur."!cursor_fail"()
-    if_null rx949_debug, debug_799
-    rx949_cur."!cursor_debug"("FAIL", "circumfix:sym<sigil>")
-  debug_799:
-    .return (rx949_cur)
+    if_null rx947_debug, debug_792
+    rx947_cur."!cursor_debug"("NEXT", "circumfix:sym<( )>")
+  debug_792:
+  rx947_fail:
+    (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
+  rx947_done:
+    rx947_cur."!cursor_fail"()
+    if_null rx947_debug, debug_793
+    rx947_cur."!cursor_debug"("FAIL", "circumfix:sym<( )>")
+  debug_793:
+    .return (rx947_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<sigil>"  :subid("237_1282324002.40722") :method
+.sub "!PREFIX__circumfix:sym<( )>"  :subid("233_1284728478.15265") :method
 .annotate 'line', 4
-    $P951 = self."!PREFIX__!subrule"("sigil", "")
-    new $P952, "ResizablePMCArray"
-    push $P952, $P951
-    .return ($P952)
+    $P949 = self."!PREFIX__!subrule"("ws", "(")
+    new $P950, "ResizablePMCArray"
+    push $P950, $P949
+    .return ($P950)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "semilist"  :subid("238_1282324002.40722") :method :outer("11_1282324002.40722")
+.sub "circumfix:sym<[ ]>"  :subid("234_1284728478.15265") :method :outer("11_1284728478.15265")
 .annotate 'line', 4
-    .local string rx958_tgt
-    .local int rx958_pos
-    .local int rx958_off
-    .local int rx958_eos
-    .local int rx958_rep
-    .local pmc rx958_cur
-    .local pmc rx958_debug
-    (rx958_cur, rx958_pos, rx958_tgt, $I10) = self."!cursor_start"()
-    getattribute rx958_debug, rx958_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx958_cur
+    .local string rx955_tgt
+    .local int rx955_pos
+    .local int rx955_off
+    .local int rx955_eos
+    .local int rx955_rep
+    .local pmc rx955_cur
+    .local pmc rx955_debug
+    (rx955_cur, rx955_pos, rx955_tgt, $I10) = self."!cursor_start"()
+    rx955_cur."!cursor_caparray"("EXPR")
+    getattribute rx955_debug, rx955_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx955_cur
     .local pmc match
     .lex "$/", match
-    length rx958_eos, rx958_tgt
-    gt rx958_pos, rx958_eos, rx958_done
-    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:
-    eq $I10, 1, rx958_restart
-    if_null rx958_debug, debug_800
-    rx958_cur."!cursor_debug"("START", "semilist")
-  debug_800:
+    length rx955_eos, rx955_tgt
+    gt rx955_pos, rx955_eos, rx955_done
+    set rx955_off, 0
+    lt rx955_pos, 2, rx955_start
+    sub rx955_off, rx955_pos, 1
+    substr rx955_tgt, rx955_tgt, rx955_off
+  rx955_start:
+    eq $I10, 1, rx955_restart
+    if_null rx955_debug, debug_794
+    rx955_cur."!cursor_debug"("START", "circumfix:sym<[ ]>")
+  debug_794:
     $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', 443
-  # rx subrule "ws" subtype=method negate=
-    rx958_cur."!cursor_pos"(rx958_pos)
-    $P10 = rx958_cur."ws"()
-    unless $P10, rx958_fail
-    rx958_pos = $P10."pos"()
-  # rx subrule "statement" subtype=capture negate=
-    rx958_cur."!cursor_pos"(rx958_pos)
-    $P10 = rx958_cur."statement"()
-    unless $P10, rx958_fail
-    rx958_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("statement")
-    rx958_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx958_cur."!cursor_pos"(rx958_pos)
-    $P10 = rx958_cur."ws"()
-    unless $P10, rx958_fail
-    rx958_pos = $P10."pos"()
-  # rx pass
-    rx958_cur."!cursor_pass"(rx958_pos, "semilist")
-    if_null rx958_debug, debug_801
-    rx958_cur."!cursor_debug"("PASS", "semilist", " at pos=", rx958_pos)
-  debug_801:
-    .return (rx958_cur)
-  rx958_restart:
+    ne $I10, -1, rxscan959_done
+    goto rxscan959_scan
+  rxscan959_loop:
+    ($P10) = rx955_cur."from"()
+    inc $P10
+    set rx955_pos, $P10
+    ge rx955_pos, rx955_eos, rxscan959_done
+  rxscan959_scan:
+    set_addr $I10, rxscan959_loop
+    rx955_cur."!mark_push"(0, rx955_pos, $I10)
+  rxscan959_done:
+.annotate 'line', 444
+  # rx literal  "["
+    add $I11, rx955_pos, 1
+    gt $I11, rx955_eos, rx955_fail
+    sub $I11, rx955_pos, rx955_off
+    ord $I11, rx955_tgt, $I11
+    ne $I11, 91, rx955_fail
+    add rx955_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx955_cur."!cursor_pos"(rx955_pos)
+    $P10 = rx955_cur."ws"()
+    unless $P10, rx955_fail
+    rx955_pos = $P10."pos"()
+  # rx rxquantr960 ** 0..1
+    set_addr $I10, rxquantr960_done
+    rx955_cur."!mark_push"(0, rx955_pos, $I10)
+  rxquantr960_loop:
+  # rx subrule "EXPR" subtype=capture negate=
+    rx955_cur."!cursor_pos"(rx955_pos)
+    $P10 = rx955_cur."EXPR"()
+    unless $P10, rx955_fail
+    goto rxsubrule961_pass
+  rxsubrule961_back:
+    $P10 = $P10."!cursor_next"()
+    unless $P10, rx955_fail
+  rxsubrule961_pass:
+    set_addr $I10, rxsubrule961_back
+    rx955_cur."!mark_push"(0, rx955_pos, $I10, $P10)
+    $P10."!cursor_names"("EXPR")
+    rx955_pos = $P10."pos"()
+    set_addr $I10, rxquantr960_done
+    (rx955_rep) = rx955_cur."!mark_commit"($I10)
+  rxquantr960_done:
+  # rx literal  "]"
+    add $I11, rx955_pos, 1
+    gt $I11, rx955_eos, rx955_fail
+    sub $I11, rx955_pos, rx955_off
+    ord $I11, rx955_tgt, $I11
+    ne $I11, 93, rx955_fail
+    add rx955_pos, 1
+  # rx pass
+    rx955_cur."!cursor_pass"(rx955_pos, "circumfix:sym<[ ]>")
+    if_null rx955_debug, debug_795
+    rx955_cur."!cursor_debug"("PASS", "circumfix:sym<[ ]>", " at pos=", rx955_pos)
+  debug_795:
+    .return (rx955_cur)
+  rx955_restart:
 .annotate 'line', 4
-    if_null rx958_debug, debug_802
-    rx958_cur."!cursor_debug"("NEXT", "semilist")
-  debug_802:
-  rx958_fail:
-    (rx958_rep, rx958_pos, $I10, $P10) = rx958_cur."!mark_fail"(0)
-    lt rx958_pos, -1, rx958_done
-    eq rx958_pos, -1, rx958_fail
-    jump $I10
-  rx958_done:
-    rx958_cur."!cursor_fail"()
-    if_null rx958_debug, debug_803
-    rx958_cur."!cursor_debug"("FAIL", "semilist")
-  debug_803:
-    .return (rx958_cur)
+    if_null rx955_debug, debug_796
+    rx955_cur."!cursor_debug"("NEXT", "circumfix:sym<[ ]>")
+  debug_796:
+  rx955_fail:
+    (rx955_rep, rx955_pos, $I10, $P10) = rx955_cur."!mark_fail"(0)
+    lt rx955_pos, -1, rx955_done
+    eq rx955_pos, -1, rx955_fail
+    jump $I10
+  rx955_done:
+    rx955_cur."!cursor_fail"()
+    if_null rx955_debug, debug_797
+    rx955_cur."!cursor_debug"("FAIL", "circumfix:sym<[ ]>")
+  debug_797:
+    .return (rx955_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__semilist"  :subid("239_1282324002.40722") :method
+.sub "!PREFIX__circumfix:sym<[ ]>"  :subid("235_1284728478.15265") :method
 .annotate 'line', 4
-    $P960 = self."!PREFIX__!subrule"("ws", "")
-    new $P961, "ResizablePMCArray"
-    push $P961, $P960
-    .return ($P961)
+    $P957 = self."!PREFIX__!subrule"("ws", "[")
+    new $P958, "ResizablePMCArray"
+    push $P958, $P957
+    .return ($P958)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infixish"  :subid("240_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx966_tgt
-    .local int rx966_pos
-    .local int rx966_off
-    .local int rx966_eos
-    .local int rx966_rep
-    .local pmc rx966_cur
-    .local pmc rx966_debug
-    (rx966_cur, rx966_pos, rx966_tgt, $I10) = self."!cursor_start"()
-    getattribute rx966_debug, rx966_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx966_cur
-    .local pmc match
-    .lex "$/", match
-    length rx966_eos, rx966_tgt
-    gt rx966_pos, rx966_eos, rx966_done
-    set rx966_off, 0
-    lt rx966_pos, 2, rx966_start
-    sub rx966_off, rx966_pos, 1
-    substr rx966_tgt, rx966_tgt, rx966_off
-  rx966_start:
-    eq $I10, 1, rx966_restart
-    if_null rx966_debug, debug_804
-    rx966_cur."!cursor_debug"("START", "infixish")
-  debug_804:
+.sub "circumfix:sym<ang>"  :subid("236_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 4
+    .local string rx963_tgt
+    .local int rx963_pos
+    .local int rx963_off
+    .local int rx963_eos
+    .local int rx963_rep
+    .local pmc rx963_cur
+    .local pmc rx963_debug
+    (rx963_cur, rx963_pos, rx963_tgt, $I10) = self."!cursor_start"()
+    getattribute rx963_debug, rx963_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx963_cur
+    .local pmc match
+    .lex "$/", match
+    length rx963_eos, rx963_tgt
+    gt rx963_pos, rx963_eos, rx963_done
+    set rx963_off, 0
+    lt rx963_pos, 2, rx963_start
+    sub rx963_off, rx963_pos, 1
+    substr rx963_tgt, rx963_tgt, rx963_off
+  rx963_start:
+    eq $I10, 1, rx963_restart
+    if_null rx963_debug, debug_798
+    rx963_cur."!cursor_debug"("START", "circumfix:sym<ang>")
+  debug_798:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan969_done
-    goto rxscan969_scan
-  rxscan969_loop:
-    ($P10) = rx966_cur."from"()
-    inc $P10
-    set rx966_pos, $P10
-    ge rx966_pos, rx966_eos, rxscan969_done
-  rxscan969_scan:
-    set_addr $I10, rxscan969_loop
-    rx966_cur."!mark_push"(0, rx966_pos, $I10)
-  rxscan969_done:
-.annotate 'line', 466
-  # rx subrule "infixstopper" subtype=zerowidth negate=1
-    rx966_cur."!cursor_pos"(rx966_pos)
-    $P10 = rx966_cur."infixstopper"()
-    if $P10, rx966_fail
-  # rx subrule "infix" subtype=capture negate=
-    rx966_cur."!cursor_pos"(rx966_pos)
-    $P10 = rx966_cur."infix"()
-    unless $P10, rx966_fail
-    rx966_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("OPER=infix")
-    rx966_pos = $P10."pos"()
+    ne $I10, -1, rxscan966_done
+    goto rxscan966_scan
+  rxscan966_loop:
+    ($P10) = rx963_cur."from"()
+    inc $P10
+    set rx963_pos, $P10
+    ge rx963_pos, rx963_eos, rxscan966_done
+  rxscan966_scan:
+    set_addr $I10, rxscan966_loop
+    rx963_cur."!mark_push"(0, rx963_pos, $I10)
+  rxscan966_done:
+.annotate 'line', 445
+  # rx enumcharlist negate=0 zerowidth
+    sub $I10, rx963_pos, rx963_off
+    substr $S10, rx963_tgt, $I10, 1
+    index $I11, "<", $S10
+    lt $I11, 0, rx963_fail
+  # rx subrule "quote_EXPR" subtype=capture negate=
+    rx963_cur."!cursor_pos"(rx963_pos)
+    $P10 = rx963_cur."quote_EXPR"(":q", ":w")
+    unless $P10, rx963_fail
+    rx963_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quote_EXPR")
+    rx963_pos = $P10."pos"()
   # rx pass
-    rx966_cur."!cursor_pass"(rx966_pos, "infixish")
-    if_null rx966_debug, debug_805
-    rx966_cur."!cursor_debug"("PASS", "infixish", " at pos=", rx966_pos)
-  debug_805:
-    .return (rx966_cur)
-  rx966_restart:
-.annotate 'line', 447
-    if_null rx966_debug, debug_806
-    rx966_cur."!cursor_debug"("NEXT", "infixish")
-  debug_806:
-  rx966_fail:
-    (rx966_rep, rx966_pos, $I10, $P10) = rx966_cur."!mark_fail"(0)
-    lt rx966_pos, -1, rx966_done
-    eq rx966_pos, -1, rx966_fail
-    jump $I10
-  rx966_done:
-    rx966_cur."!cursor_fail"()
-    if_null rx966_debug, debug_807
-    rx966_cur."!cursor_debug"("FAIL", "infixish")
-  debug_807:
-    .return (rx966_cur)
+    rx963_cur."!cursor_pass"(rx963_pos, "circumfix:sym<ang>")
+    if_null rx963_debug, debug_799
+    rx963_cur."!cursor_debug"("PASS", "circumfix:sym<ang>", " at pos=", rx963_pos)
+  debug_799:
+    .return (rx963_cur)
+  rx963_restart:
+.annotate 'line', 4
+    if_null rx963_debug, debug_800
+    rx963_cur."!cursor_debug"("NEXT", "circumfix:sym<ang>")
+  debug_800:
+  rx963_fail:
+    (rx963_rep, rx963_pos, $I10, $P10) = rx963_cur."!mark_fail"(0)
+    lt rx963_pos, -1, rx963_done
+    eq rx963_pos, -1, rx963_fail
+    jump $I10
+  rx963_done:
+    rx963_cur."!cursor_fail"()
+    if_null rx963_debug, debug_801
+    rx963_cur."!cursor_debug"("FAIL", "circumfix:sym<ang>")
+  debug_801:
+    .return (rx963_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infixish"  :subid("241_1282324002.40722") :method
-.annotate 'line', 447
-    new $P968, "ResizablePMCArray"
-    push $P968, ""
-    .return ($P968)
+.sub "!PREFIX__circumfix:sym<ang>"  :subid("237_1284728478.15265") :method
+.annotate 'line', 4
+    new $P965, "ResizablePMCArray"
+    push $P965, "<"
+    .return ($P965)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infixstopper"  :subid("242_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx971_tgt
-    .local int rx971_pos
-    .local int rx971_off
-    .local int rx971_eos
-    .local int rx971_rep
-    .local pmc rx971_cur
-    .local pmc rx971_debug
-    (rx971_cur, rx971_pos, rx971_tgt, $I10) = self."!cursor_start"()
-    getattribute rx971_debug, rx971_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx971_cur
-    .local pmc match
-    .lex "$/", match
-    length rx971_eos, rx971_tgt
-    gt rx971_pos, rx971_eos, rx971_done
-    set rx971_off, 0
-    lt rx971_pos, 2, rx971_start
-    sub rx971_off, rx971_pos, 1
-    substr rx971_tgt, rx971_tgt, rx971_off
-  rx971_start:
-    eq $I10, 1, rx971_restart
-    if_null rx971_debug, debug_808
-    rx971_cur."!cursor_debug"("START", "infixstopper")
-  debug_808:
+.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("238_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 4
+    .local string rx968_tgt
+    .local int rx968_pos
+    .local int rx968_off
+    .local int rx968_eos
+    .local int rx968_rep
+    .local pmc rx968_cur
+    .local pmc rx968_debug
+    (rx968_cur, rx968_pos, rx968_tgt, $I10) = self."!cursor_start"()
+    getattribute rx968_debug, rx968_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx968_cur
+    .local pmc match
+    .lex "$/", match
+    length rx968_eos, rx968_tgt
+    gt rx968_pos, rx968_eos, rx968_done
+    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:
+    eq $I10, 1, rx968_restart
+    if_null rx968_debug, debug_802
+    rx968_cur."!cursor_debug"("START", unicode:"circumfix:sym<\x{ab} \x{bb}>")
+  debug_802:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan974_done
-    goto rxscan974_scan
-  rxscan974_loop:
-    ($P10) = rx971_cur."from"()
-    inc $P10
-    set rx971_pos, $P10
-    ge rx971_pos, rx971_eos, rxscan974_done
-  rxscan974_scan:
-    set_addr $I10, rxscan974_loop
-    rx971_cur."!mark_push"(0, rx971_pos, $I10)
-  rxscan974_done:
-.annotate 'line', 467
-  # rx subrule "lambda" subtype=zerowidth negate=
-    rx971_cur."!cursor_pos"(rx971_pos)
-    $P10 = rx971_cur."lambda"()
-    unless $P10, rx971_fail
-  # rx pass
-    rx971_cur."!cursor_pass"(rx971_pos, "infixstopper")
-    if_null rx971_debug, debug_809
-    rx971_cur."!cursor_debug"("PASS", "infixstopper", " at pos=", rx971_pos)
-  debug_809:
-    .return (rx971_cur)
-  rx971_restart:
-.annotate 'line', 447
-    if_null rx971_debug, debug_810
-    rx971_cur."!cursor_debug"("NEXT", "infixstopper")
-  debug_810:
-  rx971_fail:
-    (rx971_rep, rx971_pos, $I10, $P10) = rx971_cur."!mark_fail"(0)
-    lt rx971_pos, -1, rx971_done
-    eq rx971_pos, -1, rx971_fail
-    jump $I10
-  rx971_done:
-    rx971_cur."!cursor_fail"()
-    if_null rx971_debug, debug_811
-    rx971_cur."!cursor_debug"("FAIL", "infixstopper")
-  debug_811:
-    .return (rx971_cur)
+    ne $I10, -1, rxscan971_done
+    goto rxscan971_scan
+  rxscan971_loop:
+    ($P10) = rx968_cur."from"()
+    inc $P10
+    set rx968_pos, $P10
+    ge rx968_pos, rx968_eos, rxscan971_done
+  rxscan971_scan:
+    set_addr $I10, rxscan971_loop
+    rx968_cur."!mark_push"(0, rx968_pos, $I10)
+  rxscan971_done:
+.annotate 'line', 446
+  # rx enumcharlist negate=0 zerowidth
+    sub $I10, rx968_pos, rx968_off
+    substr $S10, rx968_tgt, $I10, 1
+    index $I11, unicode:"\x{ab}", $S10
+    lt $I11, 0, rx968_fail
+  # rx subrule "quote_EXPR" subtype=capture negate=
+    rx968_cur."!cursor_pos"(rx968_pos)
+    $P10 = rx968_cur."quote_EXPR"(":qq", ":w")
+    unless $P10, rx968_fail
+    rx968_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quote_EXPR")
+    rx968_pos = $P10."pos"()
+  # rx pass
+    rx968_cur."!cursor_pass"(rx968_pos, unicode:"circumfix:sym<\x{ab} \x{bb}>")
+    if_null rx968_debug, debug_803
+    rx968_cur."!cursor_debug"("PASS", unicode:"circumfix:sym<\x{ab} \x{bb}>", " at pos=", rx968_pos)
+  debug_803:
+    .return (rx968_cur)
+  rx968_restart:
+.annotate 'line', 4
+    if_null rx968_debug, debug_804
+    rx968_cur."!cursor_debug"("NEXT", unicode:"circumfix:sym<\x{ab} \x{bb}>")
+  debug_804:
+  rx968_fail:
+    (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
+  rx968_done:
+    rx968_cur."!cursor_fail"()
+    if_null rx968_debug, debug_805
+    rx968_cur."!cursor_debug"("FAIL", unicode:"circumfix:sym<\x{ab} \x{bb}>")
+  debug_805:
+    .return (rx968_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infixstopper"  :subid("243_1282324002.40722") :method
-.annotate 'line', 447
-    new $P973, "ResizablePMCArray"
-    push $P973, ""
-    .return ($P973)
+.sub unicode:"!PREFIX__circumfix:sym<\x{ab} \x{bb}>"  :subid("239_1284728478.15265") :method
+.annotate 'line', 4
+    new $P970, "ResizablePMCArray"
+    push $P970, unicode:"\x{ab}"
+    .return ($P970)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<[ ]>"  :subid("244_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx976_tgt
-    .local int rx976_pos
-    .local int rx976_off
-    .local int rx976_eos
-    .local int rx976_rep
-    .local pmc rx976_cur
-    .local pmc rx976_debug
-    (rx976_cur, rx976_pos, rx976_tgt, $I10) = self."!cursor_start"()
-    getattribute rx976_debug, rx976_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx976_cur
-    .local pmc match
-    .lex "$/", match
-    length rx976_eos, rx976_tgt
-    gt rx976_pos, rx976_eos, rx976_done
-    set rx976_off, 0
-    lt rx976_pos, 2, rx976_start
-    sub rx976_off, rx976_pos, 1
-    substr rx976_tgt, rx976_tgt, rx976_off
-  rx976_start:
-    eq $I10, 1, rx976_restart
-    if_null rx976_debug, debug_812
-    rx976_cur."!cursor_debug"("START", "postcircumfix:sym<[ ]>")
-  debug_812:
+.sub "circumfix:sym<{ }>"  :subid("240_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 4
+    .local string rx973_tgt
+    .local int rx973_pos
+    .local int rx973_off
+    .local int rx973_eos
+    .local int rx973_rep
+    .local pmc rx973_cur
+    .local pmc rx973_debug
+    (rx973_cur, rx973_pos, rx973_tgt, $I10) = self."!cursor_start"()
+    getattribute rx973_debug, rx973_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx973_cur
+    .local pmc match
+    .lex "$/", match
+    length rx973_eos, rx973_tgt
+    gt rx973_pos, rx973_eos, rx973_done
+    set rx973_off, 0
+    lt rx973_pos, 2, rx973_start
+    sub rx973_off, rx973_pos, 1
+    substr rx973_tgt, rx973_tgt, rx973_off
+  rx973_start:
+    eq $I10, 1, rx973_restart
+    if_null rx973_debug, debug_806
+    rx973_cur."!cursor_debug"("START", "circumfix:sym<{ }>")
+  debug_806:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan980_done
-    goto rxscan980_scan
-  rxscan980_loop:
-    ($P10) = rx976_cur."from"()
-    inc $P10
-    set rx976_pos, $P10
-    ge rx976_pos, rx976_eos, rxscan980_done
-  rxscan980_scan:
-    set_addr $I10, rxscan980_loop
-    rx976_cur."!mark_push"(0, rx976_pos, $I10)
-  rxscan980_done:
-.annotate 'line', 470
-  # rx literal  "["
-    add $I11, rx976_pos, 1
-    gt $I11, rx976_eos, rx976_fail
-    sub $I11, rx976_pos, rx976_off
-    ord $I11, rx976_tgt, $I11
-    ne $I11, 91, rx976_fail
-    add rx976_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx976_cur."!cursor_pos"(rx976_pos)
-    $P10 = rx976_cur."ws"()
-    unless $P10, rx976_fail
-    rx976_pos = $P10."pos"()
-  # rx subrule "EXPR" subtype=capture negate=
-    rx976_cur."!cursor_pos"(rx976_pos)
-    $P10 = rx976_cur."EXPR"()
-    unless $P10, rx976_fail
-    rx976_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("EXPR")
-    rx976_pos = $P10."pos"()
-  # rx literal  "]"
-    add $I11, rx976_pos, 1
-    gt $I11, rx976_eos, rx976_fail
-    sub $I11, rx976_pos, rx976_off
-    ord $I11, rx976_tgt, $I11
-    ne $I11, 93, rx976_fail
-    add rx976_pos, 1
-.annotate 'line', 471
-  # rx subrule "O" subtype=capture negate=
-    rx976_cur."!cursor_pos"(rx976_pos)
-    $P10 = rx976_cur."O"("%methodop")
-    unless $P10, rx976_fail
-    rx976_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("O")
-    rx976_pos = $P10."pos"()
-.annotate 'line', 469
-  # rx pass
-    rx976_cur."!cursor_pass"(rx976_pos, "postcircumfix:sym<[ ]>")
-    if_null rx976_debug, debug_813
-    rx976_cur."!cursor_debug"("PASS", "postcircumfix:sym<[ ]>", " at pos=", rx976_pos)
-  debug_813:
-    .return (rx976_cur)
-  rx976_restart:
+    ne $I10, -1, rxscan976_done
+    goto rxscan976_scan
+  rxscan976_loop:
+    ($P10) = rx973_cur."from"()
+    inc $P10
+    set rx973_pos, $P10
+    ge rx973_pos, rx973_eos, rxscan976_done
+  rxscan976_scan:
+    set_addr $I10, rxscan976_loop
+    rx973_cur."!mark_push"(0, rx973_pos, $I10)
+  rxscan976_done:
 .annotate 'line', 447
-    if_null rx976_debug, debug_814
-    rx976_cur."!cursor_debug"("NEXT", "postcircumfix:sym<[ ]>")
-  debug_814:
-  rx976_fail:
-    (rx976_rep, rx976_pos, $I10, $P10) = rx976_cur."!mark_fail"(0)
-    lt rx976_pos, -1, rx976_done
-    eq rx976_pos, -1, rx976_fail
-    jump $I10
-  rx976_done:
-    rx976_cur."!cursor_fail"()
-    if_null rx976_debug, debug_815
-    rx976_cur."!cursor_debug"("FAIL", "postcircumfix:sym<[ ]>")
-  debug_815:
-    .return (rx976_cur)
+  # rx enumcharlist negate=0 zerowidth
+    sub $I10, rx973_pos, rx973_off
+    substr $S10, rx973_tgt, $I10, 1
+    index $I11, "{", $S10
+    lt $I11, 0, rx973_fail
+  # rx subrule "pblock" subtype=capture negate=
+    rx973_cur."!cursor_pos"(rx973_pos)
+    $P10 = rx973_cur."pblock"()
+    unless $P10, rx973_fail
+    rx973_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("pblock")
+    rx973_pos = $P10."pos"()
+  # rx pass
+    rx973_cur."!cursor_pass"(rx973_pos, "circumfix:sym<{ }>")
+    if_null rx973_debug, debug_807
+    rx973_cur."!cursor_debug"("PASS", "circumfix:sym<{ }>", " at pos=", rx973_pos)
+  debug_807:
+    .return (rx973_cur)
+  rx973_restart:
+.annotate 'line', 4
+    if_null rx973_debug, debug_808
+    rx973_cur."!cursor_debug"("NEXT", "circumfix:sym<{ }>")
+  debug_808:
+  rx973_fail:
+    (rx973_rep, rx973_pos, $I10, $P10) = rx973_cur."!mark_fail"(0)
+    lt rx973_pos, -1, rx973_done
+    eq rx973_pos, -1, rx973_fail
+    jump $I10
+  rx973_done:
+    rx973_cur."!cursor_fail"()
+    if_null rx973_debug, debug_809
+    rx973_cur."!cursor_debug"("FAIL", "circumfix:sym<{ }>")
+  debug_809:
+    .return (rx973_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<[ ]>"  :subid("245_1282324002.40722") :method
-.annotate 'line', 447
-    $P978 = self."!PREFIX__!subrule"("ws", "[")
-    new $P979, "ResizablePMCArray"
-    push $P979, $P978
-    .return ($P979)
+.sub "!PREFIX__circumfix:sym<{ }>"  :subid("241_1284728478.15265") :method
+.annotate 'line', 4
+    new $P975, "ResizablePMCArray"
+    push $P975, "{"
+    .return ($P975)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<{ }>"  :subid("246_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx982_tgt
-    .local int rx982_pos
-    .local int rx982_off
-    .local int rx982_eos
-    .local int rx982_rep
-    .local pmc rx982_cur
-    .local pmc rx982_debug
-    (rx982_cur, rx982_pos, rx982_tgt, $I10) = self."!cursor_start"()
-    getattribute rx982_debug, rx982_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx982_cur
-    .local pmc match
-    .lex "$/", match
-    length rx982_eos, rx982_tgt
-    gt rx982_pos, rx982_eos, rx982_done
-    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:
-    eq $I10, 1, rx982_restart
-    if_null rx982_debug, debug_816
-    rx982_cur."!cursor_debug"("START", "postcircumfix:sym<{ }>")
-  debug_816:
+.sub "circumfix:sym<sigil>"  :subid("242_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 4
+    .local string rx978_tgt
+    .local int rx978_pos
+    .local int rx978_off
+    .local int rx978_eos
+    .local int rx978_rep
+    .local pmc rx978_cur
+    .local pmc rx978_debug
+    (rx978_cur, rx978_pos, rx978_tgt, $I10) = self."!cursor_start"()
+    getattribute rx978_debug, rx978_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx978_cur
+    .local pmc match
+    .lex "$/", match
+    length rx978_eos, rx978_tgt
+    gt rx978_pos, rx978_eos, rx978_done
+    set rx978_off, 0
+    lt rx978_pos, 2, rx978_start
+    sub rx978_off, rx978_pos, 1
+    substr rx978_tgt, rx978_tgt, rx978_off
+  rx978_start:
+    eq $I10, 1, rx978_restart
+    if_null rx978_debug, debug_810
+    rx978_cur."!cursor_debug"("START", "circumfix:sym<sigil>")
+  debug_810:
     $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', 475
-  # rx literal  "{"
-    add $I11, rx982_pos, 1
-    gt $I11, rx982_eos, rx982_fail
-    sub $I11, rx982_pos, rx982_off
-    ord $I11, rx982_tgt, $I11
-    ne $I11, 123, rx982_fail
-    add rx982_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx982_cur."!cursor_pos"(rx982_pos)
-    $P10 = rx982_cur."ws"()
-    unless $P10, rx982_fail
-    rx982_pos = $P10."pos"()
-  # rx subrule "EXPR" subtype=capture negate=
-    rx982_cur."!cursor_pos"(rx982_pos)
-    $P10 = rx982_cur."EXPR"()
-    unless $P10, rx982_fail
-    rx982_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("EXPR")
-    rx982_pos = $P10."pos"()
-  # rx literal  "}"
-    add $I11, rx982_pos, 1
-    gt $I11, rx982_eos, rx982_fail
-    sub $I11, rx982_pos, rx982_off
-    ord $I11, rx982_tgt, $I11
-    ne $I11, 125, rx982_fail
-    add rx982_pos, 1
-.annotate 'line', 476
-  # rx subrule "O" subtype=capture negate=
-    rx982_cur."!cursor_pos"(rx982_pos)
-    $P10 = rx982_cur."O"("%methodop")
-    unless $P10, rx982_fail
-    rx982_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("O")
-    rx982_pos = $P10."pos"()
-.annotate 'line', 474
-  # rx pass
-    rx982_cur."!cursor_pass"(rx982_pos, "postcircumfix:sym<{ }>")
-    if_null rx982_debug, debug_817
-    rx982_cur."!cursor_debug"("PASS", "postcircumfix:sym<{ }>", " at pos=", rx982_pos)
-  debug_817:
-    .return (rx982_cur)
-  rx982_restart:
-.annotate 'line', 447
-    if_null rx982_debug, debug_818
-    rx982_cur."!cursor_debug"("NEXT", "postcircumfix:sym<{ }>")
-  debug_818:
-  rx982_fail:
-    (rx982_rep, rx982_pos, $I10, $P10) = rx982_cur."!mark_fail"(0)
-    lt rx982_pos, -1, rx982_done
-    eq rx982_pos, -1, rx982_fail
-    jump $I10
-  rx982_done:
-    rx982_cur."!cursor_fail"()
-    if_null rx982_debug, debug_819
-    rx982_cur."!cursor_debug"("FAIL", "postcircumfix:sym<{ }>")
-  debug_819:
-    .return (rx982_cur)
+    ne $I10, -1, rxscan982_done
+    goto rxscan982_scan
+  rxscan982_loop:
+    ($P10) = rx978_cur."from"()
+    inc $P10
+    set rx978_pos, $P10
+    ge rx978_pos, rx978_eos, rxscan982_done
+  rxscan982_scan:
+    set_addr $I10, rxscan982_loop
+    rx978_cur."!mark_push"(0, rx978_pos, $I10)
+  rxscan982_done:
+.annotate 'line', 448
+  # rx subrule "sigil" subtype=capture negate=
+    rx978_cur."!cursor_pos"(rx978_pos)
+    $P10 = rx978_cur."sigil"()
+    unless $P10, rx978_fail
+    rx978_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sigil")
+    rx978_pos = $P10."pos"()
+  # rx literal  "("
+    add $I11, rx978_pos, 1
+    gt $I11, rx978_eos, rx978_fail
+    sub $I11, rx978_pos, rx978_off
+    ord $I11, rx978_tgt, $I11
+    ne $I11, 40, rx978_fail
+    add rx978_pos, 1
+  # rx subrule "semilist" subtype=capture negate=
+    rx978_cur."!cursor_pos"(rx978_pos)
+    $P10 = rx978_cur."semilist"()
+    unless $P10, rx978_fail
+    rx978_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("semilist")
+    rx978_pos = $P10."pos"()
+  alt983_0:
+    set_addr $I10, alt983_1
+    rx978_cur."!mark_push"(0, rx978_pos, $I10)
+  # rx literal  ")"
+    add $I11, rx978_pos, 1
+    gt $I11, rx978_eos, rx978_fail
+    sub $I11, rx978_pos, rx978_off
+    ord $I11, rx978_tgt, $I11
+    ne $I11, 41, rx978_fail
+    add rx978_pos, 1
+    goto alt983_end
+  alt983_1:
+  # rx subrule "FAILGOAL" subtype=method negate=
+    rx978_cur."!cursor_pos"(rx978_pos)
+    $P10 = rx978_cur."FAILGOAL"("')'")
+    unless $P10, rx978_fail
+    goto rxsubrule985_pass
+  rxsubrule985_back:
+    $P10 = $P10."!cursor_next"()
+    unless $P10, rx978_fail
+  rxsubrule985_pass:
+    set_addr $I10, rxsubrule985_back
+    rx978_cur."!mark_push"(0, rx978_pos, $I10, $P10)
+    rx978_pos = $P10."pos"()
+  alt983_end:
+  # rx pass
+    rx978_cur."!cursor_pass"(rx978_pos, "circumfix:sym<sigil>")
+    if_null rx978_debug, debug_811
+    rx978_cur."!cursor_debug"("PASS", "circumfix:sym<sigil>", " at pos=", rx978_pos)
+  debug_811:
+    .return (rx978_cur)
+  rx978_restart:
+.annotate 'line', 4
+    if_null rx978_debug, debug_812
+    rx978_cur."!cursor_debug"("NEXT", "circumfix:sym<sigil>")
+  debug_812:
+  rx978_fail:
+    (rx978_rep, rx978_pos, $I10, $P10) = rx978_cur."!mark_fail"(0)
+    lt rx978_pos, -1, rx978_done
+    eq rx978_pos, -1, rx978_fail
+    jump $I10
+  rx978_done:
+    rx978_cur."!cursor_fail"()
+    if_null rx978_debug, debug_813
+    rx978_cur."!cursor_debug"("FAIL", "circumfix:sym<sigil>")
+  debug_813:
+    .return (rx978_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<{ }>"  :subid("247_1282324002.40722") :method
-.annotate 'line', 447
-    $P984 = self."!PREFIX__!subrule"("ws", "{")
-    new $P985, "ResizablePMCArray"
-    push $P985, $P984
-    .return ($P985)
+.sub "!PREFIX__circumfix:sym<sigil>"  :subid("243_1284728478.15265") :method
+.annotate 'line', 4
+    $P980 = self."!PREFIX__!subrule"("sigil", "")
+    new $P981, "ResizablePMCArray"
+    push $P981, $P980
+    .return ($P981)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<ang>"  :subid("248_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx988_tgt
-    .local int rx988_pos
-    .local int rx988_off
-    .local int rx988_eos
-    .local int rx988_rep
-    .local pmc rx988_cur
-    .local pmc rx988_debug
-    (rx988_cur, rx988_pos, rx988_tgt, $I10) = self."!cursor_start"()
-    getattribute rx988_debug, rx988_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx988_cur
-    .local pmc match
-    .lex "$/", match
-    length rx988_eos, rx988_tgt
-    gt rx988_pos, rx988_eos, rx988_done
-    set rx988_off, 0
-    lt rx988_pos, 2, rx988_start
-    sub rx988_off, rx988_pos, 1
-    substr rx988_tgt, rx988_tgt, rx988_off
-  rx988_start:
-    eq $I10, 1, rx988_restart
-    if_null rx988_debug, debug_820
-    rx988_cur."!cursor_debug"("START", "postcircumfix:sym<ang>")
-  debug_820:
+.sub "semilist"  :subid("244_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 4
+    .local string rx987_tgt
+    .local int rx987_pos
+    .local int rx987_off
+    .local int rx987_eos
+    .local int rx987_rep
+    .local pmc rx987_cur
+    .local pmc rx987_debug
+    (rx987_cur, rx987_pos, rx987_tgt, $I10) = self."!cursor_start"()
+    getattribute rx987_debug, rx987_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx987_cur
+    .local pmc match
+    .lex "$/", match
+    length rx987_eos, rx987_tgt
+    gt rx987_pos, rx987_eos, rx987_done
+    set rx987_off, 0
+    lt rx987_pos, 2, rx987_start
+    sub rx987_off, rx987_pos, 1
+    substr rx987_tgt, rx987_tgt, rx987_off
+  rx987_start:
+    eq $I10, 1, rx987_restart
+    if_null rx987_debug, debug_814
+    rx987_cur."!cursor_debug"("START", "semilist")
+  debug_814:
     $I10 = self.'from'()
     ne $I10, -1, rxscan991_done
     goto rxscan991_scan
   rxscan991_loop:
-    ($P10) = rx988_cur."from"()
+    ($P10) = rx987_cur."from"()
     inc $P10
-    set rx988_pos, $P10
-    ge rx988_pos, rx988_eos, rxscan991_done
+    set rx987_pos, $P10
+    ge rx987_pos, rx987_eos, rxscan991_done
   rxscan991_scan:
     set_addr $I10, rxscan991_loop
-    rx988_cur."!mark_push"(0, rx988_pos, $I10)
+    rx987_cur."!mark_push"(0, rx987_pos, $I10)
   rxscan991_done:
-.annotate 'line', 480
-  # rx enumcharlist negate=0 zerowidth
-    ge rx988_pos, rx988_eos, rx988_fail
-    sub $I10, rx988_pos, rx988_off
-    substr $S10, rx988_tgt, $I10, 1
-    index $I11, "<", $S10
-    lt $I11, 0, rx988_fail
-  # rx subrule "quote_EXPR" subtype=capture negate=
-    rx988_cur."!cursor_pos"(rx988_pos)
-    $P10 = rx988_cur."quote_EXPR"(":q")
-    unless $P10, rx988_fail
-    rx988_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote_EXPR")
-    rx988_pos = $P10."pos"()
-.annotate 'line', 481
-  # rx subrule "O" subtype=capture negate=
-    rx988_cur."!cursor_pos"(rx988_pos)
-    $P10 = rx988_cur."O"("%methodop")
-    unless $P10, rx988_fail
-    rx988_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("O")
-    rx988_pos = $P10."pos"()
-.annotate 'line', 479
-  # rx pass
-    rx988_cur."!cursor_pass"(rx988_pos, "postcircumfix:sym<ang>")
-    if_null rx988_debug, debug_821
-    rx988_cur."!cursor_debug"("PASS", "postcircumfix:sym<ang>", " at pos=", rx988_pos)
-  debug_821:
-    .return (rx988_cur)
-  rx988_restart:
-.annotate 'line', 447
-    if_null rx988_debug, debug_822
-    rx988_cur."!cursor_debug"("NEXT", "postcircumfix:sym<ang>")
-  debug_822:
-  rx988_fail:
-    (rx988_rep, rx988_pos, $I10, $P10) = rx988_cur."!mark_fail"(0)
-    lt rx988_pos, -1, rx988_done
-    eq rx988_pos, -1, rx988_fail
-    jump $I10
-  rx988_done:
-    rx988_cur."!cursor_fail"()
-    if_null rx988_debug, debug_823
-    rx988_cur."!cursor_debug"("FAIL", "postcircumfix:sym<ang>")
-  debug_823:
-    .return (rx988_cur)
+.annotate 'line', 450
+  # rx subrule "ws" subtype=method negate=
+    rx987_cur."!cursor_pos"(rx987_pos)
+    $P10 = rx987_cur."ws"()
+    unless $P10, rx987_fail
+    rx987_pos = $P10."pos"()
+  # rx subrule "statement" subtype=capture negate=
+    rx987_cur."!cursor_pos"(rx987_pos)
+    $P10 = rx987_cur."statement"()
+    unless $P10, rx987_fail
+    rx987_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("statement")
+    rx987_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx987_cur."!cursor_pos"(rx987_pos)
+    $P10 = rx987_cur."ws"()
+    unless $P10, rx987_fail
+    rx987_pos = $P10."pos"()
+  # rx pass
+    rx987_cur."!cursor_pass"(rx987_pos, "semilist")
+    if_null rx987_debug, debug_815
+    rx987_cur."!cursor_debug"("PASS", "semilist", " at pos=", rx987_pos)
+  debug_815:
+    .return (rx987_cur)
+  rx987_restart:
+.annotate 'line', 4
+    if_null rx987_debug, debug_816
+    rx987_cur."!cursor_debug"("NEXT", "semilist")
+  debug_816:
+  rx987_fail:
+    (rx987_rep, rx987_pos, $I10, $P10) = rx987_cur."!mark_fail"(0)
+    lt rx987_pos, -1, rx987_done
+    eq rx987_pos, -1, rx987_fail
+    jump $I10
+  rx987_done:
+    rx987_cur."!cursor_fail"()
+    if_null rx987_debug, debug_817
+    rx987_cur."!cursor_debug"("FAIL", "semilist")
+  debug_817:
+    .return (rx987_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<ang>"  :subid("249_1282324002.40722") :method
-.annotate 'line', 447
+.sub "!PREFIX__semilist"  :subid("245_1284728478.15265") :method
+.annotate 'line', 4
+    $P989 = self."!PREFIX__!subrule"("ws", "")
     new $P990, "ResizablePMCArray"
-    push $P990, "<"
+    push $P990, $P989
     .return ($P990)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<( )>"  :subid("250_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx993_tgt
-    .local int rx993_pos
-    .local int rx993_off
-    .local int rx993_eos
-    .local int rx993_rep
-    .local pmc rx993_cur
-    .local pmc rx993_debug
-    (rx993_cur, rx993_pos, rx993_tgt, $I10) = self."!cursor_start"()
-    getattribute rx993_debug, rx993_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx993_cur
-    .local pmc match
-    .lex "$/", match
-    length rx993_eos, rx993_tgt
-    gt rx993_pos, rx993_eos, rx993_done
-    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:
-    eq $I10, 1, rx993_restart
-    if_null rx993_debug, debug_824
-    rx993_cur."!cursor_debug"("START", "postcircumfix:sym<( )>")
-  debug_824:
+.sub "infixish"  :subid("246_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx995_tgt
+    .local int rx995_pos
+    .local int rx995_off
+    .local int rx995_eos
+    .local int rx995_rep
+    .local pmc rx995_cur
+    .local pmc rx995_debug
+    (rx995_cur, rx995_pos, rx995_tgt, $I10) = self."!cursor_start"()
+    getattribute rx995_debug, rx995_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx995_cur
+    .local pmc match
+    .lex "$/", match
+    length rx995_eos, rx995_tgt
+    gt rx995_pos, rx995_eos, rx995_done
+    set rx995_off, 0
+    lt rx995_pos, 2, rx995_start
+    sub rx995_off, rx995_pos, 1
+    substr rx995_tgt, rx995_tgt, rx995_off
+  rx995_start:
+    eq $I10, 1, rx995_restart
+    if_null rx995_debug, debug_818
+    rx995_cur."!cursor_debug"("START", "infixish")
+  debug_818:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan997_done
-    goto rxscan997_scan
-  rxscan997_loop:
-    ($P10) = rx993_cur."from"()
-    inc $P10
-    set rx993_pos, $P10
-    ge rx993_pos, rx993_eos, rxscan997_done
-  rxscan997_scan:
-    set_addr $I10, rxscan997_loop
-    rx993_cur."!mark_push"(0, rx993_pos, $I10)
-  rxscan997_done:
-.annotate 'line', 485
-  # rx literal  "("
-    add $I11, rx993_pos, 1
-    gt $I11, rx993_eos, rx993_fail
-    sub $I11, rx993_pos, rx993_off
-    ord $I11, rx993_tgt, $I11
-    ne $I11, 40, rx993_fail
-    add rx993_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx993_cur."!cursor_pos"(rx993_pos)
-    $P10 = rx993_cur."ws"()
-    unless $P10, rx993_fail
-    rx993_pos = $P10."pos"()
-  # rx subrule "arglist" subtype=capture negate=
-    rx993_cur."!cursor_pos"(rx993_pos)
-    $P10 = rx993_cur."arglist"()
-    unless $P10, rx993_fail
-    rx993_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("arglist")
-    rx993_pos = $P10."pos"()
-  # rx literal  ")"
-    add $I11, rx993_pos, 1
-    gt $I11, rx993_eos, rx993_fail
-    sub $I11, rx993_pos, rx993_off
-    ord $I11, rx993_tgt, $I11
-    ne $I11, 41, rx993_fail
-    add rx993_pos, 1
-.annotate 'line', 486
-  # rx subrule "O" subtype=capture negate=
-    rx993_cur."!cursor_pos"(rx993_pos)
-    $P10 = rx993_cur."O"("%methodop")
-    unless $P10, rx993_fail
-    rx993_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("O")
-    rx993_pos = $P10."pos"()
-.annotate 'line', 484
+    ne $I10, -1, rxscan998_done
+    goto rxscan998_scan
+  rxscan998_loop:
+    ($P10) = rx995_cur."from"()
+    inc $P10
+    set rx995_pos, $P10
+    ge rx995_pos, rx995_eos, rxscan998_done
+  rxscan998_scan:
+    set_addr $I10, rxscan998_loop
+    rx995_cur."!mark_push"(0, rx995_pos, $I10)
+  rxscan998_done:
+.annotate 'line', 473
+  # rx subrule "infixstopper" subtype=zerowidth negate=1
+    rx995_cur."!cursor_pos"(rx995_pos)
+    $P10 = rx995_cur."infixstopper"()
+    if $P10, rx995_fail
+  # rx subrule "infix" subtype=capture negate=
+    rx995_cur."!cursor_pos"(rx995_pos)
+    $P10 = rx995_cur."infix"()
+    unless $P10, rx995_fail
+    rx995_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("OPER=infix")
+    rx995_pos = $P10."pos"()
   # rx pass
-    rx993_cur."!cursor_pass"(rx993_pos, "postcircumfix:sym<( )>")
-    if_null rx993_debug, debug_825
-    rx993_cur."!cursor_debug"("PASS", "postcircumfix:sym<( )>", " at pos=", rx993_pos)
-  debug_825:
-    .return (rx993_cur)
-  rx993_restart:
-.annotate 'line', 447
-    if_null rx993_debug, debug_826
-    rx993_cur."!cursor_debug"("NEXT", "postcircumfix:sym<( )>")
-  debug_826:
-  rx993_fail:
-    (rx993_rep, rx993_pos, $I10, $P10) = rx993_cur."!mark_fail"(0)
-    lt rx993_pos, -1, rx993_done
-    eq rx993_pos, -1, rx993_fail
-    jump $I10
-  rx993_done:
-    rx993_cur."!cursor_fail"()
-    if_null rx993_debug, debug_827
-    rx993_cur."!cursor_debug"("FAIL", "postcircumfix:sym<( )>")
-  debug_827:
-    .return (rx993_cur)
+    rx995_cur."!cursor_pass"(rx995_pos, "infixish")
+    if_null rx995_debug, debug_819
+    rx995_cur."!cursor_debug"("PASS", "infixish", " at pos=", rx995_pos)
+  debug_819:
+    .return (rx995_cur)
+  rx995_restart:
+.annotate 'line', 454
+    if_null rx995_debug, debug_820
+    rx995_cur."!cursor_debug"("NEXT", "infixish")
+  debug_820:
+  rx995_fail:
+    (rx995_rep, rx995_pos, $I10, $P10) = rx995_cur."!mark_fail"(0)
+    lt rx995_pos, -1, rx995_done
+    eq rx995_pos, -1, rx995_fail
+    jump $I10
+  rx995_done:
+    rx995_cur."!cursor_fail"()
+    if_null rx995_debug, debug_821
+    rx995_cur."!cursor_debug"("FAIL", "infixish")
+  debug_821:
+    .return (rx995_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<( )>"  :subid("251_1282324002.40722") :method
-.annotate 'line', 447
-    $P995 = self."!PREFIX__!subrule"("ws", "(")
-    new $P996, "ResizablePMCArray"
-    push $P996, $P995
-    .return ($P996)
+.sub "!PREFIX__infixish"  :subid("247_1284728478.15265") :method
+.annotate 'line', 454
+    new $P997, "ResizablePMCArray"
+    push $P997, ""
+    .return ($P997)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postfix:sym<.>"  :subid("252_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx999_tgt
-    .local int rx999_pos
-    .local int rx999_off
-    .local int rx999_eos
-    .local int rx999_rep
-    .local pmc rx999_cur
-    .local pmc rx999_debug
-    (rx999_cur, rx999_pos, rx999_tgt, $I10) = self."!cursor_start"()
-    getattribute rx999_debug, rx999_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx999_cur
-    .local pmc match
-    .lex "$/", match
-    length rx999_eos, rx999_tgt
-    gt rx999_pos, rx999_eos, rx999_done
-    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:
-    eq $I10, 1, rx999_restart
-    if_null rx999_debug, debug_828
-    rx999_cur."!cursor_debug"("START", "postfix:sym<.>")
-  debug_828:
+.sub "infixstopper"  :subid("248_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1000_tgt
+    .local int rx1000_pos
+    .local int rx1000_off
+    .local int rx1000_eos
+    .local int rx1000_rep
+    .local pmc rx1000_cur
+    .local pmc rx1000_debug
+    (rx1000_cur, rx1000_pos, rx1000_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1000_debug, rx1000_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1000_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1000_eos, rx1000_tgt
+    gt rx1000_pos, rx1000_eos, rx1000_done
+    set rx1000_off, 0
+    lt rx1000_pos, 2, rx1000_start
+    sub rx1000_off, rx1000_pos, 1
+    substr rx1000_tgt, rx1000_tgt, rx1000_off
+  rx1000_start:
+    eq $I10, 1, rx1000_restart
+    if_null rx1000_debug, debug_822
+    rx1000_cur."!cursor_debug"("START", "infixstopper")
+  debug_822:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1003_done
     goto rxscan1003_scan
   rxscan1003_loop:
-    ($P10) = rx999_cur."from"()
+    ($P10) = rx1000_cur."from"()
     inc $P10
-    set rx999_pos, $P10
-    ge rx999_pos, rx999_eos, rxscan1003_done
+    set rx1000_pos, $P10
+    ge rx1000_pos, rx1000_eos, rxscan1003_done
   rxscan1003_scan:
     set_addr $I10, rxscan1003_loop
-    rx999_cur."!mark_push"(0, rx999_pos, $I10)
+    rx1000_cur."!mark_push"(0, rx1000_pos, $I10)
   rxscan1003_done:
-.annotate 'line', 489
-  # rx subrule "dotty" subtype=capture negate=
-    rx999_cur."!cursor_pos"(rx999_pos)
-    $P10 = rx999_cur."dotty"()
-    unless $P10, rx999_fail
-    rx999_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("dotty")
-    rx999_pos = $P10."pos"()
-  # rx subrule "O" subtype=capture negate=
-    rx999_cur."!cursor_pos"(rx999_pos)
-    $P10 = rx999_cur."O"("%methodop")
-    unless $P10, rx999_fail
-    rx999_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("O")
-    rx999_pos = $P10."pos"()
-  # rx pass
-    rx999_cur."!cursor_pass"(rx999_pos, "postfix:sym<.>")
-    if_null rx999_debug, debug_829
-    rx999_cur."!cursor_debug"("PASS", "postfix:sym<.>", " at pos=", rx999_pos)
-  debug_829:
-    .return (rx999_cur)
-  rx999_restart:
-.annotate 'line', 447
-    if_null rx999_debug, debug_830
-    rx999_cur."!cursor_debug"("NEXT", "postfix:sym<.>")
-  debug_830:
-  rx999_fail:
-    (rx999_rep, rx999_pos, $I10, $P10) = rx999_cur."!mark_fail"(0)
-    lt rx999_pos, -1, rx999_done
-    eq rx999_pos, -1, rx999_fail
-    jump $I10
-  rx999_done:
-    rx999_cur."!cursor_fail"()
-    if_null rx999_debug, debug_831
-    rx999_cur."!cursor_debug"("FAIL", "postfix:sym<.>")
-  debug_831:
-    .return (rx999_cur)
+.annotate 'line', 474
+  # rx subrule "lambda" subtype=zerowidth negate=
+    rx1000_cur."!cursor_pos"(rx1000_pos)
+    $P10 = rx1000_cur."lambda"()
+    unless $P10, rx1000_fail
+  # rx pass
+    rx1000_cur."!cursor_pass"(rx1000_pos, "infixstopper")
+    if_null rx1000_debug, debug_823
+    rx1000_cur."!cursor_debug"("PASS", "infixstopper", " at pos=", rx1000_pos)
+  debug_823:
+    .return (rx1000_cur)
+  rx1000_restart:
+.annotate 'line', 454
+    if_null rx1000_debug, debug_824
+    rx1000_cur."!cursor_debug"("NEXT", "infixstopper")
+  debug_824:
+  rx1000_fail:
+    (rx1000_rep, rx1000_pos, $I10, $P10) = rx1000_cur."!mark_fail"(0)
+    lt rx1000_pos, -1, rx1000_done
+    eq rx1000_pos, -1, rx1000_fail
+    jump $I10
+  rx1000_done:
+    rx1000_cur."!cursor_fail"()
+    if_null rx1000_debug, debug_825
+    rx1000_cur."!cursor_debug"("FAIL", "infixstopper")
+  debug_825:
+    .return (rx1000_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postfix:sym<.>"  :subid("253_1282324002.40722") :method
-.annotate 'line', 447
-    $P1001 = self."!PREFIX__!subrule"("dotty", "")
+.sub "!PREFIX__infixstopper"  :subid("249_1284728478.15265") :method
+.annotate 'line', 454
     new $P1002, "ResizablePMCArray"
-    push $P1002, $P1001
+    push $P1002, ""
     .return ($P1002)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<++>"  :subid("254_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
+.sub "postcircumfix:sym<[ ]>"  :subid("250_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
     .local string rx1005_tgt
     .local int rx1005_pos
     .local int rx1005_off
@@ -14123,9 +13891,9 @@
     substr rx1005_tgt, rx1005_tgt, rx1005_off
   rx1005_start:
     eq $I10, 1, rx1005_restart
-    if_null rx1005_debug, debug_832
-    rx1005_cur."!cursor_debug"("START", "prefix:sym<++>")
-  debug_832:
+    if_null rx1005_debug, debug_826
+    rx1005_cur."!cursor_debug"("START", "postcircumfix:sym<[ ]>")
+  debug_826:
     $I10 = self.'from'()
     ne $I10, -1, rxscan1009_done
     goto rxscan1009_scan
@@ -14138,46 +13906,53 @@
     set_addr $I10, rxscan1009_loop
     rx1005_cur."!mark_push"(0, rx1005_pos, $I10)
   rxscan1009_done:
-.annotate 'line', 491
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_1010_fail
-    rx1005_cur."!mark_push"(0, rx1005_pos, $I10)
-  # rx literal  "++"
-    add $I11, rx1005_pos, 2
+.annotate 'line', 477
+  # rx literal  "["
+    add $I11, rx1005_pos, 1
     gt $I11, rx1005_eos, rx1005_fail
     sub $I11, rx1005_pos, rx1005_off
-    substr $S10, rx1005_tgt, $I11, 2
-    ne $S10, "++", rx1005_fail
-    add rx1005_pos, 2
-    set_addr $I10, rxcap_1010_fail
-    ($I12, $I11) = rx1005_cur."!mark_peek"($I10)
-    rx1005_cur."!cursor_pos"($I11)
-    ($P10) = rx1005_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1005_pos, "")
+    ord $I11, rx1005_tgt, $I11
+    ne $I11, 91, rx1005_fail
+    add rx1005_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx1005_cur."!cursor_pos"(rx1005_pos)
+    $P10 = rx1005_cur."ws"()
+    unless $P10, rx1005_fail
+    rx1005_pos = $P10."pos"()
+  # rx subrule "EXPR" subtype=capture negate=
+    rx1005_cur."!cursor_pos"(rx1005_pos)
+    $P10 = rx1005_cur."EXPR"()
+    unless $P10, rx1005_fail
     rx1005_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_1010_done
-  rxcap_1010_fail:
-    goto rx1005_fail
-  rxcap_1010_done:
+    $P10."!cursor_names"("EXPR")
+    rx1005_pos = $P10."pos"()
+  # rx literal  "]"
+    add $I11, rx1005_pos, 1
+    gt $I11, rx1005_eos, rx1005_fail
+    sub $I11, rx1005_pos, rx1005_off
+    ord $I11, rx1005_tgt, $I11
+    ne $I11, 93, rx1005_fail
+    add rx1005_pos, 1
+.annotate 'line', 478
   # rx subrule "O" subtype=capture negate=
     rx1005_cur."!cursor_pos"(rx1005_pos)
-    $P10 = rx1005_cur."O"("%autoincrement, :pirop<inc>")
+    $P10 = rx1005_cur."O"("%methodop")
     unless $P10, rx1005_fail
     rx1005_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
     rx1005_pos = $P10."pos"()
+.annotate 'line', 476
   # rx pass
-    rx1005_cur."!cursor_pass"(rx1005_pos, "prefix:sym<++>")
-    if_null rx1005_debug, debug_833
-    rx1005_cur."!cursor_debug"("PASS", "prefix:sym<++>", " at pos=", rx1005_pos)
-  debug_833:
+    rx1005_cur."!cursor_pass"(rx1005_pos, "postcircumfix:sym<[ ]>")
+    if_null rx1005_debug, debug_827
+    rx1005_cur."!cursor_debug"("PASS", "postcircumfix:sym<[ ]>", " at pos=", rx1005_pos)
+  debug_827:
     .return (rx1005_cur)
   rx1005_restart:
-.annotate 'line', 447
-    if_null rx1005_debug, debug_834
-    rx1005_cur."!cursor_debug"("NEXT", "prefix:sym<++>")
-  debug_834:
+.annotate 'line', 454
+    if_null rx1005_debug, debug_828
+    rx1005_cur."!cursor_debug"("NEXT", "postcircumfix:sym<[ ]>")
+  debug_828:
   rx1005_fail:
     (rx1005_rep, rx1005_pos, $I10, $P10) = rx1005_cur."!mark_fail"(0)
     lt rx1005_pos, -1, rx1005_done
@@ -14185,18 +13960,18 @@
     jump $I10
   rx1005_done:
     rx1005_cur."!cursor_fail"()
-    if_null rx1005_debug, debug_835
-    rx1005_cur."!cursor_debug"("FAIL", "prefix:sym<++>")
-  debug_835:
+    if_null rx1005_debug, debug_829
+    rx1005_cur."!cursor_debug"("FAIL", "postcircumfix:sym<[ ]>")
+  debug_829:
     .return (rx1005_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<++>"  :subid("255_1282324002.40722") :method
-.annotate 'line', 447
-    $P1007 = self."!PREFIX__!subrule"("O", "++")
+.sub "!PREFIX__postcircumfix:sym<[ ]>"  :subid("251_1284728478.15265") :method
+.annotate 'line', 454
+    $P1007 = self."!PREFIX__!subrule"("ws", "[")
     new $P1008, "ResizablePMCArray"
     push $P1008, $P1007
     .return ($P1008)
@@ -14204,5981 +13979,6483 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<-->"  :subid("256_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1012_tgt
-    .local int rx1012_pos
-    .local int rx1012_off
-    .local int rx1012_eos
-    .local int rx1012_rep
-    .local pmc rx1012_cur
-    .local pmc rx1012_debug
-    (rx1012_cur, rx1012_pos, rx1012_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1012_debug, rx1012_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1012_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1012_eos, rx1012_tgt
-    gt rx1012_pos, rx1012_eos, rx1012_done
-    set rx1012_off, 0
-    lt rx1012_pos, 2, rx1012_start
-    sub rx1012_off, rx1012_pos, 1
-    substr rx1012_tgt, rx1012_tgt, rx1012_off
-  rx1012_start:
-    eq $I10, 1, rx1012_restart
-    if_null rx1012_debug, debug_836
-    rx1012_cur."!cursor_debug"("START", "prefix:sym<-->")
-  debug_836:
+.sub "postcircumfix:sym<{ }>"  :subid("252_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1011_tgt
+    .local int rx1011_pos
+    .local int rx1011_off
+    .local int rx1011_eos
+    .local int rx1011_rep
+    .local pmc rx1011_cur
+    .local pmc rx1011_debug
+    (rx1011_cur, rx1011_pos, rx1011_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1011_debug, rx1011_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1011_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1011_eos, rx1011_tgt
+    gt rx1011_pos, rx1011_eos, rx1011_done
+    set rx1011_off, 0
+    lt rx1011_pos, 2, rx1011_start
+    sub rx1011_off, rx1011_pos, 1
+    substr rx1011_tgt, rx1011_tgt, rx1011_off
+  rx1011_start:
+    eq $I10, 1, rx1011_restart
+    if_null rx1011_debug, debug_830
+    rx1011_cur."!cursor_debug"("START", "postcircumfix:sym<{ }>")
+  debug_830:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1016_done
-    goto rxscan1016_scan
-  rxscan1016_loop:
-    ($P10) = rx1012_cur."from"()
-    inc $P10
-    set rx1012_pos, $P10
-    ge rx1012_pos, rx1012_eos, rxscan1016_done
-  rxscan1016_scan:
-    set_addr $I10, rxscan1016_loop
-    rx1012_cur."!mark_push"(0, rx1012_pos, $I10)
-  rxscan1016_done:
-.annotate 'line', 492
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_1017_fail
-    rx1012_cur."!mark_push"(0, rx1012_pos, $I10)
-  # rx literal  "--"
-    add $I11, rx1012_pos, 2
-    gt $I11, rx1012_eos, rx1012_fail
-    sub $I11, rx1012_pos, rx1012_off
-    substr $S10, rx1012_tgt, $I11, 2
-    ne $S10, "--", rx1012_fail
-    add rx1012_pos, 2
-    set_addr $I10, rxcap_1017_fail
-    ($I12, $I11) = rx1012_cur."!mark_peek"($I10)
-    rx1012_cur."!cursor_pos"($I11)
-    ($P10) = rx1012_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1012_pos, "")
-    rx1012_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_1017_done
-  rxcap_1017_fail:
-    goto rx1012_fail
-  rxcap_1017_done:
+    ne $I10, -1, rxscan1015_done
+    goto rxscan1015_scan
+  rxscan1015_loop:
+    ($P10) = rx1011_cur."from"()
+    inc $P10
+    set rx1011_pos, $P10
+    ge rx1011_pos, rx1011_eos, rxscan1015_done
+  rxscan1015_scan:
+    set_addr $I10, rxscan1015_loop
+    rx1011_cur."!mark_push"(0, rx1011_pos, $I10)
+  rxscan1015_done:
+.annotate 'line', 482
+  # rx literal  "{"
+    add $I11, rx1011_pos, 1
+    gt $I11, rx1011_eos, rx1011_fail
+    sub $I11, rx1011_pos, rx1011_off
+    ord $I11, rx1011_tgt, $I11
+    ne $I11, 123, rx1011_fail
+    add rx1011_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx1011_cur."!cursor_pos"(rx1011_pos)
+    $P10 = rx1011_cur."ws"()
+    unless $P10, rx1011_fail
+    rx1011_pos = $P10."pos"()
+  # rx subrule "EXPR" subtype=capture negate=
+    rx1011_cur."!cursor_pos"(rx1011_pos)
+    $P10 = rx1011_cur."EXPR"()
+    unless $P10, rx1011_fail
+    rx1011_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("EXPR")
+    rx1011_pos = $P10."pos"()
+  # rx literal  "}"
+    add $I11, rx1011_pos, 1
+    gt $I11, rx1011_eos, rx1011_fail
+    sub $I11, rx1011_pos, rx1011_off
+    ord $I11, rx1011_tgt, $I11
+    ne $I11, 125, rx1011_fail
+    add rx1011_pos, 1
+.annotate 'line', 483
+  # rx subrule "O" subtype=capture negate=
+    rx1011_cur."!cursor_pos"(rx1011_pos)
+    $P10 = rx1011_cur."O"("%methodop")
+    unless $P10, rx1011_fail
+    rx1011_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("O")
+    rx1011_pos = $P10."pos"()
+.annotate 'line', 481
+  # rx pass
+    rx1011_cur."!cursor_pass"(rx1011_pos, "postcircumfix:sym<{ }>")
+    if_null rx1011_debug, debug_831
+    rx1011_cur."!cursor_debug"("PASS", "postcircumfix:sym<{ }>", " at pos=", rx1011_pos)
+  debug_831:
+    .return (rx1011_cur)
+  rx1011_restart:
+.annotate 'line', 454
+    if_null rx1011_debug, debug_832
+    rx1011_cur."!cursor_debug"("NEXT", "postcircumfix:sym<{ }>")
+  debug_832:
+  rx1011_fail:
+    (rx1011_rep, rx1011_pos, $I10, $P10) = rx1011_cur."!mark_fail"(0)
+    lt rx1011_pos, -1, rx1011_done
+    eq rx1011_pos, -1, rx1011_fail
+    jump $I10
+  rx1011_done:
+    rx1011_cur."!cursor_fail"()
+    if_null rx1011_debug, debug_833
+    rx1011_cur."!cursor_debug"("FAIL", "postcircumfix:sym<{ }>")
+  debug_833:
+    .return (rx1011_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__postcircumfix:sym<{ }>"  :subid("253_1284728478.15265") :method
+.annotate 'line', 454
+    $P1013 = self."!PREFIX__!subrule"("ws", "{")
+    new $P1014, "ResizablePMCArray"
+    push $P1014, $P1013
+    .return ($P1014)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "postcircumfix:sym<ang>"  :subid("254_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1017_tgt
+    .local int rx1017_pos
+    .local int rx1017_off
+    .local int rx1017_eos
+    .local int rx1017_rep
+    .local pmc rx1017_cur
+    .local pmc rx1017_debug
+    (rx1017_cur, rx1017_pos, rx1017_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1017_debug, rx1017_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1017_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1017_eos, rx1017_tgt
+    gt rx1017_pos, rx1017_eos, rx1017_done
+    set rx1017_off, 0
+    lt rx1017_pos, 2, rx1017_start
+    sub rx1017_off, rx1017_pos, 1
+    substr rx1017_tgt, rx1017_tgt, rx1017_off
+  rx1017_start:
+    eq $I10, 1, rx1017_restart
+    if_null rx1017_debug, debug_834
+    rx1017_cur."!cursor_debug"("START", "postcircumfix:sym<ang>")
+  debug_834:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1020_done
+    goto rxscan1020_scan
+  rxscan1020_loop:
+    ($P10) = rx1017_cur."from"()
+    inc $P10
+    set rx1017_pos, $P10
+    ge rx1017_pos, rx1017_eos, rxscan1020_done
+  rxscan1020_scan:
+    set_addr $I10, rxscan1020_loop
+    rx1017_cur."!mark_push"(0, rx1017_pos, $I10)
+  rxscan1020_done:
+.annotate 'line', 487
+  # rx enumcharlist negate=0 zerowidth
+    sub $I10, rx1017_pos, rx1017_off
+    substr $S10, rx1017_tgt, $I10, 1
+    index $I11, "<", $S10
+    lt $I11, 0, rx1017_fail
+  # rx subrule "quote_EXPR" subtype=capture negate=
+    rx1017_cur."!cursor_pos"(rx1017_pos)
+    $P10 = rx1017_cur."quote_EXPR"(":q")
+    unless $P10, rx1017_fail
+    rx1017_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quote_EXPR")
+    rx1017_pos = $P10."pos"()
+.annotate 'line', 488
   # rx subrule "O" subtype=capture negate=
-    rx1012_cur."!cursor_pos"(rx1012_pos)
-    $P10 = rx1012_cur."O"("%autoincrement, :pirop<dec>")
-    unless $P10, rx1012_fail
-    rx1012_cur."!mark_push"(0, -1, 0, $P10)
+    rx1017_cur."!cursor_pos"(rx1017_pos)
+    $P10 = rx1017_cur."O"("%methodop")
+    unless $P10, rx1017_fail
+    rx1017_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1012_pos = $P10."pos"()
+    rx1017_pos = $P10."pos"()
+.annotate 'line', 486
   # rx pass
-    rx1012_cur."!cursor_pass"(rx1012_pos, "prefix:sym<-->")
-    if_null rx1012_debug, debug_837
-    rx1012_cur."!cursor_debug"("PASS", "prefix:sym<-->", " at pos=", rx1012_pos)
+    rx1017_cur."!cursor_pass"(rx1017_pos, "postcircumfix:sym<ang>")
+    if_null rx1017_debug, debug_835
+    rx1017_cur."!cursor_debug"("PASS", "postcircumfix:sym<ang>", " at pos=", rx1017_pos)
+  debug_835:
+    .return (rx1017_cur)
+  rx1017_restart:
+.annotate 'line', 454
+    if_null rx1017_debug, debug_836
+    rx1017_cur."!cursor_debug"("NEXT", "postcircumfix:sym<ang>")
+  debug_836:
+  rx1017_fail:
+    (rx1017_rep, rx1017_pos, $I10, $P10) = rx1017_cur."!mark_fail"(0)
+    lt rx1017_pos, -1, rx1017_done
+    eq rx1017_pos, -1, rx1017_fail
+    jump $I10
+  rx1017_done:
+    rx1017_cur."!cursor_fail"()
+    if_null rx1017_debug, debug_837
+    rx1017_cur."!cursor_debug"("FAIL", "postcircumfix:sym<ang>")
   debug_837:
-    .return (rx1012_cur)
-  rx1012_restart:
-.annotate 'line', 447
-    if_null rx1012_debug, debug_838
-    rx1012_cur."!cursor_debug"("NEXT", "prefix:sym<-->")
-  debug_838:
-  rx1012_fail:
-    (rx1012_rep, rx1012_pos, $I10, $P10) = rx1012_cur."!mark_fail"(0)
-    lt rx1012_pos, -1, rx1012_done
-    eq rx1012_pos, -1, rx1012_fail
-    jump $I10
-  rx1012_done:
-    rx1012_cur."!cursor_fail"()
-    if_null rx1012_debug, debug_839
-    rx1012_cur."!cursor_debug"("FAIL", "prefix:sym<-->")
-  debug_839:
-    .return (rx1012_cur)
+    .return (rx1017_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<-->"  :subid("257_1282324002.40722") :method
-.annotate 'line', 447
-    $P1014 = self."!PREFIX__!subrule"("O", "--")
-    new $P1015, "ResizablePMCArray"
-    push $P1015, $P1014
-    .return ($P1015)
+.sub "!PREFIX__postcircumfix:sym<ang>"  :subid("255_1284728478.15265") :method
+.annotate 'line', 454
+    new $P1019, "ResizablePMCArray"
+    push $P1019, "<"
+    .return ($P1019)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postfix:sym<++>"  :subid("258_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1019_tgt
-    .local int rx1019_pos
-    .local int rx1019_off
-    .local int rx1019_eos
-    .local int rx1019_rep
-    .local pmc rx1019_cur
-    .local pmc rx1019_debug
-    (rx1019_cur, rx1019_pos, rx1019_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1019_debug, rx1019_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1019_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1019_eos, rx1019_tgt
-    gt rx1019_pos, rx1019_eos, rx1019_done
-    set rx1019_off, 0
-    lt rx1019_pos, 2, rx1019_start
-    sub rx1019_off, rx1019_pos, 1
-    substr rx1019_tgt, rx1019_tgt, rx1019_off
-  rx1019_start:
-    eq $I10, 1, rx1019_restart
-    if_null rx1019_debug, debug_840
-    rx1019_cur."!cursor_debug"("START", "postfix:sym<++>")
-  debug_840:
+.sub "postcircumfix:sym<( )>"  :subid("256_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1022_tgt
+    .local int rx1022_pos
+    .local int rx1022_off
+    .local int rx1022_eos
+    .local int rx1022_rep
+    .local pmc rx1022_cur
+    .local pmc rx1022_debug
+    (rx1022_cur, rx1022_pos, rx1022_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1022_debug, rx1022_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1022_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1022_eos, rx1022_tgt
+    gt rx1022_pos, rx1022_eos, rx1022_done
+    set rx1022_off, 0
+    lt rx1022_pos, 2, rx1022_start
+    sub rx1022_off, rx1022_pos, 1
+    substr rx1022_tgt, rx1022_tgt, rx1022_off
+  rx1022_start:
+    eq $I10, 1, rx1022_restart
+    if_null rx1022_debug, debug_838
+    rx1022_cur."!cursor_debug"("START", "postcircumfix:sym<( )>")
+  debug_838:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1023_done
-    goto rxscan1023_scan
-  rxscan1023_loop:
-    ($P10) = rx1019_cur."from"()
-    inc $P10
-    set rx1019_pos, $P10
-    ge rx1019_pos, rx1019_eos, rxscan1023_done
-  rxscan1023_scan:
-    set_addr $I10, rxscan1023_loop
-    rx1019_cur."!mark_push"(0, rx1019_pos, $I10)
-  rxscan1023_done:
-.annotate 'line', 495
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_1024_fail
-    rx1019_cur."!mark_push"(0, rx1019_pos, $I10)
-  # rx literal  "++"
-    add $I11, rx1019_pos, 2
-    gt $I11, rx1019_eos, rx1019_fail
-    sub $I11, rx1019_pos, rx1019_off
-    substr $S10, rx1019_tgt, $I11, 2
-    ne $S10, "++", rx1019_fail
-    add rx1019_pos, 2
-    set_addr $I10, rxcap_1024_fail
-    ($I12, $I11) = rx1019_cur."!mark_peek"($I10)
-    rx1019_cur."!cursor_pos"($I11)
-    ($P10) = rx1019_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1019_pos, "")
-    rx1019_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_1024_done
-  rxcap_1024_fail:
-    goto rx1019_fail
-  rxcap_1024_done:
+    ne $I10, -1, rxscan1026_done
+    goto rxscan1026_scan
+  rxscan1026_loop:
+    ($P10) = rx1022_cur."from"()
+    inc $P10
+    set rx1022_pos, $P10
+    ge rx1022_pos, rx1022_eos, rxscan1026_done
+  rxscan1026_scan:
+    set_addr $I10, rxscan1026_loop
+    rx1022_cur."!mark_push"(0, rx1022_pos, $I10)
+  rxscan1026_done:
+.annotate 'line', 492
+  # rx literal  "("
+    add $I11, rx1022_pos, 1
+    gt $I11, rx1022_eos, rx1022_fail
+    sub $I11, rx1022_pos, rx1022_off
+    ord $I11, rx1022_tgt, $I11
+    ne $I11, 40, rx1022_fail
+    add rx1022_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx1022_cur."!cursor_pos"(rx1022_pos)
+    $P10 = rx1022_cur."ws"()
+    unless $P10, rx1022_fail
+    rx1022_pos = $P10."pos"()
+  # rx subrule "arglist" subtype=capture negate=
+    rx1022_cur."!cursor_pos"(rx1022_pos)
+    $P10 = rx1022_cur."arglist"()
+    unless $P10, rx1022_fail
+    rx1022_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("arglist")
+    rx1022_pos = $P10."pos"()
+  # rx literal  ")"
+    add $I11, rx1022_pos, 1
+    gt $I11, rx1022_eos, rx1022_fail
+    sub $I11, rx1022_pos, rx1022_off
+    ord $I11, rx1022_tgt, $I11
+    ne $I11, 41, rx1022_fail
+    add rx1022_pos, 1
+.annotate 'line', 493
   # rx subrule "O" subtype=capture negate=
-    rx1019_cur."!cursor_pos"(rx1019_pos)
-    $P10 = rx1019_cur."O"("%autoincrement")
-    unless $P10, rx1019_fail
-    rx1019_cur."!mark_push"(0, -1, 0, $P10)
+    rx1022_cur."!cursor_pos"(rx1022_pos)
+    $P10 = rx1022_cur."O"("%methodop")
+    unless $P10, rx1022_fail
+    rx1022_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1019_pos = $P10."pos"()
+    rx1022_pos = $P10."pos"()
+.annotate 'line', 491
   # rx pass
-    rx1019_cur."!cursor_pass"(rx1019_pos, "postfix:sym<++>")
-    if_null rx1019_debug, debug_841
-    rx1019_cur."!cursor_debug"("PASS", "postfix:sym<++>", " at pos=", rx1019_pos)
+    rx1022_cur."!cursor_pass"(rx1022_pos, "postcircumfix:sym<( )>")
+    if_null rx1022_debug, debug_839
+    rx1022_cur."!cursor_debug"("PASS", "postcircumfix:sym<( )>", " at pos=", rx1022_pos)
+  debug_839:
+    .return (rx1022_cur)
+  rx1022_restart:
+.annotate 'line', 454
+    if_null rx1022_debug, debug_840
+    rx1022_cur."!cursor_debug"("NEXT", "postcircumfix:sym<( )>")
+  debug_840:
+  rx1022_fail:
+    (rx1022_rep, rx1022_pos, $I10, $P10) = rx1022_cur."!mark_fail"(0)
+    lt rx1022_pos, -1, rx1022_done
+    eq rx1022_pos, -1, rx1022_fail
+    jump $I10
+  rx1022_done:
+    rx1022_cur."!cursor_fail"()
+    if_null rx1022_debug, debug_841
+    rx1022_cur."!cursor_debug"("FAIL", "postcircumfix:sym<( )>")
   debug_841:
-    .return (rx1019_cur)
-  rx1019_restart:
-.annotate 'line', 447
-    if_null rx1019_debug, debug_842
-    rx1019_cur."!cursor_debug"("NEXT", "postfix:sym<++>")
-  debug_842:
-  rx1019_fail:
-    (rx1019_rep, rx1019_pos, $I10, $P10) = rx1019_cur."!mark_fail"(0)
-    lt rx1019_pos, -1, rx1019_done
-    eq rx1019_pos, -1, rx1019_fail
-    jump $I10
-  rx1019_done:
-    rx1019_cur."!cursor_fail"()
-    if_null rx1019_debug, debug_843
-    rx1019_cur."!cursor_debug"("FAIL", "postfix:sym<++>")
-  debug_843:
-    .return (rx1019_cur)
+    .return (rx1022_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postfix:sym<++>"  :subid("259_1282324002.40722") :method
-.annotate 'line', 447
-    $P1021 = self."!PREFIX__!subrule"("O", "++")
-    new $P1022, "ResizablePMCArray"
-    push $P1022, $P1021
-    .return ($P1022)
+.sub "!PREFIX__postcircumfix:sym<( )>"  :subid("257_1284728478.15265") :method
+.annotate 'line', 454
+    $P1024 = self."!PREFIX__!subrule"("ws", "(")
+    new $P1025, "ResizablePMCArray"
+    push $P1025, $P1024
+    .return ($P1025)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postfix:sym<-->"  :subid("260_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1026_tgt
-    .local int rx1026_pos
-    .local int rx1026_off
-    .local int rx1026_eos
-    .local int rx1026_rep
-    .local pmc rx1026_cur
-    .local pmc rx1026_debug
-    (rx1026_cur, rx1026_pos, rx1026_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1026_debug, rx1026_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1026_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1026_eos, rx1026_tgt
-    gt rx1026_pos, rx1026_eos, rx1026_done
-    set rx1026_off, 0
-    lt rx1026_pos, 2, rx1026_start
-    sub rx1026_off, rx1026_pos, 1
-    substr rx1026_tgt, rx1026_tgt, rx1026_off
-  rx1026_start:
-    eq $I10, 1, rx1026_restart
-    if_null rx1026_debug, debug_844
-    rx1026_cur."!cursor_debug"("START", "postfix:sym<-->")
-  debug_844:
+.sub "postfix:sym<.>"  :subid("258_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1028_tgt
+    .local int rx1028_pos
+    .local int rx1028_off
+    .local int rx1028_eos
+    .local int rx1028_rep
+    .local pmc rx1028_cur
+    .local pmc rx1028_debug
+    (rx1028_cur, rx1028_pos, rx1028_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1028_debug, rx1028_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1028_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1028_eos, rx1028_tgt
+    gt rx1028_pos, rx1028_eos, rx1028_done
+    set rx1028_off, 0
+    lt rx1028_pos, 2, rx1028_start
+    sub rx1028_off, rx1028_pos, 1
+    substr rx1028_tgt, rx1028_tgt, rx1028_off
+  rx1028_start:
+    eq $I10, 1, rx1028_restart
+    if_null rx1028_debug, debug_842
+    rx1028_cur."!cursor_debug"("START", "postfix:sym<.>")
+  debug_842:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1030_done
-    goto rxscan1030_scan
-  rxscan1030_loop:
-    ($P10) = rx1026_cur."from"()
-    inc $P10
-    set rx1026_pos, $P10
-    ge rx1026_pos, rx1026_eos, rxscan1030_done
-  rxscan1030_scan:
-    set_addr $I10, rxscan1030_loop
-    rx1026_cur."!mark_push"(0, rx1026_pos, $I10)
-  rxscan1030_done:
+    ne $I10, -1, rxscan1032_done
+    goto rxscan1032_scan
+  rxscan1032_loop:
+    ($P10) = rx1028_cur."from"()
+    inc $P10
+    set rx1028_pos, $P10
+    ge rx1028_pos, rx1028_eos, rxscan1032_done
+  rxscan1032_scan:
+    set_addr $I10, rxscan1032_loop
+    rx1028_cur."!mark_push"(0, rx1028_pos, $I10)
+  rxscan1032_done:
 .annotate 'line', 496
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_1031_fail
-    rx1026_cur."!mark_push"(0, rx1026_pos, $I10)
-  # rx literal  "--"
-    add $I11, rx1026_pos, 2
-    gt $I11, rx1026_eos, rx1026_fail
-    sub $I11, rx1026_pos, rx1026_off
-    substr $S10, rx1026_tgt, $I11, 2
-    ne $S10, "--", rx1026_fail
-    add rx1026_pos, 2
-    set_addr $I10, rxcap_1031_fail
-    ($I12, $I11) = rx1026_cur."!mark_peek"($I10)
-    rx1026_cur."!cursor_pos"($I11)
-    ($P10) = rx1026_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1026_pos, "")
-    rx1026_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_1031_done
-  rxcap_1031_fail:
-    goto rx1026_fail
-  rxcap_1031_done:
+  # rx subrule "dotty" subtype=capture negate=
+    rx1028_cur."!cursor_pos"(rx1028_pos)
+    $P10 = rx1028_cur."dotty"()
+    unless $P10, rx1028_fail
+    rx1028_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("dotty")
+    rx1028_pos = $P10."pos"()
   # rx subrule "O" subtype=capture negate=
-    rx1026_cur."!cursor_pos"(rx1026_pos)
-    $P10 = rx1026_cur."O"("%autoincrement")
-    unless $P10, rx1026_fail
-    rx1026_cur."!mark_push"(0, -1, 0, $P10)
+    rx1028_cur."!cursor_pos"(rx1028_pos)
+    $P10 = rx1028_cur."O"("%methodop")
+    unless $P10, rx1028_fail
+    rx1028_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1026_pos = $P10."pos"()
+    rx1028_pos = $P10."pos"()
   # rx pass
-    rx1026_cur."!cursor_pass"(rx1026_pos, "postfix:sym<-->")
-    if_null rx1026_debug, debug_845
-    rx1026_cur."!cursor_debug"("PASS", "postfix:sym<-->", " at pos=", rx1026_pos)
+    rx1028_cur."!cursor_pass"(rx1028_pos, "postfix:sym<.>")
+    if_null rx1028_debug, debug_843
+    rx1028_cur."!cursor_debug"("PASS", "postfix:sym<.>", " at pos=", rx1028_pos)
+  debug_843:
+    .return (rx1028_cur)
+  rx1028_restart:
+.annotate 'line', 454
+    if_null rx1028_debug, debug_844
+    rx1028_cur."!cursor_debug"("NEXT", "postfix:sym<.>")
+  debug_844:
+  rx1028_fail:
+    (rx1028_rep, rx1028_pos, $I10, $P10) = rx1028_cur."!mark_fail"(0)
+    lt rx1028_pos, -1, rx1028_done
+    eq rx1028_pos, -1, rx1028_fail
+    jump $I10
+  rx1028_done:
+    rx1028_cur."!cursor_fail"()
+    if_null rx1028_debug, debug_845
+    rx1028_cur."!cursor_debug"("FAIL", "postfix:sym<.>")
   debug_845:
-    .return (rx1026_cur)
-  rx1026_restart:
-.annotate 'line', 447
-    if_null rx1026_debug, debug_846
-    rx1026_cur."!cursor_debug"("NEXT", "postfix:sym<-->")
-  debug_846:
-  rx1026_fail:
-    (rx1026_rep, rx1026_pos, $I10, $P10) = rx1026_cur."!mark_fail"(0)
-    lt rx1026_pos, -1, rx1026_done
-    eq rx1026_pos, -1, rx1026_fail
-    jump $I10
-  rx1026_done:
-    rx1026_cur."!cursor_fail"()
-    if_null rx1026_debug, debug_847
-    rx1026_cur."!cursor_debug"("FAIL", "postfix:sym<-->")
-  debug_847:
-    .return (rx1026_cur)
+    .return (rx1028_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postfix:sym<-->"  :subid("261_1282324002.40722") :method
-.annotate 'line', 447
-    $P1028 = self."!PREFIX__!subrule"("O", "--")
-    new $P1029, "ResizablePMCArray"
-    push $P1029, $P1028
-    .return ($P1029)
+.sub "!PREFIX__postfix:sym<.>"  :subid("259_1284728478.15265") :method
+.annotate 'line', 454
+    $P1030 = self."!PREFIX__!subrule"("dotty", "")
+    new $P1031, "ResizablePMCArray"
+    push $P1031, $P1030
+    .return ($P1031)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<**>"  :subid("262_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1033_tgt
-    .local int rx1033_pos
-    .local int rx1033_off
-    .local int rx1033_eos
-    .local int rx1033_rep
-    .local pmc rx1033_cur
-    .local pmc rx1033_debug
-    (rx1033_cur, rx1033_pos, rx1033_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1033_debug, rx1033_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1033_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1033_eos, rx1033_tgt
-    gt rx1033_pos, rx1033_eos, rx1033_done
-    set rx1033_off, 0
-    lt rx1033_pos, 2, rx1033_start
-    sub rx1033_off, rx1033_pos, 1
-    substr rx1033_tgt, rx1033_tgt, rx1033_off
-  rx1033_start:
-    eq $I10, 1, rx1033_restart
-    if_null rx1033_debug, debug_848
-    rx1033_cur."!cursor_debug"("START", "infix:sym<**>")
-  debug_848:
+.sub "prefix:sym<++>"  :subid("260_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1034_tgt
+    .local int rx1034_pos
+    .local int rx1034_off
+    .local int rx1034_eos
+    .local int rx1034_rep
+    .local pmc rx1034_cur
+    .local pmc rx1034_debug
+    (rx1034_cur, rx1034_pos, rx1034_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1034_debug, rx1034_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1034_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1034_eos, rx1034_tgt
+    gt rx1034_pos, rx1034_eos, rx1034_done
+    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:
+    eq $I10, 1, rx1034_restart
+    if_null rx1034_debug, debug_846
+    rx1034_cur."!cursor_debug"("START", "prefix:sym<++>")
+  debug_846:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1037_done
-    goto rxscan1037_scan
-  rxscan1037_loop:
-    ($P10) = rx1033_cur."from"()
-    inc $P10
-    set rx1033_pos, $P10
-    ge rx1033_pos, rx1033_eos, rxscan1037_done
-  rxscan1037_scan:
-    set_addr $I10, rxscan1037_loop
-    rx1033_cur."!mark_push"(0, rx1033_pos, $I10)
-  rxscan1037_done:
+    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', 498
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1038_fail
-    rx1033_cur."!mark_push"(0, rx1033_pos, $I10)
-  # rx literal  "**"
-    add $I11, rx1033_pos, 2
-    gt $I11, rx1033_eos, rx1033_fail
-    sub $I11, rx1033_pos, rx1033_off
-    substr $S10, rx1033_tgt, $I11, 2
-    ne $S10, "**", rx1033_fail
-    add rx1033_pos, 2
-    set_addr $I10, rxcap_1038_fail
-    ($I12, $I11) = rx1033_cur."!mark_peek"($I10)
-    rx1033_cur."!cursor_pos"($I11)
-    ($P10) = rx1033_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1033_pos, "")
-    rx1033_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1039_fail
+    rx1034_cur."!mark_push"(0, rx1034_pos, $I10)
+  # rx literal  "++"
+    add $I11, rx1034_pos, 2
+    gt $I11, rx1034_eos, rx1034_fail
+    sub $I11, rx1034_pos, rx1034_off
+    substr $S10, rx1034_tgt, $I11, 2
+    ne $S10, "++", rx1034_fail
+    add rx1034_pos, 2
+    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)
     $P10."!cursor_names"("sym")
-    goto rxcap_1038_done
-  rxcap_1038_fail:
-    goto rx1033_fail
-  rxcap_1038_done:
+    goto rxcap_1039_done
+  rxcap_1039_fail:
+    goto rx1034_fail
+  rxcap_1039_done:
   # rx subrule "O" subtype=capture negate=
-    rx1033_cur."!cursor_pos"(rx1033_pos)
-    $P10 = rx1033_cur."O"("%exponentiation, :pirop<pow>")
-    unless $P10, rx1033_fail
-    rx1033_cur."!mark_push"(0, -1, 0, $P10)
+    rx1034_cur."!cursor_pos"(rx1034_pos)
+    $P10 = rx1034_cur."O"("%autoincrement, :pirop<inc>")
+    unless $P10, rx1034_fail
+    rx1034_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1033_pos = $P10."pos"()
+    rx1034_pos = $P10."pos"()
   # rx pass
-    rx1033_cur."!cursor_pass"(rx1033_pos, "infix:sym<**>")
-    if_null rx1033_debug, debug_849
-    rx1033_cur."!cursor_debug"("PASS", "infix:sym<**>", " at pos=", rx1033_pos)
+    rx1034_cur."!cursor_pass"(rx1034_pos, "prefix:sym<++>")
+    if_null rx1034_debug, debug_847
+    rx1034_cur."!cursor_debug"("PASS", "prefix:sym<++>", " at pos=", rx1034_pos)
+  debug_847:
+    .return (rx1034_cur)
+  rx1034_restart:
+.annotate 'line', 454
+    if_null rx1034_debug, debug_848
+    rx1034_cur."!cursor_debug"("NEXT", "prefix:sym<++>")
+  debug_848:
+  rx1034_fail:
+    (rx1034_rep, rx1034_pos, $I10, $P10) = rx1034_cur."!mark_fail"(0)
+    lt rx1034_pos, -1, rx1034_done
+    eq rx1034_pos, -1, rx1034_fail
+    jump $I10
+  rx1034_done:
+    rx1034_cur."!cursor_fail"()
+    if_null rx1034_debug, debug_849
+    rx1034_cur."!cursor_debug"("FAIL", "prefix:sym<++>")
   debug_849:
-    .return (rx1033_cur)
-  rx1033_restart:
-.annotate 'line', 447
-    if_null rx1033_debug, debug_850
-    rx1033_cur."!cursor_debug"("NEXT", "infix:sym<**>")
-  debug_850:
-  rx1033_fail:
-    (rx1033_rep, rx1033_pos, $I10, $P10) = rx1033_cur."!mark_fail"(0)
-    lt rx1033_pos, -1, rx1033_done
-    eq rx1033_pos, -1, rx1033_fail
-    jump $I10
-  rx1033_done:
-    rx1033_cur."!cursor_fail"()
-    if_null rx1033_debug, debug_851
-    rx1033_cur."!cursor_debug"("FAIL", "infix:sym<**>")
-  debug_851:
-    .return (rx1033_cur)
+    .return (rx1034_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<**>"  :subid("263_1282324002.40722") :method
-.annotate 'line', 447
-    $P1035 = self."!PREFIX__!subrule"("O", "**")
-    new $P1036, "ResizablePMCArray"
-    push $P1036, $P1035
-    .return ($P1036)
+.sub "!PREFIX__prefix:sym<++>"  :subid("261_1284728478.15265") :method
+.annotate 'line', 454
+    $P1036 = self."!PREFIX__!subrule"("O", "++")
+    new $P1037, "ResizablePMCArray"
+    push $P1037, $P1036
+    .return ($P1037)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<+>"  :subid("264_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1040_tgt
-    .local int rx1040_pos
-    .local int rx1040_off
-    .local int rx1040_eos
-    .local int rx1040_rep
-    .local pmc rx1040_cur
-    .local pmc rx1040_debug
-    (rx1040_cur, rx1040_pos, rx1040_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1040_debug, rx1040_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1040_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1040_eos, rx1040_tgt
-    gt rx1040_pos, rx1040_eos, rx1040_done
-    set rx1040_off, 0
-    lt rx1040_pos, 2, rx1040_start
-    sub rx1040_off, rx1040_pos, 1
-    substr rx1040_tgt, rx1040_tgt, rx1040_off
-  rx1040_start:
-    eq $I10, 1, rx1040_restart
-    if_null rx1040_debug, debug_852
-    rx1040_cur."!cursor_debug"("START", "prefix:sym<+>")
-  debug_852:
+.sub "prefix:sym<-->"  :subid("262_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1041_tgt
+    .local int rx1041_pos
+    .local int rx1041_off
+    .local int rx1041_eos
+    .local int rx1041_rep
+    .local pmc rx1041_cur
+    .local pmc rx1041_debug
+    (rx1041_cur, rx1041_pos, rx1041_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1041_debug, rx1041_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1041_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1041_eos, rx1041_tgt
+    gt rx1041_pos, rx1041_eos, rx1041_done
+    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:
+    eq $I10, 1, rx1041_restart
+    if_null rx1041_debug, debug_850
+    rx1041_cur."!cursor_debug"("START", "prefix:sym<-->")
+  debug_850:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1044_done
-    goto rxscan1044_scan
-  rxscan1044_loop:
-    ($P10) = rx1040_cur."from"()
-    inc $P10
-    set rx1040_pos, $P10
-    ge rx1040_pos, rx1040_eos, rxscan1044_done
-  rxscan1044_scan:
-    set_addr $I10, rxscan1044_loop
-    rx1040_cur."!mark_push"(0, rx1040_pos, $I10)
-  rxscan1044_done:
-.annotate 'line', 500
+    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', 499
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1045_fail
-    rx1040_cur."!mark_push"(0, rx1040_pos, $I10)
-  # rx literal  "+"
-    add $I11, rx1040_pos, 1
-    gt $I11, rx1040_eos, rx1040_fail
-    sub $I11, rx1040_pos, rx1040_off
-    ord $I11, rx1040_tgt, $I11
-    ne $I11, 43, rx1040_fail
-    add rx1040_pos, 1
-    set_addr $I10, rxcap_1045_fail
-    ($I12, $I11) = rx1040_cur."!mark_peek"($I10)
-    rx1040_cur."!cursor_pos"($I11)
-    ($P10) = rx1040_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1040_pos, "")
-    rx1040_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1046_fail
+    rx1041_cur."!mark_push"(0, rx1041_pos, $I10)
+  # rx literal  "--"
+    add $I11, rx1041_pos, 2
+    gt $I11, rx1041_eos, rx1041_fail
+    sub $I11, rx1041_pos, rx1041_off
+    substr $S10, rx1041_tgt, $I11, 2
+    ne $S10, "--", rx1041_fail
+    add rx1041_pos, 2
+    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)
     $P10."!cursor_names"("sym")
-    goto rxcap_1045_done
-  rxcap_1045_fail:
-    goto rx1040_fail
-  rxcap_1045_done:
+    goto rxcap_1046_done
+  rxcap_1046_fail:
+    goto rx1041_fail
+  rxcap_1046_done:
   # rx subrule "O" subtype=capture negate=
-    rx1040_cur."!cursor_pos"(rx1040_pos)
-    $P10 = rx1040_cur."O"("%symbolic_unary, :pirop<set N*>")
-    unless $P10, rx1040_fail
-    rx1040_cur."!mark_push"(0, -1, 0, $P10)
+    rx1041_cur."!cursor_pos"(rx1041_pos)
+    $P10 = rx1041_cur."O"("%autoincrement, :pirop<dec>")
+    unless $P10, rx1041_fail
+    rx1041_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1040_pos = $P10."pos"()
+    rx1041_pos = $P10."pos"()
   # rx pass
-    rx1040_cur."!cursor_pass"(rx1040_pos, "prefix:sym<+>")
-    if_null rx1040_debug, debug_853
-    rx1040_cur."!cursor_debug"("PASS", "prefix:sym<+>", " at pos=", rx1040_pos)
+    rx1041_cur."!cursor_pass"(rx1041_pos, "prefix:sym<-->")
+    if_null rx1041_debug, debug_851
+    rx1041_cur."!cursor_debug"("PASS", "prefix:sym<-->", " at pos=", rx1041_pos)
+  debug_851:
+    .return (rx1041_cur)
+  rx1041_restart:
+.annotate 'line', 454
+    if_null rx1041_debug, debug_852
+    rx1041_cur."!cursor_debug"("NEXT", "prefix:sym<-->")
+  debug_852:
+  rx1041_fail:
+    (rx1041_rep, rx1041_pos, $I10, $P10) = rx1041_cur."!mark_fail"(0)
+    lt rx1041_pos, -1, rx1041_done
+    eq rx1041_pos, -1, rx1041_fail
+    jump $I10
+  rx1041_done:
+    rx1041_cur."!cursor_fail"()
+    if_null rx1041_debug, debug_853
+    rx1041_cur."!cursor_debug"("FAIL", "prefix:sym<-->")
   debug_853:
-    .return (rx1040_cur)
-  rx1040_restart:
-.annotate 'line', 447
-    if_null rx1040_debug, debug_854
-    rx1040_cur."!cursor_debug"("NEXT", "prefix:sym<+>")
-  debug_854:
-  rx1040_fail:
-    (rx1040_rep, rx1040_pos, $I10, $P10) = rx1040_cur."!mark_fail"(0)
-    lt rx1040_pos, -1, rx1040_done
-    eq rx1040_pos, -1, rx1040_fail
-    jump $I10
-  rx1040_done:
-    rx1040_cur."!cursor_fail"()
-    if_null rx1040_debug, debug_855
-    rx1040_cur."!cursor_debug"("FAIL", "prefix:sym<+>")
-  debug_855:
-    .return (rx1040_cur)
+    .return (rx1041_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<+>"  :subid("265_1282324002.40722") :method
-.annotate 'line', 447
-    $P1042 = self."!PREFIX__!subrule"("O", "+")
-    new $P1043, "ResizablePMCArray"
-    push $P1043, $P1042
-    .return ($P1043)
+.sub "!PREFIX__prefix:sym<-->"  :subid("263_1284728478.15265") :method
+.annotate 'line', 454
+    $P1043 = self."!PREFIX__!subrule"("O", "--")
+    new $P1044, "ResizablePMCArray"
+    push $P1044, $P1043
+    .return ($P1044)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<~>"  :subid("266_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1047_tgt
-    .local int rx1047_pos
-    .local int rx1047_off
-    .local int rx1047_eos
-    .local int rx1047_rep
-    .local pmc rx1047_cur
-    .local pmc rx1047_debug
-    (rx1047_cur, rx1047_pos, rx1047_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1047_debug, rx1047_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1047_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1047_eos, rx1047_tgt
-    gt rx1047_pos, rx1047_eos, rx1047_done
-    set rx1047_off, 0
-    lt rx1047_pos, 2, rx1047_start
-    sub rx1047_off, rx1047_pos, 1
-    substr rx1047_tgt, rx1047_tgt, rx1047_off
-  rx1047_start:
-    eq $I10, 1, rx1047_restart
-    if_null rx1047_debug, debug_856
-    rx1047_cur."!cursor_debug"("START", "prefix:sym<~>")
-  debug_856:
+.sub "postfix:sym<++>"  :subid("264_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1048_tgt
+    .local int rx1048_pos
+    .local int rx1048_off
+    .local int rx1048_eos
+    .local int rx1048_rep
+    .local pmc rx1048_cur
+    .local pmc rx1048_debug
+    (rx1048_cur, rx1048_pos, rx1048_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1048_debug, rx1048_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1048_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1048_eos, rx1048_tgt
+    gt rx1048_pos, rx1048_eos, rx1048_done
+    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:
+    eq $I10, 1, rx1048_restart
+    if_null rx1048_debug, debug_854
+    rx1048_cur."!cursor_debug"("START", "postfix:sym<++>")
+  debug_854:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1051_done
-    goto rxscan1051_scan
-  rxscan1051_loop:
-    ($P10) = rx1047_cur."from"()
-    inc $P10
-    set rx1047_pos, $P10
-    ge rx1047_pos, rx1047_eos, rxscan1051_done
-  rxscan1051_scan:
-    set_addr $I10, rxscan1051_loop
-    rx1047_cur."!mark_push"(0, rx1047_pos, $I10)
-  rxscan1051_done:
-.annotate 'line', 501
+    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', 502
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1052_fail
-    rx1047_cur."!mark_push"(0, rx1047_pos, $I10)
-  # rx literal  "~"
-    add $I11, rx1047_pos, 1
-    gt $I11, rx1047_eos, rx1047_fail
-    sub $I11, rx1047_pos, rx1047_off
-    ord $I11, rx1047_tgt, $I11
-    ne $I11, 126, rx1047_fail
-    add rx1047_pos, 1
-    set_addr $I10, rxcap_1052_fail
-    ($I12, $I11) = rx1047_cur."!mark_peek"($I10)
-    rx1047_cur."!cursor_pos"($I11)
-    ($P10) = rx1047_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1047_pos, "")
-    rx1047_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1053_fail
+    rx1048_cur."!mark_push"(0, rx1048_pos, $I10)
+  # rx literal  "++"
+    add $I11, rx1048_pos, 2
+    gt $I11, rx1048_eos, rx1048_fail
+    sub $I11, rx1048_pos, rx1048_off
+    substr $S10, rx1048_tgt, $I11, 2
+    ne $S10, "++", rx1048_fail
+    add rx1048_pos, 2
+    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)
     $P10."!cursor_names"("sym")
-    goto rxcap_1052_done
-  rxcap_1052_fail:
-    goto rx1047_fail
-  rxcap_1052_done:
+    goto rxcap_1053_done
+  rxcap_1053_fail:
+    goto rx1048_fail
+  rxcap_1053_done:
   # rx subrule "O" subtype=capture negate=
-    rx1047_cur."!cursor_pos"(rx1047_pos)
-    $P10 = rx1047_cur."O"("%symbolic_unary, :pirop<set S*>")
-    unless $P10, rx1047_fail
-    rx1047_cur."!mark_push"(0, -1, 0, $P10)
+    rx1048_cur."!cursor_pos"(rx1048_pos)
+    $P10 = rx1048_cur."O"("%autoincrement")
+    unless $P10, rx1048_fail
+    rx1048_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1047_pos = $P10."pos"()
+    rx1048_pos = $P10."pos"()
   # rx pass
-    rx1047_cur."!cursor_pass"(rx1047_pos, "prefix:sym<~>")
-    if_null rx1047_debug, debug_857
-    rx1047_cur."!cursor_debug"("PASS", "prefix:sym<~>", " at pos=", rx1047_pos)
+    rx1048_cur."!cursor_pass"(rx1048_pos, "postfix:sym<++>")
+    if_null rx1048_debug, debug_855
+    rx1048_cur."!cursor_debug"("PASS", "postfix:sym<++>", " at pos=", rx1048_pos)
+  debug_855:
+    .return (rx1048_cur)
+  rx1048_restart:
+.annotate 'line', 454
+    if_null rx1048_debug, debug_856
+    rx1048_cur."!cursor_debug"("NEXT", "postfix:sym<++>")
+  debug_856:
+  rx1048_fail:
+    (rx1048_rep, rx1048_pos, $I10, $P10) = rx1048_cur."!mark_fail"(0)
+    lt rx1048_pos, -1, rx1048_done
+    eq rx1048_pos, -1, rx1048_fail
+    jump $I10
+  rx1048_done:
+    rx1048_cur."!cursor_fail"()
+    if_null rx1048_debug, debug_857
+    rx1048_cur."!cursor_debug"("FAIL", "postfix:sym<++>")
   debug_857:
-    .return (rx1047_cur)
-  rx1047_restart:
-.annotate 'line', 447
-    if_null rx1047_debug, debug_858
-    rx1047_cur."!cursor_debug"("NEXT", "prefix:sym<~>")
-  debug_858:
-  rx1047_fail:
-    (rx1047_rep, rx1047_pos, $I10, $P10) = rx1047_cur."!mark_fail"(0)
-    lt rx1047_pos, -1, rx1047_done
-    eq rx1047_pos, -1, rx1047_fail
-    jump $I10
-  rx1047_done:
-    rx1047_cur."!cursor_fail"()
-    if_null rx1047_debug, debug_859
-    rx1047_cur."!cursor_debug"("FAIL", "prefix:sym<~>")
-  debug_859:
-    .return (rx1047_cur)
+    .return (rx1048_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<~>"  :subid("267_1282324002.40722") :method
-.annotate 'line', 447
-    $P1049 = self."!PREFIX__!subrule"("O", "~")
-    new $P1050, "ResizablePMCArray"
-    push $P1050, $P1049
-    .return ($P1050)
+.sub "!PREFIX__postfix:sym<++>"  :subid("265_1284728478.15265") :method
+.annotate 'line', 454
+    $P1050 = self."!PREFIX__!subrule"("O", "++")
+    new $P1051, "ResizablePMCArray"
+    push $P1051, $P1050
+    .return ($P1051)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<->"  :subid("268_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1054_tgt
-    .local int rx1054_pos
-    .local int rx1054_off
-    .local int rx1054_eos
-    .local int rx1054_rep
-    .local pmc rx1054_cur
-    .local pmc rx1054_debug
-    (rx1054_cur, rx1054_pos, rx1054_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1054_debug, rx1054_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1054_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1054_eos, rx1054_tgt
-    gt rx1054_pos, rx1054_eos, rx1054_done
-    set rx1054_off, 0
-    lt rx1054_pos, 2, rx1054_start
-    sub rx1054_off, rx1054_pos, 1
-    substr rx1054_tgt, rx1054_tgt, rx1054_off
-  rx1054_start:
-    eq $I10, 1, rx1054_restart
-    if_null rx1054_debug, debug_860
-    rx1054_cur."!cursor_debug"("START", "prefix:sym<->")
-  debug_860:
+.sub "postfix:sym<-->"  :subid("266_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1055_tgt
+    .local int rx1055_pos
+    .local int rx1055_off
+    .local int rx1055_eos
+    .local int rx1055_rep
+    .local pmc rx1055_cur
+    .local pmc rx1055_debug
+    (rx1055_cur, rx1055_pos, rx1055_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1055_debug, rx1055_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1055_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1055_eos, rx1055_tgt
+    gt rx1055_pos, rx1055_eos, rx1055_done
+    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:
+    eq $I10, 1, rx1055_restart
+    if_null rx1055_debug, debug_858
+    rx1055_cur."!cursor_debug"("START", "postfix:sym<-->")
+  debug_858:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1057_done
-    goto rxscan1057_scan
-  rxscan1057_loop:
-    ($P10) = rx1054_cur."from"()
-    inc $P10
-    set rx1054_pos, $P10
-    ge rx1054_pos, rx1054_eos, rxscan1057_done
-  rxscan1057_scan:
-    set_addr $I10, rxscan1057_loop
-    rx1054_cur."!mark_push"(0, rx1054_pos, $I10)
-  rxscan1057_done:
-.annotate 'line', 502
+    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', 503
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1058_fail
-    rx1054_cur."!mark_push"(0, rx1054_pos, $I10)
-  # rx literal  "-"
-    add $I11, rx1054_pos, 1
-    gt $I11, rx1054_eos, rx1054_fail
-    sub $I11, rx1054_pos, rx1054_off
-    ord $I11, rx1054_tgt, $I11
-    ne $I11, 45, rx1054_fail
-    add rx1054_pos, 1
-    set_addr $I10, rxcap_1058_fail
-    ($I12, $I11) = rx1054_cur."!mark_peek"($I10)
-    rx1054_cur."!cursor_pos"($I11)
-    ($P10) = rx1054_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1054_pos, "")
-    rx1054_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1060_fail
+    rx1055_cur."!mark_push"(0, rx1055_pos, $I10)
+  # rx literal  "--"
+    add $I11, rx1055_pos, 2
+    gt $I11, rx1055_eos, rx1055_fail
+    sub $I11, rx1055_pos, rx1055_off
+    substr $S10, rx1055_tgt, $I11, 2
+    ne $S10, "--", rx1055_fail
+    add rx1055_pos, 2
+    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)
     $P10."!cursor_names"("sym")
-    goto rxcap_1058_done
-  rxcap_1058_fail:
-    goto rx1054_fail
-  rxcap_1058_done:
-  # rx enumcharlist negate=1 zerowidth
-    ge rx1054_pos, rx1054_eos, rx1054_fail
-    sub $I10, rx1054_pos, rx1054_off
-    substr $S10, rx1054_tgt, $I10, 1
-    index $I11, ">", $S10
-    ge $I11, 0, rx1054_fail
-  # rx subrule "number" subtype=zerowidth negate=1
-    rx1054_cur."!cursor_pos"(rx1054_pos)
-    $P10 = rx1054_cur."number"()
-    if $P10, rx1054_fail
+    goto rxcap_1060_done
+  rxcap_1060_fail:
+    goto rx1055_fail
+  rxcap_1060_done:
   # rx subrule "O" subtype=capture negate=
-    rx1054_cur."!cursor_pos"(rx1054_pos)
-    $P10 = rx1054_cur."O"("%symbolic_unary, :pirop<neg>")
-    unless $P10, rx1054_fail
-    rx1054_cur."!mark_push"(0, -1, 0, $P10)
+    rx1055_cur."!cursor_pos"(rx1055_pos)
+    $P10 = rx1055_cur."O"("%autoincrement")
+    unless $P10, rx1055_fail
+    rx1055_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1054_pos = $P10."pos"()
+    rx1055_pos = $P10."pos"()
   # rx pass
-    rx1054_cur."!cursor_pass"(rx1054_pos, "prefix:sym<->")
-    if_null rx1054_debug, debug_861
-    rx1054_cur."!cursor_debug"("PASS", "prefix:sym<->", " at pos=", rx1054_pos)
+    rx1055_cur."!cursor_pass"(rx1055_pos, "postfix:sym<-->")
+    if_null rx1055_debug, debug_859
+    rx1055_cur."!cursor_debug"("PASS", "postfix:sym<-->", " at pos=", rx1055_pos)
+  debug_859:
+    .return (rx1055_cur)
+  rx1055_restart:
+.annotate 'line', 454
+    if_null rx1055_debug, debug_860
+    rx1055_cur."!cursor_debug"("NEXT", "postfix:sym<-->")
+  debug_860:
+  rx1055_fail:
+    (rx1055_rep, rx1055_pos, $I10, $P10) = rx1055_cur."!mark_fail"(0)
+    lt rx1055_pos, -1, rx1055_done
+    eq rx1055_pos, -1, rx1055_fail
+    jump $I10
+  rx1055_done:
+    rx1055_cur."!cursor_fail"()
+    if_null rx1055_debug, debug_861
+    rx1055_cur."!cursor_debug"("FAIL", "postfix:sym<-->")
   debug_861:
-    .return (rx1054_cur)
-  rx1054_restart:
-.annotate 'line', 447
-    if_null rx1054_debug, debug_862
-    rx1054_cur."!cursor_debug"("NEXT", "prefix:sym<->")
-  debug_862:
-  rx1054_fail:
-    (rx1054_rep, rx1054_pos, $I10, $P10) = rx1054_cur."!mark_fail"(0)
-    lt rx1054_pos, -1, rx1054_done
-    eq rx1054_pos, -1, rx1054_fail
-    jump $I10
-  rx1054_done:
-    rx1054_cur."!cursor_fail"()
-    if_null rx1054_debug, debug_863
-    rx1054_cur."!cursor_debug"("FAIL", "prefix:sym<->")
-  debug_863:
-    .return (rx1054_cur)
+    .return (rx1055_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<->"  :subid("269_1282324002.40722") :method
-.annotate 'line', 447
-    new $P1056, "ResizablePMCArray"
-    push $P1056, "-"
-    .return ($P1056)
+.sub "!PREFIX__postfix:sym<-->"  :subid("267_1284728478.15265") :method
+.annotate 'line', 454
+    $P1057 = self."!PREFIX__!subrule"("O", "--")
+    new $P1058, "ResizablePMCArray"
+    push $P1058, $P1057
+    .return ($P1058)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<?>"  :subid("270_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1060_tgt
-    .local int rx1060_pos
-    .local int rx1060_off
-    .local int rx1060_eos
-    .local int rx1060_rep
-    .local pmc rx1060_cur
-    .local pmc rx1060_debug
-    (rx1060_cur, rx1060_pos, rx1060_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1060_debug, rx1060_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1060_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1060_eos, rx1060_tgt
-    gt rx1060_pos, rx1060_eos, rx1060_done
-    set rx1060_off, 0
-    lt rx1060_pos, 2, rx1060_start
-    sub rx1060_off, rx1060_pos, 1
-    substr rx1060_tgt, rx1060_tgt, rx1060_off
-  rx1060_start:
-    eq $I10, 1, rx1060_restart
-    if_null rx1060_debug, debug_864
-    rx1060_cur."!cursor_debug"("START", "prefix:sym<?>")
-  debug_864:
+.sub "infix:sym<**>"  :subid("268_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1062_tgt
+    .local int rx1062_pos
+    .local int rx1062_off
+    .local int rx1062_eos
+    .local int rx1062_rep
+    .local pmc rx1062_cur
+    .local pmc rx1062_debug
+    (rx1062_cur, rx1062_pos, rx1062_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1062_debug, rx1062_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1062_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1062_eos, rx1062_tgt
+    gt rx1062_pos, rx1062_eos, rx1062_done
+    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:
+    eq $I10, 1, rx1062_restart
+    if_null rx1062_debug, debug_862
+    rx1062_cur."!cursor_debug"("START", "infix:sym<**>")
+  debug_862:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1064_done
-    goto rxscan1064_scan
-  rxscan1064_loop:
-    ($P10) = rx1060_cur."from"()
-    inc $P10
-    set rx1060_pos, $P10
-    ge rx1060_pos, rx1060_eos, rxscan1064_done
-  rxscan1064_scan:
-    set_addr $I10, rxscan1064_loop
-    rx1060_cur."!mark_push"(0, rx1060_pos, $I10)
-  rxscan1064_done:
-.annotate 'line', 503
+    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', 505
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1065_fail
-    rx1060_cur."!mark_push"(0, rx1060_pos, $I10)
-  # rx literal  "?"
-    add $I11, rx1060_pos, 1
-    gt $I11, rx1060_eos, rx1060_fail
-    sub $I11, rx1060_pos, rx1060_off
-    ord $I11, rx1060_tgt, $I11
-    ne $I11, 63, rx1060_fail
-    add rx1060_pos, 1
-    set_addr $I10, rxcap_1065_fail
-    ($I12, $I11) = rx1060_cur."!mark_peek"($I10)
-    rx1060_cur."!cursor_pos"($I11)
-    ($P10) = rx1060_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1060_pos, "")
-    rx1060_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1067_fail
+    rx1062_cur."!mark_push"(0, rx1062_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)
     $P10."!cursor_names"("sym")
-    goto rxcap_1065_done
-  rxcap_1065_fail:
-    goto rx1060_fail
-  rxcap_1065_done:
+    goto rxcap_1067_done
+  rxcap_1067_fail:
+    goto rx1062_fail
+  rxcap_1067_done:
   # rx subrule "O" subtype=capture negate=
-    rx1060_cur."!cursor_pos"(rx1060_pos)
-    $P10 = rx1060_cur."O"("%symbolic_unary, :pirop<istrue>")
-    unless $P10, rx1060_fail
-    rx1060_cur."!mark_push"(0, -1, 0, $P10)
+    rx1062_cur."!cursor_pos"(rx1062_pos)
+    $P10 = rx1062_cur."O"("%exponentiation, :pirop<pow>")
+    unless $P10, rx1062_fail
+    rx1062_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1060_pos = $P10."pos"()
+    rx1062_pos = $P10."pos"()
   # rx pass
-    rx1060_cur."!cursor_pass"(rx1060_pos, "prefix:sym<?>")
-    if_null rx1060_debug, debug_865
-    rx1060_cur."!cursor_debug"("PASS", "prefix:sym<?>", " at pos=", rx1060_pos)
+    rx1062_cur."!cursor_pass"(rx1062_pos, "infix:sym<**>")
+    if_null rx1062_debug, debug_863
+    rx1062_cur."!cursor_debug"("PASS", "infix:sym<**>", " at pos=", rx1062_pos)
+  debug_863:
+    .return (rx1062_cur)
+  rx1062_restart:
+.annotate 'line', 454
+    if_null rx1062_debug, debug_864
+    rx1062_cur."!cursor_debug"("NEXT", "infix:sym<**>")
+  debug_864:
+  rx1062_fail:
+    (rx1062_rep, rx1062_pos, $I10, $P10) = rx1062_cur."!mark_fail"(0)
+    lt rx1062_pos, -1, rx1062_done
+    eq rx1062_pos, -1, rx1062_fail
+    jump $I10
+  rx1062_done:
+    rx1062_cur."!cursor_fail"()
+    if_null rx1062_debug, debug_865
+    rx1062_cur."!cursor_debug"("FAIL", "infix:sym<**>")
   debug_865:
-    .return (rx1060_cur)
-  rx1060_restart:
-.annotate 'line', 447
-    if_null rx1060_debug, debug_866
-    rx1060_cur."!cursor_debug"("NEXT", "prefix:sym<?>")
-  debug_866:
-  rx1060_fail:
-    (rx1060_rep, rx1060_pos, $I10, $P10) = rx1060_cur."!mark_fail"(0)
-    lt rx1060_pos, -1, rx1060_done
-    eq rx1060_pos, -1, rx1060_fail
-    jump $I10
-  rx1060_done:
-    rx1060_cur."!cursor_fail"()
-    if_null rx1060_debug, debug_867
-    rx1060_cur."!cursor_debug"("FAIL", "prefix:sym<?>")
-  debug_867:
-    .return (rx1060_cur)
+    .return (rx1062_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<?>"  :subid("271_1282324002.40722") :method
-.annotate 'line', 447
-    $P1062 = self."!PREFIX__!subrule"("O", "?")
-    new $P1063, "ResizablePMCArray"
-    push $P1063, $P1062
-    .return ($P1063)
+.sub "!PREFIX__infix:sym<**>"  :subid("269_1284728478.15265") :method
+.annotate 'line', 454
+    $P1064 = self."!PREFIX__!subrule"("O", "**")
+    new $P1065, "ResizablePMCArray"
+    push $P1065, $P1064
+    .return ($P1065)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<!>"  :subid("272_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1067_tgt
-    .local int rx1067_pos
-    .local int rx1067_off
-    .local int rx1067_eos
-    .local int rx1067_rep
-    .local pmc rx1067_cur
-    .local pmc rx1067_debug
-    (rx1067_cur, rx1067_pos, rx1067_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1067_debug, rx1067_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1067_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1067_eos, rx1067_tgt
-    gt rx1067_pos, rx1067_eos, rx1067_done
-    set rx1067_off, 0
-    lt rx1067_pos, 2, rx1067_start
-    sub rx1067_off, rx1067_pos, 1
-    substr rx1067_tgt, rx1067_tgt, rx1067_off
-  rx1067_start:
-    eq $I10, 1, rx1067_restart
-    if_null rx1067_debug, debug_868
-    rx1067_cur."!cursor_debug"("START", "prefix:sym<!>")
-  debug_868:
+.sub "prefix:sym<+>"  :subid("270_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1069_tgt
+    .local int rx1069_pos
+    .local int rx1069_off
+    .local int rx1069_eos
+    .local int rx1069_rep
+    .local pmc rx1069_cur
+    .local pmc rx1069_debug
+    (rx1069_cur, rx1069_pos, rx1069_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1069_debug, rx1069_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1069_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1069_eos, rx1069_tgt
+    gt rx1069_pos, rx1069_eos, rx1069_done
+    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:
+    eq $I10, 1, rx1069_restart
+    if_null rx1069_debug, debug_866
+    rx1069_cur."!cursor_debug"("START", "prefix:sym<+>")
+  debug_866:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1071_done
-    goto rxscan1071_scan
-  rxscan1071_loop:
-    ($P10) = rx1067_cur."from"()
-    inc $P10
-    set rx1067_pos, $P10
-    ge rx1067_pos, rx1067_eos, rxscan1071_done
-  rxscan1071_scan:
-    set_addr $I10, rxscan1071_loop
-    rx1067_cur."!mark_push"(0, rx1067_pos, $I10)
-  rxscan1071_done:
-.annotate 'line', 504
+    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', 507
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1072_fail
-    rx1067_cur."!mark_push"(0, rx1067_pos, $I10)
-  # rx literal  "!"
-    add $I11, rx1067_pos, 1
-    gt $I11, rx1067_eos, rx1067_fail
-    sub $I11, rx1067_pos, rx1067_off
-    ord $I11, rx1067_tgt, $I11
-    ne $I11, 33, rx1067_fail
-    add rx1067_pos, 1
-    set_addr $I10, rxcap_1072_fail
-    ($I12, $I11) = rx1067_cur."!mark_peek"($I10)
-    rx1067_cur."!cursor_pos"($I11)
-    ($P10) = rx1067_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1067_pos, "")
-    rx1067_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1074_fail
+    rx1069_cur."!mark_push"(0, rx1069_pos, $I10)
+  # rx literal  "+"
+    add $I11, rx1069_pos, 1
+    gt $I11, rx1069_eos, rx1069_fail
+    sub $I11, rx1069_pos, rx1069_off
+    ord $I11, rx1069_tgt, $I11
+    ne $I11, 43, rx1069_fail
+    add rx1069_pos, 1
+    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)
     $P10."!cursor_names"("sym")
-    goto rxcap_1072_done
-  rxcap_1072_fail:
-    goto rx1067_fail
-  rxcap_1072_done:
+    goto rxcap_1074_done
+  rxcap_1074_fail:
+    goto rx1069_fail
+  rxcap_1074_done:
   # rx subrule "O" subtype=capture negate=
-    rx1067_cur."!cursor_pos"(rx1067_pos)
-    $P10 = rx1067_cur."O"("%symbolic_unary, :pirop<isfalse>")
-    unless $P10, rx1067_fail
-    rx1067_cur."!mark_push"(0, -1, 0, $P10)
+    rx1069_cur."!cursor_pos"(rx1069_pos)
+    $P10 = rx1069_cur."O"("%symbolic_unary, :pirop<set N*>")
+    unless $P10, rx1069_fail
+    rx1069_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1067_pos = $P10."pos"()
+    rx1069_pos = $P10."pos"()
   # rx pass
-    rx1067_cur."!cursor_pass"(rx1067_pos, "prefix:sym<!>")
-    if_null rx1067_debug, debug_869
-    rx1067_cur."!cursor_debug"("PASS", "prefix:sym<!>", " at pos=", rx1067_pos)
+    rx1069_cur."!cursor_pass"(rx1069_pos, "prefix:sym<+>")
+    if_null rx1069_debug, debug_867
+    rx1069_cur."!cursor_debug"("PASS", "prefix:sym<+>", " at pos=", rx1069_pos)
+  debug_867:
+    .return (rx1069_cur)
+  rx1069_restart:
+.annotate 'line', 454
+    if_null rx1069_debug, debug_868
+    rx1069_cur."!cursor_debug"("NEXT", "prefix:sym<+>")
+  debug_868:
+  rx1069_fail:
+    (rx1069_rep, rx1069_pos, $I10, $P10) = rx1069_cur."!mark_fail"(0)
+    lt rx1069_pos, -1, rx1069_done
+    eq rx1069_pos, -1, rx1069_fail
+    jump $I10
+  rx1069_done:
+    rx1069_cur."!cursor_fail"()
+    if_null rx1069_debug, debug_869
+    rx1069_cur."!cursor_debug"("FAIL", "prefix:sym<+>")
   debug_869:
-    .return (rx1067_cur)
-  rx1067_restart:
-.annotate 'line', 447
-    if_null rx1067_debug, debug_870
-    rx1067_cur."!cursor_debug"("NEXT", "prefix:sym<!>")
-  debug_870:
-  rx1067_fail:
-    (rx1067_rep, rx1067_pos, $I10, $P10) = rx1067_cur."!mark_fail"(0)
-    lt rx1067_pos, -1, rx1067_done
-    eq rx1067_pos, -1, rx1067_fail
-    jump $I10
-  rx1067_done:
-    rx1067_cur."!cursor_fail"()
-    if_null rx1067_debug, debug_871
-    rx1067_cur."!cursor_debug"("FAIL", "prefix:sym<!>")
-  debug_871:
-    .return (rx1067_cur)
+    .return (rx1069_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<!>"  :subid("273_1282324002.40722") :method
-.annotate 'line', 447
-    $P1069 = self."!PREFIX__!subrule"("O", "!")
-    new $P1070, "ResizablePMCArray"
-    push $P1070, $P1069
-    .return ($P1070)
+.sub "!PREFIX__prefix:sym<+>"  :subid("271_1284728478.15265") :method
+.annotate 'line', 454
+    $P1071 = self."!PREFIX__!subrule"("O", "+")
+    new $P1072, "ResizablePMCArray"
+    push $P1072, $P1071
+    .return ($P1072)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<|>"  :subid("274_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1074_tgt
-    .local int rx1074_pos
-    .local int rx1074_off
-    .local int rx1074_eos
-    .local int rx1074_rep
-    .local pmc rx1074_cur
-    .local pmc rx1074_debug
-    (rx1074_cur, rx1074_pos, rx1074_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1074_debug, rx1074_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1074_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1074_eos, rx1074_tgt
-    gt rx1074_pos, rx1074_eos, rx1074_done
-    set rx1074_off, 0
-    lt rx1074_pos, 2, rx1074_start
-    sub rx1074_off, rx1074_pos, 1
-    substr rx1074_tgt, rx1074_tgt, rx1074_off
-  rx1074_start:
-    eq $I10, 1, rx1074_restart
-    if_null rx1074_debug, debug_872
-    rx1074_cur."!cursor_debug"("START", "prefix:sym<|>")
-  debug_872:
+.sub "prefix:sym<~>"  :subid("272_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1076_tgt
+    .local int rx1076_pos
+    .local int rx1076_off
+    .local int rx1076_eos
+    .local int rx1076_rep
+    .local pmc rx1076_cur
+    .local pmc rx1076_debug
+    (rx1076_cur, rx1076_pos, rx1076_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1076_debug, rx1076_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1076_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1076_eos, rx1076_tgt
+    gt rx1076_pos, rx1076_eos, rx1076_done
+    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:
+    eq $I10, 1, rx1076_restart
+    if_null rx1076_debug, debug_870
+    rx1076_cur."!cursor_debug"("START", "prefix:sym<~>")
+  debug_870:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1078_done
-    goto rxscan1078_scan
-  rxscan1078_loop:
-    ($P10) = rx1074_cur."from"()
-    inc $P10
-    set rx1074_pos, $P10
-    ge rx1074_pos, rx1074_eos, rxscan1078_done
-  rxscan1078_scan:
-    set_addr $I10, rxscan1078_loop
-    rx1074_cur."!mark_push"(0, rx1074_pos, $I10)
-  rxscan1078_done:
-.annotate 'line', 505
+    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', 508
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1079_fail
-    rx1074_cur."!mark_push"(0, rx1074_pos, $I10)
-  # rx literal  "|"
-    add $I11, rx1074_pos, 1
-    gt $I11, rx1074_eos, rx1074_fail
-    sub $I11, rx1074_pos, rx1074_off
-    ord $I11, rx1074_tgt, $I11
-    ne $I11, 124, rx1074_fail
-    add rx1074_pos, 1
-    set_addr $I10, rxcap_1079_fail
-    ($I12, $I11) = rx1074_cur."!mark_peek"($I10)
-    rx1074_cur."!cursor_pos"($I11)
-    ($P10) = rx1074_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1074_pos, "")
-    rx1074_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1081_fail
+    rx1076_cur."!mark_push"(0, rx1076_pos, $I10)
+  # rx literal  "~"
+    add $I11, rx1076_pos, 1
+    gt $I11, rx1076_eos, rx1076_fail
+    sub $I11, rx1076_pos, rx1076_off
+    ord $I11, rx1076_tgt, $I11
+    ne $I11, 126, rx1076_fail
+    add rx1076_pos, 1
+    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)
     $P10."!cursor_names"("sym")
-    goto rxcap_1079_done
-  rxcap_1079_fail:
-    goto rx1074_fail
-  rxcap_1079_done:
+    goto rxcap_1081_done
+  rxcap_1081_fail:
+    goto rx1076_fail
+  rxcap_1081_done:
   # rx subrule "O" subtype=capture negate=
-    rx1074_cur."!cursor_pos"(rx1074_pos)
-    $P10 = rx1074_cur."O"("%symbolic_unary")
-    unless $P10, rx1074_fail
-    rx1074_cur."!mark_push"(0, -1, 0, $P10)
+    rx1076_cur."!cursor_pos"(rx1076_pos)
+    $P10 = rx1076_cur."O"("%symbolic_unary, :pirop<set S*>")
+    unless $P10, rx1076_fail
+    rx1076_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1074_pos = $P10."pos"()
+    rx1076_pos = $P10."pos"()
   # rx pass
-    rx1074_cur."!cursor_pass"(rx1074_pos, "prefix:sym<|>")
-    if_null rx1074_debug, debug_873
-    rx1074_cur."!cursor_debug"("PASS", "prefix:sym<|>", " at pos=", rx1074_pos)
+    rx1076_cur."!cursor_pass"(rx1076_pos, "prefix:sym<~>")
+    if_null rx1076_debug, debug_871
+    rx1076_cur."!cursor_debug"("PASS", "prefix:sym<~>", " at pos=", rx1076_pos)
+  debug_871:
+    .return (rx1076_cur)
+  rx1076_restart:
+.annotate 'line', 454
+    if_null rx1076_debug, debug_872
+    rx1076_cur."!cursor_debug"("NEXT", "prefix:sym<~>")
+  debug_872:
+  rx1076_fail:
+    (rx1076_rep, rx1076_pos, $I10, $P10) = rx1076_cur."!mark_fail"(0)
+    lt rx1076_pos, -1, rx1076_done
+    eq rx1076_pos, -1, rx1076_fail
+    jump $I10
+  rx1076_done:
+    rx1076_cur."!cursor_fail"()
+    if_null rx1076_debug, debug_873
+    rx1076_cur."!cursor_debug"("FAIL", "prefix:sym<~>")
   debug_873:
-    .return (rx1074_cur)
-  rx1074_restart:
-.annotate 'line', 447
-    if_null rx1074_debug, debug_874
-    rx1074_cur."!cursor_debug"("NEXT", "prefix:sym<|>")
-  debug_874:
-  rx1074_fail:
-    (rx1074_rep, rx1074_pos, $I10, $P10) = rx1074_cur."!mark_fail"(0)
-    lt rx1074_pos, -1, rx1074_done
-    eq rx1074_pos, -1, rx1074_fail
-    jump $I10
-  rx1074_done:
-    rx1074_cur."!cursor_fail"()
-    if_null rx1074_debug, debug_875
-    rx1074_cur."!cursor_debug"("FAIL", "prefix:sym<|>")
-  debug_875:
-    .return (rx1074_cur)
+    .return (rx1076_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<|>"  :subid("275_1282324002.40722") :method
-.annotate 'line', 447
-    $P1076 = self."!PREFIX__!subrule"("O", "|")
-    new $P1077, "ResizablePMCArray"
-    push $P1077, $P1076
-    .return ($P1077)
+.sub "!PREFIX__prefix:sym<~>"  :subid("273_1284728478.15265") :method
+.annotate 'line', 454
+    $P1078 = self."!PREFIX__!subrule"("O", "~")
+    new $P1079, "ResizablePMCArray"
+    push $P1079, $P1078
+    .return ($P1079)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<*>"  :subid("276_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1081_tgt
-    .local int rx1081_pos
-    .local int rx1081_off
-    .local int rx1081_eos
-    .local int rx1081_rep
-    .local pmc rx1081_cur
-    .local pmc rx1081_debug
-    (rx1081_cur, rx1081_pos, rx1081_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1081_debug, rx1081_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1081_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1081_eos, rx1081_tgt
-    gt rx1081_pos, rx1081_eos, rx1081_done
-    set rx1081_off, 0
-    lt rx1081_pos, 2, rx1081_start
-    sub rx1081_off, rx1081_pos, 1
-    substr rx1081_tgt, rx1081_tgt, rx1081_off
-  rx1081_start:
-    eq $I10, 1, rx1081_restart
-    if_null rx1081_debug, debug_876
-    rx1081_cur."!cursor_debug"("START", "infix:sym<*>")
-  debug_876:
+.sub "prefix:sym<->"  :subid("274_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1083_tgt
+    .local int rx1083_pos
+    .local int rx1083_off
+    .local int rx1083_eos
+    .local int rx1083_rep
+    .local pmc rx1083_cur
+    .local pmc rx1083_debug
+    (rx1083_cur, rx1083_pos, rx1083_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1083_debug, rx1083_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1083_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1083_eos, rx1083_tgt
+    gt rx1083_pos, rx1083_eos, rx1083_done
+    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:
+    eq $I10, 1, rx1083_restart
+    if_null rx1083_debug, debug_874
+    rx1083_cur."!cursor_debug"("START", "prefix:sym<->")
+  debug_874:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1085_done
-    goto rxscan1085_scan
-  rxscan1085_loop:
-    ($P10) = rx1081_cur."from"()
-    inc $P10
-    set rx1081_pos, $P10
-    ge rx1081_pos, rx1081_eos, rxscan1085_done
-  rxscan1085_scan:
-    set_addr $I10, rxscan1085_loop
-    rx1081_cur."!mark_push"(0, rx1081_pos, $I10)
-  rxscan1085_done:
-.annotate 'line', 507
+    ne $I10, -1, rxscan1086_done
+    goto rxscan1086_scan
+  rxscan1086_loop:
+    ($P10) = rx1083_cur."from"()
+    inc $P10
+    set rx1083_pos, $P10
+    ge rx1083_pos, rx1083_eos, rxscan1086_done
+  rxscan1086_scan:
+    set_addr $I10, rxscan1086_loop
+    rx1083_cur."!mark_push"(0, rx1083_pos, $I10)
+  rxscan1086_done:
+.annotate 'line', 509
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1086_fail
-    rx1081_cur."!mark_push"(0, rx1081_pos, $I10)
-  # rx literal  "*"
-    add $I11, rx1081_pos, 1
-    gt $I11, rx1081_eos, rx1081_fail
-    sub $I11, rx1081_pos, rx1081_off
-    ord $I11, rx1081_tgt, $I11
-    ne $I11, 42, rx1081_fail
-    add rx1081_pos, 1
-    set_addr $I10, rxcap_1086_fail
-    ($I12, $I11) = rx1081_cur."!mark_peek"($I10)
-    rx1081_cur."!cursor_pos"($I11)
-    ($P10) = rx1081_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1081_pos, "")
-    rx1081_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1087_fail
+    rx1083_cur."!mark_push"(0, rx1083_pos, $I10)
+  # rx literal  "-"
+    add $I11, rx1083_pos, 1
+    gt $I11, rx1083_eos, rx1083_fail
+    sub $I11, rx1083_pos, rx1083_off
+    ord $I11, rx1083_tgt, $I11
+    ne $I11, 45, rx1083_fail
+    add rx1083_pos, 1
+    set_addr $I10, rxcap_1087_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)
     $P10."!cursor_names"("sym")
-    goto rxcap_1086_done
-  rxcap_1086_fail:
-    goto rx1081_fail
-  rxcap_1086_done:
+    goto rxcap_1087_done
+  rxcap_1087_fail:
+    goto rx1083_fail
+  rxcap_1087_done:
+  # rx enumcharlist negate=1 zerowidth
+    sub $I10, rx1083_pos, rx1083_off
+    substr $S10, rx1083_tgt, $I10, 1
+    index $I11, ">", $S10
+    ge $I11, 0, rx1083_fail
+  # rx subrule "number" subtype=zerowidth negate=1
+    rx1083_cur."!cursor_pos"(rx1083_pos)
+    $P10 = rx1083_cur."number"()
+    if $P10, rx1083_fail
   # rx subrule "O" subtype=capture negate=
-    rx1081_cur."!cursor_pos"(rx1081_pos)
-    $P10 = rx1081_cur."O"("%multiplicative, :pirop<mul>")
-    unless $P10, rx1081_fail
-    rx1081_cur."!mark_push"(0, -1, 0, $P10)
+    rx1083_cur."!cursor_pos"(rx1083_pos)
+    $P10 = rx1083_cur."O"("%symbolic_unary, :pirop<neg>")
+    unless $P10, rx1083_fail
+    rx1083_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1081_pos = $P10."pos"()
+    rx1083_pos = $P10."pos"()
   # rx pass
-    rx1081_cur."!cursor_pass"(rx1081_pos, "infix:sym<*>")
-    if_null rx1081_debug, debug_877
-    rx1081_cur."!cursor_debug"("PASS", "infix:sym<*>", " at pos=", rx1081_pos)
+    rx1083_cur."!cursor_pass"(rx1083_pos, "prefix:sym<->")
+    if_null rx1083_debug, debug_875
+    rx1083_cur."!cursor_debug"("PASS", "prefix:sym<->", " at pos=", rx1083_pos)
+  debug_875:
+    .return (rx1083_cur)
+  rx1083_restart:
+.annotate 'line', 454
+    if_null rx1083_debug, debug_876
+    rx1083_cur."!cursor_debug"("NEXT", "prefix:sym<->")
+  debug_876:
+  rx1083_fail:
+    (rx1083_rep, rx1083_pos, $I10, $P10) = rx1083_cur."!mark_fail"(0)
+    lt rx1083_pos, -1, rx1083_done
+    eq rx1083_pos, -1, rx1083_fail
+    jump $I10
+  rx1083_done:
+    rx1083_cur."!cursor_fail"()
+    if_null rx1083_debug, debug_877
+    rx1083_cur."!cursor_debug"("FAIL", "prefix:sym<->")
   debug_877:
-    .return (rx1081_cur)
-  rx1081_restart:
-.annotate 'line', 447
-    if_null rx1081_debug, debug_878
-    rx1081_cur."!cursor_debug"("NEXT", "infix:sym<*>")
-  debug_878:
-  rx1081_fail:
-    (rx1081_rep, rx1081_pos, $I10, $P10) = rx1081_cur."!mark_fail"(0)
-    lt rx1081_pos, -1, rx1081_done
-    eq rx1081_pos, -1, rx1081_fail
-    jump $I10
-  rx1081_done:
-    rx1081_cur."!cursor_fail"()
-    if_null rx1081_debug, debug_879
-    rx1081_cur."!cursor_debug"("FAIL", "infix:sym<*>")
-  debug_879:
-    .return (rx1081_cur)
+    .return (rx1083_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<*>"  :subid("277_1282324002.40722") :method
-.annotate 'line', 447
-    $P1083 = self."!PREFIX__!subrule"("O", "*")
-    new $P1084, "ResizablePMCArray"
-    push $P1084, $P1083
-    .return ($P1084)
+.sub "!PREFIX__prefix:sym<->"  :subid("275_1284728478.15265") :method
+.annotate 'line', 454
+    new $P1085, "ResizablePMCArray"
+    push $P1085, "-"
+    .return ($P1085)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym</>"  :subid("278_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1088_tgt
-    .local int rx1088_pos
-    .local int rx1088_off
-    .local int rx1088_eos
-    .local int rx1088_rep
-    .local pmc rx1088_cur
-    .local pmc rx1088_debug
-    (rx1088_cur, rx1088_pos, rx1088_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1088_debug, rx1088_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1088_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1088_eos, rx1088_tgt
-    gt rx1088_pos, rx1088_eos, rx1088_done
-    set rx1088_off, 0
-    lt rx1088_pos, 2, rx1088_start
-    sub rx1088_off, rx1088_pos, 1
-    substr rx1088_tgt, rx1088_tgt, rx1088_off
-  rx1088_start:
-    eq $I10, 1, rx1088_restart
-    if_null rx1088_debug, debug_880
-    rx1088_cur."!cursor_debug"("START", "infix:sym</>")
-  debug_880:
+.sub "prefix:sym<?>"  :subid("276_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1089_tgt
+    .local int rx1089_pos
+    .local int rx1089_off
+    .local int rx1089_eos
+    .local int rx1089_rep
+    .local pmc rx1089_cur
+    .local pmc rx1089_debug
+    (rx1089_cur, rx1089_pos, rx1089_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1089_debug, rx1089_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1089_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1089_eos, rx1089_tgt
+    gt rx1089_pos, rx1089_eos, rx1089_done
+    set rx1089_off, 0
+    lt rx1089_pos, 2, rx1089_start
+    sub rx1089_off, rx1089_pos, 1
+    substr rx1089_tgt, rx1089_tgt, rx1089_off
+  rx1089_start:
+    eq $I10, 1, rx1089_restart
+    if_null rx1089_debug, debug_878
+    rx1089_cur."!cursor_debug"("START", "prefix:sym<?>")
+  debug_878:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1092_done
-    goto rxscan1092_scan
-  rxscan1092_loop:
-    ($P10) = rx1088_cur."from"()
-    inc $P10
-    set rx1088_pos, $P10
-    ge rx1088_pos, rx1088_eos, rxscan1092_done
-  rxscan1092_scan:
-    set_addr $I10, rxscan1092_loop
-    rx1088_cur."!mark_push"(0, rx1088_pos, $I10)
-  rxscan1092_done:
-.annotate 'line', 508
+    ne $I10, -1, rxscan1093_done
+    goto rxscan1093_scan
+  rxscan1093_loop:
+    ($P10) = rx1089_cur."from"()
+    inc $P10
+    set rx1089_pos, $P10
+    ge rx1089_pos, rx1089_eos, rxscan1093_done
+  rxscan1093_scan:
+    set_addr $I10, rxscan1093_loop
+    rx1089_cur."!mark_push"(0, rx1089_pos, $I10)
+  rxscan1093_done:
+.annotate 'line', 510
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1093_fail
-    rx1088_cur."!mark_push"(0, rx1088_pos, $I10)
-  # rx literal  "/"
-    add $I11, rx1088_pos, 1
-    gt $I11, rx1088_eos, rx1088_fail
-    sub $I11, rx1088_pos, rx1088_off
-    ord $I11, rx1088_tgt, $I11
-    ne $I11, 47, rx1088_fail
-    add rx1088_pos, 1
-    set_addr $I10, rxcap_1093_fail
-    ($I12, $I11) = rx1088_cur."!mark_peek"($I10)
-    rx1088_cur."!cursor_pos"($I11)
-    ($P10) = rx1088_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1088_pos, "")
-    rx1088_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1094_fail
+    rx1089_cur."!mark_push"(0, rx1089_pos, $I10)
+  # rx literal  "?"
+    add $I11, rx1089_pos, 1
+    gt $I11, rx1089_eos, rx1089_fail
+    sub $I11, rx1089_pos, rx1089_off
+    ord $I11, rx1089_tgt, $I11
+    ne $I11, 63, rx1089_fail
+    add rx1089_pos, 1
+    set_addr $I10, rxcap_1094_fail
+    ($I12, $I11) = rx1089_cur."!mark_peek"($I10)
+    rx1089_cur."!cursor_pos"($I11)
+    ($P10) = rx1089_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1089_pos, "")
+    rx1089_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1093_done
-  rxcap_1093_fail:
-    goto rx1088_fail
-  rxcap_1093_done:
+    goto rxcap_1094_done
+  rxcap_1094_fail:
+    goto rx1089_fail
+  rxcap_1094_done:
   # rx subrule "O" subtype=capture negate=
-    rx1088_cur."!cursor_pos"(rx1088_pos)
-    $P10 = rx1088_cur."O"("%multiplicative, :pirop<div>")
-    unless $P10, rx1088_fail
-    rx1088_cur."!mark_push"(0, -1, 0, $P10)
+    rx1089_cur."!cursor_pos"(rx1089_pos)
+    $P10 = rx1089_cur."O"("%symbolic_unary, :pirop<istrue>")
+    unless $P10, rx1089_fail
+    rx1089_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1088_pos = $P10."pos"()
+    rx1089_pos = $P10."pos"()
   # rx pass
-    rx1088_cur."!cursor_pass"(rx1088_pos, "infix:sym</>")
-    if_null rx1088_debug, debug_881
-    rx1088_cur."!cursor_debug"("PASS", "infix:sym</>", " at pos=", rx1088_pos)
+    rx1089_cur."!cursor_pass"(rx1089_pos, "prefix:sym<?>")
+    if_null rx1089_debug, debug_879
+    rx1089_cur."!cursor_debug"("PASS", "prefix:sym<?>", " at pos=", rx1089_pos)
+  debug_879:
+    .return (rx1089_cur)
+  rx1089_restart:
+.annotate 'line', 454
+    if_null rx1089_debug, debug_880
+    rx1089_cur."!cursor_debug"("NEXT", "prefix:sym<?>")
+  debug_880:
+  rx1089_fail:
+    (rx1089_rep, rx1089_pos, $I10, $P10) = rx1089_cur."!mark_fail"(0)
+    lt rx1089_pos, -1, rx1089_done
+    eq rx1089_pos, -1, rx1089_fail
+    jump $I10
+  rx1089_done:
+    rx1089_cur."!cursor_fail"()
+    if_null rx1089_debug, debug_881
+    rx1089_cur."!cursor_debug"("FAIL", "prefix:sym<?>")
   debug_881:
-    .return (rx1088_cur)
-  rx1088_restart:
-.annotate 'line', 447
-    if_null rx1088_debug, debug_882
-    rx1088_cur."!cursor_debug"("NEXT", "infix:sym</>")
-  debug_882:
-  rx1088_fail:
-    (rx1088_rep, rx1088_pos, $I10, $P10) = rx1088_cur."!mark_fail"(0)
-    lt rx1088_pos, -1, rx1088_done
-    eq rx1088_pos, -1, rx1088_fail
-    jump $I10
-  rx1088_done:
-    rx1088_cur."!cursor_fail"()
-    if_null rx1088_debug, debug_883
-    rx1088_cur."!cursor_debug"("FAIL", "infix:sym</>")
-  debug_883:
-    .return (rx1088_cur)
+    .return (rx1089_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym</>"  :subid("279_1282324002.40722") :method
-.annotate 'line', 447
-    $P1090 = self."!PREFIX__!subrule"("O", "/")
-    new $P1091, "ResizablePMCArray"
-    push $P1091, $P1090
-    .return ($P1091)
+.sub "!PREFIX__prefix:sym<?>"  :subid("277_1284728478.15265") :method
+.annotate 'line', 454
+    $P1091 = self."!PREFIX__!subrule"("O", "?")
+    new $P1092, "ResizablePMCArray"
+    push $P1092, $P1091
+    .return ($P1092)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<%>"  :subid("280_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1095_tgt
-    .local int rx1095_pos
-    .local int rx1095_off
-    .local int rx1095_eos
-    .local int rx1095_rep
-    .local pmc rx1095_cur
-    .local pmc rx1095_debug
-    (rx1095_cur, rx1095_pos, rx1095_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1095_debug, rx1095_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1095_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1095_eos, rx1095_tgt
-    gt rx1095_pos, rx1095_eos, rx1095_done
-    set rx1095_off, 0
-    lt rx1095_pos, 2, rx1095_start
-    sub rx1095_off, rx1095_pos, 1
-    substr rx1095_tgt, rx1095_tgt, rx1095_off
-  rx1095_start:
-    eq $I10, 1, rx1095_restart
-    if_null rx1095_debug, debug_884
-    rx1095_cur."!cursor_debug"("START", "infix:sym<%>")
-  debug_884:
+.sub "prefix:sym<!>"  :subid("278_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1096_tgt
+    .local int rx1096_pos
+    .local int rx1096_off
+    .local int rx1096_eos
+    .local int rx1096_rep
+    .local pmc rx1096_cur
+    .local pmc rx1096_debug
+    (rx1096_cur, rx1096_pos, rx1096_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1096_debug, rx1096_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1096_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1096_eos, rx1096_tgt
+    gt rx1096_pos, rx1096_eos, rx1096_done
+    set rx1096_off, 0
+    lt rx1096_pos, 2, rx1096_start
+    sub rx1096_off, rx1096_pos, 1
+    substr rx1096_tgt, rx1096_tgt, rx1096_off
+  rx1096_start:
+    eq $I10, 1, rx1096_restart
+    if_null rx1096_debug, debug_882
+    rx1096_cur."!cursor_debug"("START", "prefix:sym<!>")
+  debug_882:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1099_done
-    goto rxscan1099_scan
-  rxscan1099_loop:
-    ($P10) = rx1095_cur."from"()
-    inc $P10
-    set rx1095_pos, $P10
-    ge rx1095_pos, rx1095_eos, rxscan1099_done
-  rxscan1099_scan:
-    set_addr $I10, rxscan1099_loop
-    rx1095_cur."!mark_push"(0, rx1095_pos, $I10)
-  rxscan1099_done:
-.annotate 'line', 509
+    ne $I10, -1, rxscan1100_done
+    goto rxscan1100_scan
+  rxscan1100_loop:
+    ($P10) = rx1096_cur."from"()
+    inc $P10
+    set rx1096_pos, $P10
+    ge rx1096_pos, rx1096_eos, rxscan1100_done
+  rxscan1100_scan:
+    set_addr $I10, rxscan1100_loop
+    rx1096_cur."!mark_push"(0, rx1096_pos, $I10)
+  rxscan1100_done:
+.annotate 'line', 511
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1100_fail
-    rx1095_cur."!mark_push"(0, rx1095_pos, $I10)
-  # rx literal  "%"
-    add $I11, rx1095_pos, 1
-    gt $I11, rx1095_eos, rx1095_fail
-    sub $I11, rx1095_pos, rx1095_off
-    ord $I11, rx1095_tgt, $I11
-    ne $I11, 37, rx1095_fail
-    add rx1095_pos, 1
-    set_addr $I10, rxcap_1100_fail
-    ($I12, $I11) = rx1095_cur."!mark_peek"($I10)
-    rx1095_cur."!cursor_pos"($I11)
-    ($P10) = rx1095_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1095_pos, "")
-    rx1095_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1101_fail
+    rx1096_cur."!mark_push"(0, rx1096_pos, $I10)
+  # rx literal  "!"
+    add $I11, rx1096_pos, 1
+    gt $I11, rx1096_eos, rx1096_fail
+    sub $I11, rx1096_pos, rx1096_off
+    ord $I11, rx1096_tgt, $I11
+    ne $I11, 33, rx1096_fail
+    add rx1096_pos, 1
+    set_addr $I10, rxcap_1101_fail
+    ($I12, $I11) = rx1096_cur."!mark_peek"($I10)
+    rx1096_cur."!cursor_pos"($I11)
+    ($P10) = rx1096_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1096_pos, "")
+    rx1096_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1100_done
-  rxcap_1100_fail:
-    goto rx1095_fail
-  rxcap_1100_done:
+    goto rxcap_1101_done
+  rxcap_1101_fail:
+    goto rx1096_fail
+  rxcap_1101_done:
   # rx subrule "O" subtype=capture negate=
-    rx1095_cur."!cursor_pos"(rx1095_pos)
-    $P10 = rx1095_cur."O"("%multiplicative, :pirop<mod>")
-    unless $P10, rx1095_fail
-    rx1095_cur."!mark_push"(0, -1, 0, $P10)
+    rx1096_cur."!cursor_pos"(rx1096_pos)
+    $P10 = rx1096_cur."O"("%symbolic_unary, :pirop<isfalse>")
+    unless $P10, rx1096_fail
+    rx1096_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1095_pos = $P10."pos"()
+    rx1096_pos = $P10."pos"()
   # rx pass
-    rx1095_cur."!cursor_pass"(rx1095_pos, "infix:sym<%>")
-    if_null rx1095_debug, debug_885
-    rx1095_cur."!cursor_debug"("PASS", "infix:sym<%>", " at pos=", rx1095_pos)
+    rx1096_cur."!cursor_pass"(rx1096_pos, "prefix:sym<!>")
+    if_null rx1096_debug, debug_883
+    rx1096_cur."!cursor_debug"("PASS", "prefix:sym<!>", " at pos=", rx1096_pos)
+  debug_883:
+    .return (rx1096_cur)
+  rx1096_restart:
+.annotate 'line', 454
+    if_null rx1096_debug, debug_884
+    rx1096_cur."!cursor_debug"("NEXT", "prefix:sym<!>")
+  debug_884:
+  rx1096_fail:
+    (rx1096_rep, rx1096_pos, $I10, $P10) = rx1096_cur."!mark_fail"(0)
+    lt rx1096_pos, -1, rx1096_done
+    eq rx1096_pos, -1, rx1096_fail
+    jump $I10
+  rx1096_done:
+    rx1096_cur."!cursor_fail"()
+    if_null rx1096_debug, debug_885
+    rx1096_cur."!cursor_debug"("FAIL", "prefix:sym<!>")
   debug_885:
-    .return (rx1095_cur)
-  rx1095_restart:
-.annotate 'line', 447
-    if_null rx1095_debug, debug_886
-    rx1095_cur."!cursor_debug"("NEXT", "infix:sym<%>")
-  debug_886:
-  rx1095_fail:
-    (rx1095_rep, rx1095_pos, $I10, $P10) = rx1095_cur."!mark_fail"(0)
-    lt rx1095_pos, -1, rx1095_done
-    eq rx1095_pos, -1, rx1095_fail
-    jump $I10
-  rx1095_done:
-    rx1095_cur."!cursor_fail"()
-    if_null rx1095_debug, debug_887
-    rx1095_cur."!cursor_debug"("FAIL", "infix:sym<%>")
-  debug_887:
-    .return (rx1095_cur)
+    .return (rx1096_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<%>"  :subid("281_1282324002.40722") :method
-.annotate 'line', 447
-    $P1097 = self."!PREFIX__!subrule"("O", "%")
-    new $P1098, "ResizablePMCArray"
-    push $P1098, $P1097
-    .return ($P1098)
+.sub "!PREFIX__prefix:sym<!>"  :subid("279_1284728478.15265") :method
+.annotate 'line', 454
+    $P1098 = self."!PREFIX__!subrule"("O", "!")
+    new $P1099, "ResizablePMCArray"
+    push $P1099, $P1098
+    .return ($P1099)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<+&>"  :subid("282_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1102_tgt
-    .local int rx1102_pos
-    .local int rx1102_off
-    .local int rx1102_eos
-    .local int rx1102_rep
-    .local pmc rx1102_cur
-    .local pmc rx1102_debug
-    (rx1102_cur, rx1102_pos, rx1102_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1102_debug, rx1102_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1102_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1102_eos, rx1102_tgt
-    gt rx1102_pos, rx1102_eos, rx1102_done
-    set rx1102_off, 0
-    lt rx1102_pos, 2, rx1102_start
-    sub rx1102_off, rx1102_pos, 1
-    substr rx1102_tgt, rx1102_tgt, rx1102_off
-  rx1102_start:
-    eq $I10, 1, rx1102_restart
-    if_null rx1102_debug, debug_888
-    rx1102_cur."!cursor_debug"("START", "infix:sym<+&>")
-  debug_888:
+.sub "prefix:sym<|>"  :subid("280_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1103_tgt
+    .local int rx1103_pos
+    .local int rx1103_off
+    .local int rx1103_eos
+    .local int rx1103_rep
+    .local pmc rx1103_cur
+    .local pmc rx1103_debug
+    (rx1103_cur, rx1103_pos, rx1103_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1103_debug, rx1103_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1103_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1103_eos, rx1103_tgt
+    gt rx1103_pos, rx1103_eos, rx1103_done
+    set rx1103_off, 0
+    lt rx1103_pos, 2, rx1103_start
+    sub rx1103_off, rx1103_pos, 1
+    substr rx1103_tgt, rx1103_tgt, rx1103_off
+  rx1103_start:
+    eq $I10, 1, rx1103_restart
+    if_null rx1103_debug, debug_886
+    rx1103_cur."!cursor_debug"("START", "prefix:sym<|>")
+  debug_886:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1106_done
-    goto rxscan1106_scan
-  rxscan1106_loop:
-    ($P10) = rx1102_cur."from"()
-    inc $P10
-    set rx1102_pos, $P10
-    ge rx1102_pos, rx1102_eos, rxscan1106_done
-  rxscan1106_scan:
-    set_addr $I10, rxscan1106_loop
-    rx1102_cur."!mark_push"(0, rx1102_pos, $I10)
-  rxscan1106_done:
-.annotate 'line', 510
+    ne $I10, -1, rxscan1107_done
+    goto rxscan1107_scan
+  rxscan1107_loop:
+    ($P10) = rx1103_cur."from"()
+    inc $P10
+    set rx1103_pos, $P10
+    ge rx1103_pos, rx1103_eos, rxscan1107_done
+  rxscan1107_scan:
+    set_addr $I10, rxscan1107_loop
+    rx1103_cur."!mark_push"(0, rx1103_pos, $I10)
+  rxscan1107_done:
+.annotate 'line', 512
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1107_fail
-    rx1102_cur."!mark_push"(0, rx1102_pos, $I10)
-  # rx literal  "+&"
-    add $I11, rx1102_pos, 2
-    gt $I11, rx1102_eos, rx1102_fail
-    sub $I11, rx1102_pos, rx1102_off
-    substr $S10, rx1102_tgt, $I11, 2
-    ne $S10, "+&", rx1102_fail
-    add rx1102_pos, 2
-    set_addr $I10, rxcap_1107_fail
-    ($I12, $I11) = rx1102_cur."!mark_peek"($I10)
-    rx1102_cur."!cursor_pos"($I11)
-    ($P10) = rx1102_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1102_pos, "")
-    rx1102_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1108_fail
+    rx1103_cur."!mark_push"(0, rx1103_pos, $I10)
+  # rx literal  "|"
+    add $I11, rx1103_pos, 1
+    gt $I11, rx1103_eos, rx1103_fail
+    sub $I11, rx1103_pos, rx1103_off
+    ord $I11, rx1103_tgt, $I11
+    ne $I11, 124, rx1103_fail
+    add rx1103_pos, 1
+    set_addr $I10, rxcap_1108_fail
+    ($I12, $I11) = rx1103_cur."!mark_peek"($I10)
+    rx1103_cur."!cursor_pos"($I11)
+    ($P10) = rx1103_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1103_pos, "")
+    rx1103_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1107_done
-  rxcap_1107_fail:
-    goto rx1102_fail
-  rxcap_1107_done:
+    goto rxcap_1108_done
+  rxcap_1108_fail:
+    goto rx1103_fail
+  rxcap_1108_done:
   # rx subrule "O" subtype=capture negate=
-    rx1102_cur."!cursor_pos"(rx1102_pos)
-    $P10 = rx1102_cur."O"("%multiplicative, :pirop<band III>")
-    unless $P10, rx1102_fail
-    rx1102_cur."!mark_push"(0, -1, 0, $P10)
+    rx1103_cur."!cursor_pos"(rx1103_pos)
+    $P10 = rx1103_cur."O"("%symbolic_unary")
+    unless $P10, rx1103_fail
+    rx1103_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1102_pos = $P10."pos"()
+    rx1103_pos = $P10."pos"()
   # rx pass
-    rx1102_cur."!cursor_pass"(rx1102_pos, "infix:sym<+&>")
-    if_null rx1102_debug, debug_889
-    rx1102_cur."!cursor_debug"("PASS", "infix:sym<+&>", " at pos=", rx1102_pos)
+    rx1103_cur."!cursor_pass"(rx1103_pos, "prefix:sym<|>")
+    if_null rx1103_debug, debug_887
+    rx1103_cur."!cursor_debug"("PASS", "prefix:sym<|>", " at pos=", rx1103_pos)
+  debug_887:
+    .return (rx1103_cur)
+  rx1103_restart:
+.annotate 'line', 454
+    if_null rx1103_debug, debug_888
+    rx1103_cur."!cursor_debug"("NEXT", "prefix:sym<|>")
+  debug_888:
+  rx1103_fail:
+    (rx1103_rep, rx1103_pos, $I10, $P10) = rx1103_cur."!mark_fail"(0)
+    lt rx1103_pos, -1, rx1103_done
+    eq rx1103_pos, -1, rx1103_fail
+    jump $I10
+  rx1103_done:
+    rx1103_cur."!cursor_fail"()
+    if_null rx1103_debug, debug_889
+    rx1103_cur."!cursor_debug"("FAIL", "prefix:sym<|>")
   debug_889:
-    .return (rx1102_cur)
-  rx1102_restart:
-.annotate 'line', 447
-    if_null rx1102_debug, debug_890
-    rx1102_cur."!cursor_debug"("NEXT", "infix:sym<+&>")
-  debug_890:
-  rx1102_fail:
-    (rx1102_rep, rx1102_pos, $I10, $P10) = rx1102_cur."!mark_fail"(0)
-    lt rx1102_pos, -1, rx1102_done
-    eq rx1102_pos, -1, rx1102_fail
-    jump $I10
-  rx1102_done:
-    rx1102_cur."!cursor_fail"()
-    if_null rx1102_debug, debug_891
-    rx1102_cur."!cursor_debug"("FAIL", "infix:sym<+&>")
-  debug_891:
-    .return (rx1102_cur)
+    .return (rx1103_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<+&>"  :subid("283_1282324002.40722") :method
-.annotate 'line', 447
-    $P1104 = self."!PREFIX__!subrule"("O", "+&")
-    new $P1105, "ResizablePMCArray"
-    push $P1105, $P1104
-    .return ($P1105)
+.sub "!PREFIX__prefix:sym<|>"  :subid("281_1284728478.15265") :method
+.annotate 'line', 454
+    $P1105 = self."!PREFIX__!subrule"("O", "|")
+    new $P1106, "ResizablePMCArray"
+    push $P1106, $P1105
+    .return ($P1106)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<+>"  :subid("284_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1109_tgt
-    .local int rx1109_pos
-    .local int rx1109_off
-    .local int rx1109_eos
-    .local int rx1109_rep
-    .local pmc rx1109_cur
-    .local pmc rx1109_debug
-    (rx1109_cur, rx1109_pos, rx1109_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1109_debug, rx1109_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1109_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1109_eos, rx1109_tgt
-    gt rx1109_pos, rx1109_eos, rx1109_done
-    set rx1109_off, 0
-    lt rx1109_pos, 2, rx1109_start
-    sub rx1109_off, rx1109_pos, 1
-    substr rx1109_tgt, rx1109_tgt, rx1109_off
-  rx1109_start:
-    eq $I10, 1, rx1109_restart
-    if_null rx1109_debug, debug_892
-    rx1109_cur."!cursor_debug"("START", "infix:sym<+>")
-  debug_892:
+.sub "infix:sym<*>"  :subid("282_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1110_tgt
+    .local int rx1110_pos
+    .local int rx1110_off
+    .local int rx1110_eos
+    .local int rx1110_rep
+    .local pmc rx1110_cur
+    .local pmc rx1110_debug
+    (rx1110_cur, rx1110_pos, rx1110_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1110_debug, rx1110_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1110_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1110_eos, rx1110_tgt
+    gt rx1110_pos, rx1110_eos, rx1110_done
+    set rx1110_off, 0
+    lt rx1110_pos, 2, rx1110_start
+    sub rx1110_off, rx1110_pos, 1
+    substr rx1110_tgt, rx1110_tgt, rx1110_off
+  rx1110_start:
+    eq $I10, 1, rx1110_restart
+    if_null rx1110_debug, debug_890
+    rx1110_cur."!cursor_debug"("START", "infix:sym<*>")
+  debug_890:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1113_done
-    goto rxscan1113_scan
-  rxscan1113_loop:
-    ($P10) = rx1109_cur."from"()
-    inc $P10
-    set rx1109_pos, $P10
-    ge rx1109_pos, rx1109_eos, rxscan1113_done
-  rxscan1113_scan:
-    set_addr $I10, rxscan1113_loop
-    rx1109_cur."!mark_push"(0, rx1109_pos, $I10)
-  rxscan1113_done:
-.annotate 'line', 512
+    ne $I10, -1, rxscan1114_done
+    goto rxscan1114_scan
+  rxscan1114_loop:
+    ($P10) = rx1110_cur."from"()
+    inc $P10
+    set rx1110_pos, $P10
+    ge rx1110_pos, rx1110_eos, rxscan1114_done
+  rxscan1114_scan:
+    set_addr $I10, rxscan1114_loop
+    rx1110_cur."!mark_push"(0, rx1110_pos, $I10)
+  rxscan1114_done:
+.annotate 'line', 514
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1114_fail
-    rx1109_cur."!mark_push"(0, rx1109_pos, $I10)
-  # rx literal  "+"
-    add $I11, rx1109_pos, 1
-    gt $I11, rx1109_eos, rx1109_fail
-    sub $I11, rx1109_pos, rx1109_off
-    ord $I11, rx1109_tgt, $I11
-    ne $I11, 43, rx1109_fail
-    add rx1109_pos, 1
-    set_addr $I10, rxcap_1114_fail
-    ($I12, $I11) = rx1109_cur."!mark_peek"($I10)
-    rx1109_cur."!cursor_pos"($I11)
-    ($P10) = rx1109_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1109_pos, "")
-    rx1109_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1115_fail
+    rx1110_cur."!mark_push"(0, rx1110_pos, $I10)
+  # rx literal  "*"
+    add $I11, rx1110_pos, 1
+    gt $I11, rx1110_eos, rx1110_fail
+    sub $I11, rx1110_pos, rx1110_off
+    ord $I11, rx1110_tgt, $I11
+    ne $I11, 42, rx1110_fail
+    add rx1110_pos, 1
+    set_addr $I10, rxcap_1115_fail
+    ($I12, $I11) = rx1110_cur."!mark_peek"($I10)
+    rx1110_cur."!cursor_pos"($I11)
+    ($P10) = rx1110_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1110_pos, "")
+    rx1110_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1114_done
-  rxcap_1114_fail:
-    goto rx1109_fail
-  rxcap_1114_done:
+    goto rxcap_1115_done
+  rxcap_1115_fail:
+    goto rx1110_fail
+  rxcap_1115_done:
   # rx subrule "O" subtype=capture negate=
-    rx1109_cur."!cursor_pos"(rx1109_pos)
-    $P10 = rx1109_cur."O"("%additive, :pirop<add>")
-    unless $P10, rx1109_fail
-    rx1109_cur."!mark_push"(0, -1, 0, $P10)
+    rx1110_cur."!cursor_pos"(rx1110_pos)
+    $P10 = rx1110_cur."O"("%multiplicative, :pirop<mul>")
+    unless $P10, rx1110_fail
+    rx1110_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1109_pos = $P10."pos"()
+    rx1110_pos = $P10."pos"()
   # rx pass
-    rx1109_cur."!cursor_pass"(rx1109_pos, "infix:sym<+>")
-    if_null rx1109_debug, debug_893
-    rx1109_cur."!cursor_debug"("PASS", "infix:sym<+>", " at pos=", rx1109_pos)
+    rx1110_cur."!cursor_pass"(rx1110_pos, "infix:sym<*>")
+    if_null rx1110_debug, debug_891
+    rx1110_cur."!cursor_debug"("PASS", "infix:sym<*>", " at pos=", rx1110_pos)
+  debug_891:
+    .return (rx1110_cur)
+  rx1110_restart:
+.annotate 'line', 454
+    if_null rx1110_debug, debug_892
+    rx1110_cur."!cursor_debug"("NEXT", "infix:sym<*>")
+  debug_892:
+  rx1110_fail:
+    (rx1110_rep, rx1110_pos, $I10, $P10) = rx1110_cur."!mark_fail"(0)
+    lt rx1110_pos, -1, rx1110_done
+    eq rx1110_pos, -1, rx1110_fail
+    jump $I10
+  rx1110_done:
+    rx1110_cur."!cursor_fail"()
+    if_null rx1110_debug, debug_893
+    rx1110_cur."!cursor_debug"("FAIL", "infix:sym<*>")
   debug_893:
-    .return (rx1109_cur)
-  rx1109_restart:
-.annotate 'line', 447
-    if_null rx1109_debug, debug_894
-    rx1109_cur."!cursor_debug"("NEXT", "infix:sym<+>")
-  debug_894:
-  rx1109_fail:
-    (rx1109_rep, rx1109_pos, $I10, $P10) = rx1109_cur."!mark_fail"(0)
-    lt rx1109_pos, -1, rx1109_done
-    eq rx1109_pos, -1, rx1109_fail
-    jump $I10
-  rx1109_done:
-    rx1109_cur."!cursor_fail"()
-    if_null rx1109_debug, debug_895
-    rx1109_cur."!cursor_debug"("FAIL", "infix:sym<+>")
-  debug_895:
-    .return (rx1109_cur)
+    .return (rx1110_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<+>"  :subid("285_1282324002.40722") :method
-.annotate 'line', 447
-    $P1111 = self."!PREFIX__!subrule"("O", "+")
-    new $P1112, "ResizablePMCArray"
-    push $P1112, $P1111
-    .return ($P1112)
+.sub "!PREFIX__infix:sym<*>"  :subid("283_1284728478.15265") :method
+.annotate 'line', 454
+    $P1112 = self."!PREFIX__!subrule"("O", "*")
+    new $P1113, "ResizablePMCArray"
+    push $P1113, $P1112
+    .return ($P1113)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<->"  :subid("286_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1116_tgt
-    .local int rx1116_pos
-    .local int rx1116_off
-    .local int rx1116_eos
-    .local int rx1116_rep
-    .local pmc rx1116_cur
-    .local pmc rx1116_debug
-    (rx1116_cur, rx1116_pos, rx1116_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1116_debug, rx1116_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1116_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1116_eos, rx1116_tgt
-    gt rx1116_pos, rx1116_eos, rx1116_done
-    set rx1116_off, 0
-    lt rx1116_pos, 2, rx1116_start
-    sub rx1116_off, rx1116_pos, 1
-    substr rx1116_tgt, rx1116_tgt, rx1116_off
-  rx1116_start:
-    eq $I10, 1, rx1116_restart
-    if_null rx1116_debug, debug_896
-    rx1116_cur."!cursor_debug"("START", "infix:sym<->")
-  debug_896:
+.sub "infix:sym</>"  :subid("284_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1117_tgt
+    .local int rx1117_pos
+    .local int rx1117_off
+    .local int rx1117_eos
+    .local int rx1117_rep
+    .local pmc rx1117_cur
+    .local pmc rx1117_debug
+    (rx1117_cur, rx1117_pos, rx1117_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1117_debug, rx1117_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1117_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1117_eos, rx1117_tgt
+    gt rx1117_pos, rx1117_eos, rx1117_done
+    set rx1117_off, 0
+    lt rx1117_pos, 2, rx1117_start
+    sub rx1117_off, rx1117_pos, 1
+    substr rx1117_tgt, rx1117_tgt, rx1117_off
+  rx1117_start:
+    eq $I10, 1, rx1117_restart
+    if_null rx1117_debug, debug_894
+    rx1117_cur."!cursor_debug"("START", "infix:sym</>")
+  debug_894:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1120_done
-    goto rxscan1120_scan
-  rxscan1120_loop:
-    ($P10) = rx1116_cur."from"()
-    inc $P10
-    set rx1116_pos, $P10
-    ge rx1116_pos, rx1116_eos, rxscan1120_done
-  rxscan1120_scan:
-    set_addr $I10, rxscan1120_loop
-    rx1116_cur."!mark_push"(0, rx1116_pos, $I10)
-  rxscan1120_done:
-.annotate 'line', 513
+    ne $I10, -1, rxscan1121_done
+    goto rxscan1121_scan
+  rxscan1121_loop:
+    ($P10) = rx1117_cur."from"()
+    inc $P10
+    set rx1117_pos, $P10
+    ge rx1117_pos, rx1117_eos, rxscan1121_done
+  rxscan1121_scan:
+    set_addr $I10, rxscan1121_loop
+    rx1117_cur."!mark_push"(0, rx1117_pos, $I10)
+  rxscan1121_done:
+.annotate 'line', 515
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1121_fail
-    rx1116_cur."!mark_push"(0, rx1116_pos, $I10)
-  # rx literal  "-"
-    add $I11, rx1116_pos, 1
-    gt $I11, rx1116_eos, rx1116_fail
-    sub $I11, rx1116_pos, rx1116_off
-    ord $I11, rx1116_tgt, $I11
-    ne $I11, 45, rx1116_fail
-    add rx1116_pos, 1
-    set_addr $I10, rxcap_1121_fail
-    ($I12, $I11) = rx1116_cur."!mark_peek"($I10)
-    rx1116_cur."!cursor_pos"($I11)
-    ($P10) = rx1116_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1116_pos, "")
-    rx1116_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1122_fail
+    rx1117_cur."!mark_push"(0, rx1117_pos, $I10)
+  # rx literal  "/"
+    add $I11, rx1117_pos, 1
+    gt $I11, rx1117_eos, rx1117_fail
+    sub $I11, rx1117_pos, rx1117_off
+    ord $I11, rx1117_tgt, $I11
+    ne $I11, 47, rx1117_fail
+    add rx1117_pos, 1
+    set_addr $I10, rxcap_1122_fail
+    ($I12, $I11) = rx1117_cur."!mark_peek"($I10)
+    rx1117_cur."!cursor_pos"($I11)
+    ($P10) = rx1117_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1117_pos, "")
+    rx1117_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1121_done
-  rxcap_1121_fail:
-    goto rx1116_fail
-  rxcap_1121_done:
+    goto rxcap_1122_done
+  rxcap_1122_fail:
+    goto rx1117_fail
+  rxcap_1122_done:
   # rx subrule "O" subtype=capture negate=
-    rx1116_cur."!cursor_pos"(rx1116_pos)
-    $P10 = rx1116_cur."O"("%additive, :pirop<sub>")
-    unless $P10, rx1116_fail
-    rx1116_cur."!mark_push"(0, -1, 0, $P10)
+    rx1117_cur."!cursor_pos"(rx1117_pos)
+    $P10 = rx1117_cur."O"("%multiplicative, :pirop<div>")
+    unless $P10, rx1117_fail
+    rx1117_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1116_pos = $P10."pos"()
+    rx1117_pos = $P10."pos"()
   # rx pass
-    rx1116_cur."!cursor_pass"(rx1116_pos, "infix:sym<->")
-    if_null rx1116_debug, debug_897
-    rx1116_cur."!cursor_debug"("PASS", "infix:sym<->", " at pos=", rx1116_pos)
+    rx1117_cur."!cursor_pass"(rx1117_pos, "infix:sym</>")
+    if_null rx1117_debug, debug_895
+    rx1117_cur."!cursor_debug"("PASS", "infix:sym</>", " at pos=", rx1117_pos)
+  debug_895:
+    .return (rx1117_cur)
+  rx1117_restart:
+.annotate 'line', 454
+    if_null rx1117_debug, debug_896
+    rx1117_cur."!cursor_debug"("NEXT", "infix:sym</>")
+  debug_896:
+  rx1117_fail:
+    (rx1117_rep, rx1117_pos, $I10, $P10) = rx1117_cur."!mark_fail"(0)
+    lt rx1117_pos, -1, rx1117_done
+    eq rx1117_pos, -1, rx1117_fail
+    jump $I10
+  rx1117_done:
+    rx1117_cur."!cursor_fail"()
+    if_null rx1117_debug, debug_897
+    rx1117_cur."!cursor_debug"("FAIL", "infix:sym</>")
   debug_897:
-    .return (rx1116_cur)
-  rx1116_restart:
-.annotate 'line', 447
-    if_null rx1116_debug, debug_898
-    rx1116_cur."!cursor_debug"("NEXT", "infix:sym<->")
-  debug_898:
-  rx1116_fail:
-    (rx1116_rep, rx1116_pos, $I10, $P10) = rx1116_cur."!mark_fail"(0)
-    lt rx1116_pos, -1, rx1116_done
-    eq rx1116_pos, -1, rx1116_fail
-    jump $I10
-  rx1116_done:
-    rx1116_cur."!cursor_fail"()
-    if_null rx1116_debug, debug_899
-    rx1116_cur."!cursor_debug"("FAIL", "infix:sym<->")
-  debug_899:
-    .return (rx1116_cur)
+    .return (rx1117_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<->"  :subid("287_1282324002.40722") :method
-.annotate 'line', 447
-    $P1118 = self."!PREFIX__!subrule"("O", "-")
-    new $P1119, "ResizablePMCArray"
-    push $P1119, $P1118
-    .return ($P1119)
+.sub "!PREFIX__infix:sym</>"  :subid("285_1284728478.15265") :method
+.annotate 'line', 454
+    $P1119 = self."!PREFIX__!subrule"("O", "/")
+    new $P1120, "ResizablePMCArray"
+    push $P1120, $P1119
+    .return ($P1120)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<+|>"  :subid("288_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1123_tgt
-    .local int rx1123_pos
-    .local int rx1123_off
-    .local int rx1123_eos
-    .local int rx1123_rep
-    .local pmc rx1123_cur
-    .local pmc rx1123_debug
-    (rx1123_cur, rx1123_pos, rx1123_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1123_debug, rx1123_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1123_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1123_eos, rx1123_tgt
-    gt rx1123_pos, rx1123_eos, rx1123_done
-    set rx1123_off, 0
-    lt rx1123_pos, 2, rx1123_start
-    sub rx1123_off, rx1123_pos, 1
-    substr rx1123_tgt, rx1123_tgt, rx1123_off
-  rx1123_start:
-    eq $I10, 1, rx1123_restart
-    if_null rx1123_debug, debug_900
-    rx1123_cur."!cursor_debug"("START", "infix:sym<+|>")
-  debug_900:
+.sub "infix:sym<%>"  :subid("286_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1124_tgt
+    .local int rx1124_pos
+    .local int rx1124_off
+    .local int rx1124_eos
+    .local int rx1124_rep
+    .local pmc rx1124_cur
+    .local pmc rx1124_debug
+    (rx1124_cur, rx1124_pos, rx1124_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1124_debug, rx1124_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1124_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1124_eos, rx1124_tgt
+    gt rx1124_pos, rx1124_eos, rx1124_done
+    set rx1124_off, 0
+    lt rx1124_pos, 2, rx1124_start
+    sub rx1124_off, rx1124_pos, 1
+    substr rx1124_tgt, rx1124_tgt, rx1124_off
+  rx1124_start:
+    eq $I10, 1, rx1124_restart
+    if_null rx1124_debug, debug_898
+    rx1124_cur."!cursor_debug"("START", "infix:sym<%>")
+  debug_898:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1127_done
-    goto rxscan1127_scan
-  rxscan1127_loop:
-    ($P10) = rx1123_cur."from"()
-    inc $P10
-    set rx1123_pos, $P10
-    ge rx1123_pos, rx1123_eos, rxscan1127_done
-  rxscan1127_scan:
-    set_addr $I10, rxscan1127_loop
-    rx1123_cur."!mark_push"(0, rx1123_pos, $I10)
-  rxscan1127_done:
-.annotate 'line', 514
+    ne $I10, -1, rxscan1128_done
+    goto rxscan1128_scan
+  rxscan1128_loop:
+    ($P10) = rx1124_cur."from"()
+    inc $P10
+    set rx1124_pos, $P10
+    ge rx1124_pos, rx1124_eos, rxscan1128_done
+  rxscan1128_scan:
+    set_addr $I10, rxscan1128_loop
+    rx1124_cur."!mark_push"(0, rx1124_pos, $I10)
+  rxscan1128_done:
+.annotate 'line', 516
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1128_fail
-    rx1123_cur."!mark_push"(0, rx1123_pos, $I10)
-  # rx literal  "+|"
-    add $I11, rx1123_pos, 2
-    gt $I11, rx1123_eos, rx1123_fail
-    sub $I11, rx1123_pos, rx1123_off
-    substr $S10, rx1123_tgt, $I11, 2
-    ne $S10, "+|", rx1123_fail
-    add rx1123_pos, 2
-    set_addr $I10, rxcap_1128_fail
-    ($I12, $I11) = rx1123_cur."!mark_peek"($I10)
-    rx1123_cur."!cursor_pos"($I11)
-    ($P10) = rx1123_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1123_pos, "")
-    rx1123_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1129_fail
+    rx1124_cur."!mark_push"(0, rx1124_pos, $I10)
+  # rx literal  "%"
+    add $I11, rx1124_pos, 1
+    gt $I11, rx1124_eos, rx1124_fail
+    sub $I11, rx1124_pos, rx1124_off
+    ord $I11, rx1124_tgt, $I11
+    ne $I11, 37, rx1124_fail
+    add rx1124_pos, 1
+    set_addr $I10, rxcap_1129_fail
+    ($I12, $I11) = rx1124_cur."!mark_peek"($I10)
+    rx1124_cur."!cursor_pos"($I11)
+    ($P10) = rx1124_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1124_pos, "")
+    rx1124_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1128_done
-  rxcap_1128_fail:
-    goto rx1123_fail
-  rxcap_1128_done:
+    goto rxcap_1129_done
+  rxcap_1129_fail:
+    goto rx1124_fail
+  rxcap_1129_done:
   # rx subrule "O" subtype=capture negate=
-    rx1123_cur."!cursor_pos"(rx1123_pos)
-    $P10 = rx1123_cur."O"("%additive, :pirop<bor III>")
-    unless $P10, rx1123_fail
-    rx1123_cur."!mark_push"(0, -1, 0, $P10)
+    rx1124_cur."!cursor_pos"(rx1124_pos)
+    $P10 = rx1124_cur."O"("%multiplicative, :pirop<mod>")
+    unless $P10, rx1124_fail
+    rx1124_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1123_pos = $P10."pos"()
+    rx1124_pos = $P10."pos"()
   # rx pass
-    rx1123_cur."!cursor_pass"(rx1123_pos, "infix:sym<+|>")
-    if_null rx1123_debug, debug_901
-    rx1123_cur."!cursor_debug"("PASS", "infix:sym<+|>", " at pos=", rx1123_pos)
+    rx1124_cur."!cursor_pass"(rx1124_pos, "infix:sym<%>")
+    if_null rx1124_debug, debug_899
+    rx1124_cur."!cursor_debug"("PASS", "infix:sym<%>", " at pos=", rx1124_pos)
+  debug_899:
+    .return (rx1124_cur)
+  rx1124_restart:
+.annotate 'line', 454
+    if_null rx1124_debug, debug_900
+    rx1124_cur."!cursor_debug"("NEXT", "infix:sym<%>")
+  debug_900:
+  rx1124_fail:
+    (rx1124_rep, rx1124_pos, $I10, $P10) = rx1124_cur."!mark_fail"(0)
+    lt rx1124_pos, -1, rx1124_done
+    eq rx1124_pos, -1, rx1124_fail
+    jump $I10
+  rx1124_done:
+    rx1124_cur."!cursor_fail"()
+    if_null rx1124_debug, debug_901
+    rx1124_cur."!cursor_debug"("FAIL", "infix:sym<%>")
   debug_901:
-    .return (rx1123_cur)
-  rx1123_restart:
-.annotate 'line', 447
-    if_null rx1123_debug, debug_902
-    rx1123_cur."!cursor_debug"("NEXT", "infix:sym<+|>")
-  debug_902:
-  rx1123_fail:
-    (rx1123_rep, rx1123_pos, $I10, $P10) = rx1123_cur."!mark_fail"(0)
-    lt rx1123_pos, -1, rx1123_done
-    eq rx1123_pos, -1, rx1123_fail
-    jump $I10
-  rx1123_done:
-    rx1123_cur."!cursor_fail"()
-    if_null rx1123_debug, debug_903
-    rx1123_cur."!cursor_debug"("FAIL", "infix:sym<+|>")
-  debug_903:
-    .return (rx1123_cur)
+    .return (rx1124_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<+|>"  :subid("289_1282324002.40722") :method
-.annotate 'line', 447
-    $P1125 = self."!PREFIX__!subrule"("O", "+|")
-    new $P1126, "ResizablePMCArray"
-    push $P1126, $P1125
-    .return ($P1126)
+.sub "!PREFIX__infix:sym<%>"  :subid("287_1284728478.15265") :method
+.annotate 'line', 454
+    $P1126 = self."!PREFIX__!subrule"("O", "%")
+    new $P1127, "ResizablePMCArray"
+    push $P1127, $P1126
+    .return ($P1127)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<+^>"  :subid("290_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1130_tgt
-    .local int rx1130_pos
-    .local int rx1130_off
-    .local int rx1130_eos
-    .local int rx1130_rep
-    .local pmc rx1130_cur
-    .local pmc rx1130_debug
-    (rx1130_cur, rx1130_pos, rx1130_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1130_debug, rx1130_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1130_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1130_eos, rx1130_tgt
-    gt rx1130_pos, rx1130_eos, rx1130_done
-    set rx1130_off, 0
-    lt rx1130_pos, 2, rx1130_start
-    sub rx1130_off, rx1130_pos, 1
-    substr rx1130_tgt, rx1130_tgt, rx1130_off
-  rx1130_start:
-    eq $I10, 1, rx1130_restart
-    if_null rx1130_debug, debug_904
-    rx1130_cur."!cursor_debug"("START", "infix:sym<+^>")
-  debug_904:
+.sub "infix:sym<+&>"  :subid("288_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1131_tgt
+    .local int rx1131_pos
+    .local int rx1131_off
+    .local int rx1131_eos
+    .local int rx1131_rep
+    .local pmc rx1131_cur
+    .local pmc rx1131_debug
+    (rx1131_cur, rx1131_pos, rx1131_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1131_debug, rx1131_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1131_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1131_eos, rx1131_tgt
+    gt rx1131_pos, rx1131_eos, rx1131_done
+    set rx1131_off, 0
+    lt rx1131_pos, 2, rx1131_start
+    sub rx1131_off, rx1131_pos, 1
+    substr rx1131_tgt, rx1131_tgt, rx1131_off
+  rx1131_start:
+    eq $I10, 1, rx1131_restart
+    if_null rx1131_debug, debug_902
+    rx1131_cur."!cursor_debug"("START", "infix:sym<+&>")
+  debug_902:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1134_done
-    goto rxscan1134_scan
-  rxscan1134_loop:
-    ($P10) = rx1130_cur."from"()
-    inc $P10
-    set rx1130_pos, $P10
-    ge rx1130_pos, rx1130_eos, rxscan1134_done
-  rxscan1134_scan:
-    set_addr $I10, rxscan1134_loop
-    rx1130_cur."!mark_push"(0, rx1130_pos, $I10)
-  rxscan1134_done:
-.annotate 'line', 515
+    ne $I10, -1, rxscan1135_done
+    goto rxscan1135_scan
+  rxscan1135_loop:
+    ($P10) = rx1131_cur."from"()
+    inc $P10
+    set rx1131_pos, $P10
+    ge rx1131_pos, rx1131_eos, rxscan1135_done
+  rxscan1135_scan:
+    set_addr $I10, rxscan1135_loop
+    rx1131_cur."!mark_push"(0, rx1131_pos, $I10)
+  rxscan1135_done:
+.annotate 'line', 517
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1135_fail
-    rx1130_cur."!mark_push"(0, rx1130_pos, $I10)
-  # rx literal  "+^"
-    add $I11, rx1130_pos, 2
-    gt $I11, rx1130_eos, rx1130_fail
-    sub $I11, rx1130_pos, rx1130_off
-    substr $S10, rx1130_tgt, $I11, 2
-    ne $S10, "+^", rx1130_fail
-    add rx1130_pos, 2
-    set_addr $I10, rxcap_1135_fail
-    ($I12, $I11) = rx1130_cur."!mark_peek"($I10)
-    rx1130_cur."!cursor_pos"($I11)
-    ($P10) = rx1130_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1130_pos, "")
-    rx1130_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1136_fail
+    rx1131_cur."!mark_push"(0, rx1131_pos, $I10)
+  # rx literal  "+&"
+    add $I11, rx1131_pos, 2
+    gt $I11, rx1131_eos, rx1131_fail
+    sub $I11, rx1131_pos, rx1131_off
+    substr $S10, rx1131_tgt, $I11, 2
+    ne $S10, "+&", rx1131_fail
+    add rx1131_pos, 2
+    set_addr $I10, rxcap_1136_fail
+    ($I12, $I11) = rx1131_cur."!mark_peek"($I10)
+    rx1131_cur."!cursor_pos"($I11)
+    ($P10) = rx1131_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1131_pos, "")
+    rx1131_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1135_done
-  rxcap_1135_fail:
-    goto rx1130_fail
-  rxcap_1135_done:
+    goto rxcap_1136_done
+  rxcap_1136_fail:
+    goto rx1131_fail
+  rxcap_1136_done:
   # rx subrule "O" subtype=capture negate=
-    rx1130_cur."!cursor_pos"(rx1130_pos)
-    $P10 = rx1130_cur."O"("%additive, :pirop<bxor III>")
-    unless $P10, rx1130_fail
-    rx1130_cur."!mark_push"(0, -1, 0, $P10)
+    rx1131_cur."!cursor_pos"(rx1131_pos)
+    $P10 = rx1131_cur."O"("%multiplicative, :pirop<band III>")
+    unless $P10, rx1131_fail
+    rx1131_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1130_pos = $P10."pos"()
+    rx1131_pos = $P10."pos"()
   # rx pass
-    rx1130_cur."!cursor_pass"(rx1130_pos, "infix:sym<+^>")
-    if_null rx1130_debug, debug_905
-    rx1130_cur."!cursor_debug"("PASS", "infix:sym<+^>", " at pos=", rx1130_pos)
+    rx1131_cur."!cursor_pass"(rx1131_pos, "infix:sym<+&>")
+    if_null rx1131_debug, debug_903
+    rx1131_cur."!cursor_debug"("PASS", "infix:sym<+&>", " at pos=", rx1131_pos)
+  debug_903:
+    .return (rx1131_cur)
+  rx1131_restart:
+.annotate 'line', 454
+    if_null rx1131_debug, debug_904
+    rx1131_cur."!cursor_debug"("NEXT", "infix:sym<+&>")
+  debug_904:
+  rx1131_fail:
+    (rx1131_rep, rx1131_pos, $I10, $P10) = rx1131_cur."!mark_fail"(0)
+    lt rx1131_pos, -1, rx1131_done
+    eq rx1131_pos, -1, rx1131_fail
+    jump $I10
+  rx1131_done:
+    rx1131_cur."!cursor_fail"()
+    if_null rx1131_debug, debug_905
+    rx1131_cur."!cursor_debug"("FAIL", "infix:sym<+&>")
   debug_905:
-    .return (rx1130_cur)
-  rx1130_restart:
-.annotate 'line', 447
-    if_null rx1130_debug, debug_906
-    rx1130_cur."!cursor_debug"("NEXT", "infix:sym<+^>")
-  debug_906:
-  rx1130_fail:
-    (rx1130_rep, rx1130_pos, $I10, $P10) = rx1130_cur."!mark_fail"(0)
-    lt rx1130_pos, -1, rx1130_done
-    eq rx1130_pos, -1, rx1130_fail
-    jump $I10
-  rx1130_done:
-    rx1130_cur."!cursor_fail"()
-    if_null rx1130_debug, debug_907
-    rx1130_cur."!cursor_debug"("FAIL", "infix:sym<+^>")
-  debug_907:
-    .return (rx1130_cur)
+    .return (rx1131_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<+^>"  :subid("291_1282324002.40722") :method
-.annotate 'line', 447
-    $P1132 = self."!PREFIX__!subrule"("O", "+^")
-    new $P1133, "ResizablePMCArray"
-    push $P1133, $P1132
-    .return ($P1133)
+.sub "!PREFIX__infix:sym<+&>"  :subid("289_1284728478.15265") :method
+.annotate 'line', 454
+    $P1133 = self."!PREFIX__!subrule"("O", "+&")
+    new $P1134, "ResizablePMCArray"
+    push $P1134, $P1133
+    .return ($P1134)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<~>"  :subid("292_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1137_tgt
-    .local int rx1137_pos
-    .local int rx1137_off
-    .local int rx1137_eos
-    .local int rx1137_rep
-    .local pmc rx1137_cur
-    .local pmc rx1137_debug
-    (rx1137_cur, rx1137_pos, rx1137_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1137_debug, rx1137_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1137_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1137_eos, rx1137_tgt
-    gt rx1137_pos, rx1137_eos, rx1137_done
-    set rx1137_off, 0
-    lt rx1137_pos, 2, rx1137_start
-    sub rx1137_off, rx1137_pos, 1
-    substr rx1137_tgt, rx1137_tgt, rx1137_off
-  rx1137_start:
-    eq $I10, 1, rx1137_restart
-    if_null rx1137_debug, debug_908
-    rx1137_cur."!cursor_debug"("START", "infix:sym<~>")
-  debug_908:
+.sub "infix:sym<+>"  :subid("290_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1138_tgt
+    .local int rx1138_pos
+    .local int rx1138_off
+    .local int rx1138_eos
+    .local int rx1138_rep
+    .local pmc rx1138_cur
+    .local pmc rx1138_debug
+    (rx1138_cur, rx1138_pos, rx1138_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1138_debug, rx1138_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1138_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1138_eos, rx1138_tgt
+    gt rx1138_pos, rx1138_eos, rx1138_done
+    set rx1138_off, 0
+    lt rx1138_pos, 2, rx1138_start
+    sub rx1138_off, rx1138_pos, 1
+    substr rx1138_tgt, rx1138_tgt, rx1138_off
+  rx1138_start:
+    eq $I10, 1, rx1138_restart
+    if_null rx1138_debug, debug_906
+    rx1138_cur."!cursor_debug"("START", "infix:sym<+>")
+  debug_906:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1141_done
-    goto rxscan1141_scan
-  rxscan1141_loop:
-    ($P10) = rx1137_cur."from"()
-    inc $P10
-    set rx1137_pos, $P10
-    ge rx1137_pos, rx1137_eos, rxscan1141_done
-  rxscan1141_scan:
-    set_addr $I10, rxscan1141_loop
-    rx1137_cur."!mark_push"(0, rx1137_pos, $I10)
-  rxscan1141_done:
-.annotate 'line', 517
+    ne $I10, -1, rxscan1142_done
+    goto rxscan1142_scan
+  rxscan1142_loop:
+    ($P10) = rx1138_cur."from"()
+    inc $P10
+    set rx1138_pos, $P10
+    ge rx1138_pos, rx1138_eos, rxscan1142_done
+  rxscan1142_scan:
+    set_addr $I10, rxscan1142_loop
+    rx1138_cur."!mark_push"(0, rx1138_pos, $I10)
+  rxscan1142_done:
+.annotate 'line', 519
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1142_fail
-    rx1137_cur."!mark_push"(0, rx1137_pos, $I10)
-  # rx literal  "~"
-    add $I11, rx1137_pos, 1
-    gt $I11, rx1137_eos, rx1137_fail
-    sub $I11, rx1137_pos, rx1137_off
-    ord $I11, rx1137_tgt, $I11
-    ne $I11, 126, rx1137_fail
-    add rx1137_pos, 1
-    set_addr $I10, rxcap_1142_fail
-    ($I12, $I11) = rx1137_cur."!mark_peek"($I10)
-    rx1137_cur."!cursor_pos"($I11)
-    ($P10) = rx1137_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1137_pos, "")
-    rx1137_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1143_fail
+    rx1138_cur."!mark_push"(0, rx1138_pos, $I10)
+  # rx literal  "+"
+    add $I11, rx1138_pos, 1
+    gt $I11, rx1138_eos, rx1138_fail
+    sub $I11, rx1138_pos, rx1138_off
+    ord $I11, rx1138_tgt, $I11
+    ne $I11, 43, rx1138_fail
+    add rx1138_pos, 1
+    set_addr $I10, rxcap_1143_fail
+    ($I12, $I11) = rx1138_cur."!mark_peek"($I10)
+    rx1138_cur."!cursor_pos"($I11)
+    ($P10) = rx1138_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1138_pos, "")
+    rx1138_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1142_done
-  rxcap_1142_fail:
-    goto rx1137_fail
-  rxcap_1142_done:
+    goto rxcap_1143_done
+  rxcap_1143_fail:
+    goto rx1138_fail
+  rxcap_1143_done:
   # rx subrule "O" subtype=capture negate=
-    rx1137_cur."!cursor_pos"(rx1137_pos)
-    $P10 = rx1137_cur."O"("%concatenation , :pirop<concat>")
-    unless $P10, rx1137_fail
-    rx1137_cur."!mark_push"(0, -1, 0, $P10)
+    rx1138_cur."!cursor_pos"(rx1138_pos)
+    $P10 = rx1138_cur."O"("%additive, :pirop<add>")
+    unless $P10, rx1138_fail
+    rx1138_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1137_pos = $P10."pos"()
+    rx1138_pos = $P10."pos"()
   # rx pass
-    rx1137_cur."!cursor_pass"(rx1137_pos, "infix:sym<~>")
-    if_null rx1137_debug, debug_909
-    rx1137_cur."!cursor_debug"("PASS", "infix:sym<~>", " at pos=", rx1137_pos)
+    rx1138_cur."!cursor_pass"(rx1138_pos, "infix:sym<+>")
+    if_null rx1138_debug, debug_907
+    rx1138_cur."!cursor_debug"("PASS", "infix:sym<+>", " at pos=", rx1138_pos)
+  debug_907:
+    .return (rx1138_cur)
+  rx1138_restart:
+.annotate 'line', 454
+    if_null rx1138_debug, debug_908
+    rx1138_cur."!cursor_debug"("NEXT", "infix:sym<+>")
+  debug_908:
+  rx1138_fail:
+    (rx1138_rep, rx1138_pos, $I10, $P10) = rx1138_cur."!mark_fail"(0)
+    lt rx1138_pos, -1, rx1138_done
+    eq rx1138_pos, -1, rx1138_fail
+    jump $I10
+  rx1138_done:
+    rx1138_cur."!cursor_fail"()
+    if_null rx1138_debug, debug_909
+    rx1138_cur."!cursor_debug"("FAIL", "infix:sym<+>")
   debug_909:
-    .return (rx1137_cur)
-  rx1137_restart:
-.annotate 'line', 447
-    if_null rx1137_debug, debug_910
-    rx1137_cur."!cursor_debug"("NEXT", "infix:sym<~>")
-  debug_910:
-  rx1137_fail:
-    (rx1137_rep, rx1137_pos, $I10, $P10) = rx1137_cur."!mark_fail"(0)
-    lt rx1137_pos, -1, rx1137_done
-    eq rx1137_pos, -1, rx1137_fail
-    jump $I10
-  rx1137_done:
-    rx1137_cur."!cursor_fail"()
-    if_null rx1137_debug, debug_911
-    rx1137_cur."!cursor_debug"("FAIL", "infix:sym<~>")
-  debug_911:
-    .return (rx1137_cur)
+    .return (rx1138_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<~>"  :subid("293_1282324002.40722") :method
-.annotate 'line', 447
-    $P1139 = self."!PREFIX__!subrule"("O", "~")
-    new $P1140, "ResizablePMCArray"
-    push $P1140, $P1139
-    .return ($P1140)
+.sub "!PREFIX__infix:sym<+>"  :subid("291_1284728478.15265") :method
+.annotate 'line', 454
+    $P1140 = self."!PREFIX__!subrule"("O", "+")
+    new $P1141, "ResizablePMCArray"
+    push $P1141, $P1140
+    .return ($P1141)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<==>"  :subid("294_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1144_tgt
-    .local int rx1144_pos
-    .local int rx1144_off
-    .local int rx1144_eos
-    .local int rx1144_rep
-    .local pmc rx1144_cur
-    .local pmc rx1144_debug
-    (rx1144_cur, rx1144_pos, rx1144_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1144_debug, rx1144_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1144_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1144_eos, rx1144_tgt
-    gt rx1144_pos, rx1144_eos, rx1144_done
-    set rx1144_off, 0
-    lt rx1144_pos, 2, rx1144_start
-    sub rx1144_off, rx1144_pos, 1
-    substr rx1144_tgt, rx1144_tgt, rx1144_off
-  rx1144_start:
-    eq $I10, 1, rx1144_restart
-    if_null rx1144_debug, debug_912
-    rx1144_cur."!cursor_debug"("START", "infix:sym<==>")
-  debug_912:
+.sub "infix:sym<->"  :subid("292_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1145_tgt
+    .local int rx1145_pos
+    .local int rx1145_off
+    .local int rx1145_eos
+    .local int rx1145_rep
+    .local pmc rx1145_cur
+    .local pmc rx1145_debug
+    (rx1145_cur, rx1145_pos, rx1145_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1145_debug, rx1145_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1145_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1145_eos, rx1145_tgt
+    gt rx1145_pos, rx1145_eos, rx1145_done
+    set rx1145_off, 0
+    lt rx1145_pos, 2, rx1145_start
+    sub rx1145_off, rx1145_pos, 1
+    substr rx1145_tgt, rx1145_tgt, rx1145_off
+  rx1145_start:
+    eq $I10, 1, rx1145_restart
+    if_null rx1145_debug, debug_910
+    rx1145_cur."!cursor_debug"("START", "infix:sym<->")
+  debug_910:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1148_done
-    goto rxscan1148_scan
-  rxscan1148_loop:
-    ($P10) = rx1144_cur."from"()
-    inc $P10
-    set rx1144_pos, $P10
-    ge rx1144_pos, rx1144_eos, rxscan1148_done
-  rxscan1148_scan:
-    set_addr $I10, rxscan1148_loop
-    rx1144_cur."!mark_push"(0, rx1144_pos, $I10)
-  rxscan1148_done:
-.annotate 'line', 519
+    ne $I10, -1, rxscan1149_done
+    goto rxscan1149_scan
+  rxscan1149_loop:
+    ($P10) = rx1145_cur."from"()
+    inc $P10
+    set rx1145_pos, $P10
+    ge rx1145_pos, rx1145_eos, rxscan1149_done
+  rxscan1149_scan:
+    set_addr $I10, rxscan1149_loop
+    rx1145_cur."!mark_push"(0, rx1145_pos, $I10)
+  rxscan1149_done:
+.annotate 'line', 520
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1149_fail
-    rx1144_cur."!mark_push"(0, rx1144_pos, $I10)
-  # rx literal  "=="
-    add $I11, rx1144_pos, 2
-    gt $I11, rx1144_eos, rx1144_fail
-    sub $I11, rx1144_pos, rx1144_off
-    substr $S10, rx1144_tgt, $I11, 2
-    ne $S10, "==", rx1144_fail
-    add rx1144_pos, 2
-    set_addr $I10, rxcap_1149_fail
-    ($I12, $I11) = rx1144_cur."!mark_peek"($I10)
-    rx1144_cur."!cursor_pos"($I11)
-    ($P10) = rx1144_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1144_pos, "")
-    rx1144_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1150_fail
+    rx1145_cur."!mark_push"(0, rx1145_pos, $I10)
+  # rx literal  "-"
+    add $I11, rx1145_pos, 1
+    gt $I11, rx1145_eos, rx1145_fail
+    sub $I11, rx1145_pos, rx1145_off
+    ord $I11, rx1145_tgt, $I11
+    ne $I11, 45, rx1145_fail
+    add rx1145_pos, 1
+    set_addr $I10, rxcap_1150_fail
+    ($I12, $I11) = rx1145_cur."!mark_peek"($I10)
+    rx1145_cur."!cursor_pos"($I11)
+    ($P10) = rx1145_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1145_pos, "")
+    rx1145_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1149_done
-  rxcap_1149_fail:
-    goto rx1144_fail
-  rxcap_1149_done:
+    goto rxcap_1150_done
+  rxcap_1150_fail:
+    goto rx1145_fail
+  rxcap_1150_done:
   # rx subrule "O" subtype=capture negate=
-    rx1144_cur."!cursor_pos"(rx1144_pos)
-    $P10 = rx1144_cur."O"("%relational, :pirop<iseq INn>")
-    unless $P10, rx1144_fail
-    rx1144_cur."!mark_push"(0, -1, 0, $P10)
+    rx1145_cur."!cursor_pos"(rx1145_pos)
+    $P10 = rx1145_cur."O"("%additive, :pirop<sub>")
+    unless $P10, rx1145_fail
+    rx1145_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1144_pos = $P10."pos"()
+    rx1145_pos = $P10."pos"()
   # rx pass
-    rx1144_cur."!cursor_pass"(rx1144_pos, "infix:sym<==>")
-    if_null rx1144_debug, debug_913
-    rx1144_cur."!cursor_debug"("PASS", "infix:sym<==>", " at pos=", rx1144_pos)
+    rx1145_cur."!cursor_pass"(rx1145_pos, "infix:sym<->")
+    if_null rx1145_debug, debug_911
+    rx1145_cur."!cursor_debug"("PASS", "infix:sym<->", " at pos=", rx1145_pos)
+  debug_911:
+    .return (rx1145_cur)
+  rx1145_restart:
+.annotate 'line', 454
+    if_null rx1145_debug, debug_912
+    rx1145_cur."!cursor_debug"("NEXT", "infix:sym<->")
+  debug_912:
+  rx1145_fail:
+    (rx1145_rep, rx1145_pos, $I10, $P10) = rx1145_cur."!mark_fail"(0)
+    lt rx1145_pos, -1, rx1145_done
+    eq rx1145_pos, -1, rx1145_fail
+    jump $I10
+  rx1145_done:
+    rx1145_cur."!cursor_fail"()
+    if_null rx1145_debug, debug_913
+    rx1145_cur."!cursor_debug"("FAIL", "infix:sym<->")
   debug_913:
-    .return (rx1144_cur)
-  rx1144_restart:
-.annotate 'line', 447
-    if_null rx1144_debug, debug_914
-    rx1144_cur."!cursor_debug"("NEXT", "infix:sym<==>")
-  debug_914:
-  rx1144_fail:
-    (rx1144_rep, rx1144_pos, $I10, $P10) = rx1144_cur."!mark_fail"(0)
-    lt rx1144_pos, -1, rx1144_done
-    eq rx1144_pos, -1, rx1144_fail
-    jump $I10
-  rx1144_done:
-    rx1144_cur."!cursor_fail"()
-    if_null rx1144_debug, debug_915
-    rx1144_cur."!cursor_debug"("FAIL", "infix:sym<==>")
-  debug_915:
-    .return (rx1144_cur)
+    .return (rx1145_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<==>"  :subid("295_1282324002.40722") :method
-.annotate 'line', 447
-    $P1146 = self."!PREFIX__!subrule"("O", "==")
-    new $P1147, "ResizablePMCArray"
-    push $P1147, $P1146
-    .return ($P1147)
+.sub "!PREFIX__infix:sym<->"  :subid("293_1284728478.15265") :method
+.annotate 'line', 454
+    $P1147 = self."!PREFIX__!subrule"("O", "-")
+    new $P1148, "ResizablePMCArray"
+    push $P1148, $P1147
+    .return ($P1148)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<!=>"  :subid("296_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1151_tgt
-    .local int rx1151_pos
-    .local int rx1151_off
-    .local int rx1151_eos
-    .local int rx1151_rep
-    .local pmc rx1151_cur
-    .local pmc rx1151_debug
-    (rx1151_cur, rx1151_pos, rx1151_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1151_debug, rx1151_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1151_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1151_eos, rx1151_tgt
-    gt rx1151_pos, rx1151_eos, rx1151_done
-    set rx1151_off, 0
-    lt rx1151_pos, 2, rx1151_start
-    sub rx1151_off, rx1151_pos, 1
-    substr rx1151_tgt, rx1151_tgt, rx1151_off
-  rx1151_start:
-    eq $I10, 1, rx1151_restart
-    if_null rx1151_debug, debug_916
-    rx1151_cur."!cursor_debug"("START", "infix:sym<!=>")
-  debug_916:
+.sub "infix:sym<+|>"  :subid("294_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1152_tgt
+    .local int rx1152_pos
+    .local int rx1152_off
+    .local int rx1152_eos
+    .local int rx1152_rep
+    .local pmc rx1152_cur
+    .local pmc rx1152_debug
+    (rx1152_cur, rx1152_pos, rx1152_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1152_debug, rx1152_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1152_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1152_eos, rx1152_tgt
+    gt rx1152_pos, rx1152_eos, rx1152_done
+    set rx1152_off, 0
+    lt rx1152_pos, 2, rx1152_start
+    sub rx1152_off, rx1152_pos, 1
+    substr rx1152_tgt, rx1152_tgt, rx1152_off
+  rx1152_start:
+    eq $I10, 1, rx1152_restart
+    if_null rx1152_debug, debug_914
+    rx1152_cur."!cursor_debug"("START", "infix:sym<+|>")
+  debug_914:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1155_done
-    goto rxscan1155_scan
-  rxscan1155_loop:
-    ($P10) = rx1151_cur."from"()
-    inc $P10
-    set rx1151_pos, $P10
-    ge rx1151_pos, rx1151_eos, rxscan1155_done
-  rxscan1155_scan:
-    set_addr $I10, rxscan1155_loop
-    rx1151_cur."!mark_push"(0, rx1151_pos, $I10)
-  rxscan1155_done:
-.annotate 'line', 520
+    ne $I10, -1, rxscan1156_done
+    goto rxscan1156_scan
+  rxscan1156_loop:
+    ($P10) = rx1152_cur."from"()
+    inc $P10
+    set rx1152_pos, $P10
+    ge rx1152_pos, rx1152_eos, rxscan1156_done
+  rxscan1156_scan:
+    set_addr $I10, rxscan1156_loop
+    rx1152_cur."!mark_push"(0, rx1152_pos, $I10)
+  rxscan1156_done:
+.annotate 'line', 521
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1156_fail
-    rx1151_cur."!mark_push"(0, rx1151_pos, $I10)
-  # rx literal  "!="
-    add $I11, rx1151_pos, 2
-    gt $I11, rx1151_eos, rx1151_fail
-    sub $I11, rx1151_pos, rx1151_off
-    substr $S10, rx1151_tgt, $I11, 2
-    ne $S10, "!=", rx1151_fail
-    add rx1151_pos, 2
-    set_addr $I10, rxcap_1156_fail
-    ($I12, $I11) = rx1151_cur."!mark_peek"($I10)
-    rx1151_cur."!cursor_pos"($I11)
-    ($P10) = rx1151_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1151_pos, "")
-    rx1151_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1157_fail
+    rx1152_cur."!mark_push"(0, rx1152_pos, $I10)
+  # rx literal  "+|"
+    add $I11, rx1152_pos, 2
+    gt $I11, rx1152_eos, rx1152_fail
+    sub $I11, rx1152_pos, rx1152_off
+    substr $S10, rx1152_tgt, $I11, 2
+    ne $S10, "+|", rx1152_fail
+    add rx1152_pos, 2
+    set_addr $I10, rxcap_1157_fail
+    ($I12, $I11) = rx1152_cur."!mark_peek"($I10)
+    rx1152_cur."!cursor_pos"($I11)
+    ($P10) = rx1152_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1152_pos, "")
+    rx1152_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1156_done
-  rxcap_1156_fail:
-    goto rx1151_fail
-  rxcap_1156_done:
+    goto rxcap_1157_done
+  rxcap_1157_fail:
+    goto rx1152_fail
+  rxcap_1157_done:
   # rx subrule "O" subtype=capture negate=
-    rx1151_cur."!cursor_pos"(rx1151_pos)
-    $P10 = rx1151_cur."O"("%relational, :pirop<isne INn>")
-    unless $P10, rx1151_fail
-    rx1151_cur."!mark_push"(0, -1, 0, $P10)
+    rx1152_cur."!cursor_pos"(rx1152_pos)
+    $P10 = rx1152_cur."O"("%additive, :pirop<bor III>")
+    unless $P10, rx1152_fail
+    rx1152_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1151_pos = $P10."pos"()
+    rx1152_pos = $P10."pos"()
   # rx pass
-    rx1151_cur."!cursor_pass"(rx1151_pos, "infix:sym<!=>")
-    if_null rx1151_debug, debug_917
-    rx1151_cur."!cursor_debug"("PASS", "infix:sym<!=>", " at pos=", rx1151_pos)
+    rx1152_cur."!cursor_pass"(rx1152_pos, "infix:sym<+|>")
+    if_null rx1152_debug, debug_915
+    rx1152_cur."!cursor_debug"("PASS", "infix:sym<+|>", " at pos=", rx1152_pos)
+  debug_915:
+    .return (rx1152_cur)
+  rx1152_restart:
+.annotate 'line', 454
+    if_null rx1152_debug, debug_916
+    rx1152_cur."!cursor_debug"("NEXT", "infix:sym<+|>")
+  debug_916:
+  rx1152_fail:
+    (rx1152_rep, rx1152_pos, $I10, $P10) = rx1152_cur."!mark_fail"(0)
+    lt rx1152_pos, -1, rx1152_done
+    eq rx1152_pos, -1, rx1152_fail
+    jump $I10
+  rx1152_done:
+    rx1152_cur."!cursor_fail"()
+    if_null rx1152_debug, debug_917
+    rx1152_cur."!cursor_debug"("FAIL", "infix:sym<+|>")
   debug_917:
-    .return (rx1151_cur)
-  rx1151_restart:
-.annotate 'line', 447
-    if_null rx1151_debug, debug_918
-    rx1151_cur."!cursor_debug"("NEXT", "infix:sym<!=>")
-  debug_918:
-  rx1151_fail:
-    (rx1151_rep, rx1151_pos, $I10, $P10) = rx1151_cur."!mark_fail"(0)
-    lt rx1151_pos, -1, rx1151_done
-    eq rx1151_pos, -1, rx1151_fail
-    jump $I10
-  rx1151_done:
-    rx1151_cur."!cursor_fail"()
-    if_null rx1151_debug, debug_919
-    rx1151_cur."!cursor_debug"("FAIL", "infix:sym<!=>")
-  debug_919:
-    .return (rx1151_cur)
+    .return (rx1152_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<!=>"  :subid("297_1282324002.40722") :method
-.annotate 'line', 447
-    $P1153 = self."!PREFIX__!subrule"("O", "!=")
-    new $P1154, "ResizablePMCArray"
-    push $P1154, $P1153
-    .return ($P1154)
+.sub "!PREFIX__infix:sym<+|>"  :subid("295_1284728478.15265") :method
+.annotate 'line', 454
+    $P1154 = self."!PREFIX__!subrule"("O", "+|")
+    new $P1155, "ResizablePMCArray"
+    push $P1155, $P1154
+    .return ($P1155)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<<=>"  :subid("298_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1158_tgt
-    .local int rx1158_pos
-    .local int rx1158_off
-    .local int rx1158_eos
-    .local int rx1158_rep
-    .local pmc rx1158_cur
-    .local pmc rx1158_debug
-    (rx1158_cur, rx1158_pos, rx1158_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1158_debug, rx1158_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1158_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1158_eos, rx1158_tgt
-    gt rx1158_pos, rx1158_eos, rx1158_done
-    set rx1158_off, 0
-    lt rx1158_pos, 2, rx1158_start
-    sub rx1158_off, rx1158_pos, 1
-    substr rx1158_tgt, rx1158_tgt, rx1158_off
-  rx1158_start:
-    eq $I10, 1, rx1158_restart
-    if_null rx1158_debug, debug_920
-    rx1158_cur."!cursor_debug"("START", "infix:sym<<=>")
-  debug_920:
+.sub "infix:sym<+^>"  :subid("296_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1159_tgt
+    .local int rx1159_pos
+    .local int rx1159_off
+    .local int rx1159_eos
+    .local int rx1159_rep
+    .local pmc rx1159_cur
+    .local pmc rx1159_debug
+    (rx1159_cur, rx1159_pos, rx1159_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1159_debug, rx1159_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1159_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1159_eos, rx1159_tgt
+    gt rx1159_pos, rx1159_eos, rx1159_done
+    set rx1159_off, 0
+    lt rx1159_pos, 2, rx1159_start
+    sub rx1159_off, rx1159_pos, 1
+    substr rx1159_tgt, rx1159_tgt, rx1159_off
+  rx1159_start:
+    eq $I10, 1, rx1159_restart
+    if_null rx1159_debug, debug_918
+    rx1159_cur."!cursor_debug"("START", "infix:sym<+^>")
+  debug_918:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1162_done
-    goto rxscan1162_scan
-  rxscan1162_loop:
-    ($P10) = rx1158_cur."from"()
-    inc $P10
-    set rx1158_pos, $P10
-    ge rx1158_pos, rx1158_eos, rxscan1162_done
-  rxscan1162_scan:
-    set_addr $I10, rxscan1162_loop
-    rx1158_cur."!mark_push"(0, rx1158_pos, $I10)
-  rxscan1162_done:
-.annotate 'line', 521
+    ne $I10, -1, rxscan1163_done
+    goto rxscan1163_scan
+  rxscan1163_loop:
+    ($P10) = rx1159_cur."from"()
+    inc $P10
+    set rx1159_pos, $P10
+    ge rx1159_pos, rx1159_eos, rxscan1163_done
+  rxscan1163_scan:
+    set_addr $I10, rxscan1163_loop
+    rx1159_cur."!mark_push"(0, rx1159_pos, $I10)
+  rxscan1163_done:
+.annotate 'line', 522
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1163_fail
-    rx1158_cur."!mark_push"(0, rx1158_pos, $I10)
-  # rx literal  "<="
-    add $I11, rx1158_pos, 2
-    gt $I11, rx1158_eos, rx1158_fail
-    sub $I11, rx1158_pos, rx1158_off
-    substr $S10, rx1158_tgt, $I11, 2
-    ne $S10, "<=", rx1158_fail
-    add rx1158_pos, 2
-    set_addr $I10, rxcap_1163_fail
-    ($I12, $I11) = rx1158_cur."!mark_peek"($I10)
-    rx1158_cur."!cursor_pos"($I11)
-    ($P10) = rx1158_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1158_pos, "")
-    rx1158_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1164_fail
+    rx1159_cur."!mark_push"(0, rx1159_pos, $I10)
+  # rx literal  "+^"
+    add $I11, rx1159_pos, 2
+    gt $I11, rx1159_eos, rx1159_fail
+    sub $I11, rx1159_pos, rx1159_off
+    substr $S10, rx1159_tgt, $I11, 2
+    ne $S10, "+^", rx1159_fail
+    add rx1159_pos, 2
+    set_addr $I10, rxcap_1164_fail
+    ($I12, $I11) = rx1159_cur."!mark_peek"($I10)
+    rx1159_cur."!cursor_pos"($I11)
+    ($P10) = rx1159_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1159_pos, "")
+    rx1159_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1163_done
-  rxcap_1163_fail:
-    goto rx1158_fail
-  rxcap_1163_done:
+    goto rxcap_1164_done
+  rxcap_1164_fail:
+    goto rx1159_fail
+  rxcap_1164_done:
   # rx subrule "O" subtype=capture negate=
-    rx1158_cur."!cursor_pos"(rx1158_pos)
-    $P10 = rx1158_cur."O"("%relational, :pirop<isle INn>")
-    unless $P10, rx1158_fail
-    rx1158_cur."!mark_push"(0, -1, 0, $P10)
+    rx1159_cur."!cursor_pos"(rx1159_pos)
+    $P10 = rx1159_cur."O"("%additive, :pirop<bxor III>")
+    unless $P10, rx1159_fail
+    rx1159_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1158_pos = $P10."pos"()
+    rx1159_pos = $P10."pos"()
   # rx pass
-    rx1158_cur."!cursor_pass"(rx1158_pos, "infix:sym<<=>")
-    if_null rx1158_debug, debug_921
-    rx1158_cur."!cursor_debug"("PASS", "infix:sym<<=>", " at pos=", rx1158_pos)
+    rx1159_cur."!cursor_pass"(rx1159_pos, "infix:sym<+^>")
+    if_null rx1159_debug, debug_919
+    rx1159_cur."!cursor_debug"("PASS", "infix:sym<+^>", " at pos=", rx1159_pos)
+  debug_919:
+    .return (rx1159_cur)
+  rx1159_restart:
+.annotate 'line', 454
+    if_null rx1159_debug, debug_920
+    rx1159_cur."!cursor_debug"("NEXT", "infix:sym<+^>")
+  debug_920:
+  rx1159_fail:
+    (rx1159_rep, rx1159_pos, $I10, $P10) = rx1159_cur."!mark_fail"(0)
+    lt rx1159_pos, -1, rx1159_done
+    eq rx1159_pos, -1, rx1159_fail
+    jump $I10
+  rx1159_done:
+    rx1159_cur."!cursor_fail"()
+    if_null rx1159_debug, debug_921
+    rx1159_cur."!cursor_debug"("FAIL", "infix:sym<+^>")
   debug_921:
-    .return (rx1158_cur)
-  rx1158_restart:
-.annotate 'line', 447
-    if_null rx1158_debug, debug_922
-    rx1158_cur."!cursor_debug"("NEXT", "infix:sym<<=>")
-  debug_922:
-  rx1158_fail:
-    (rx1158_rep, rx1158_pos, $I10, $P10) = rx1158_cur."!mark_fail"(0)
-    lt rx1158_pos, -1, rx1158_done
-    eq rx1158_pos, -1, rx1158_fail
-    jump $I10
-  rx1158_done:
-    rx1158_cur."!cursor_fail"()
-    if_null rx1158_debug, debug_923
-    rx1158_cur."!cursor_debug"("FAIL", "infix:sym<<=>")
-  debug_923:
-    .return (rx1158_cur)
+    .return (rx1159_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<<=>"  :subid("299_1282324002.40722") :method
-.annotate 'line', 447
-    $P1160 = self."!PREFIX__!subrule"("O", "<=")
-    new $P1161, "ResizablePMCArray"
-    push $P1161, $P1160
-    .return ($P1161)
+.sub "!PREFIX__infix:sym<+^>"  :subid("297_1284728478.15265") :method
+.annotate 'line', 454
+    $P1161 = self."!PREFIX__!subrule"("O", "+^")
+    new $P1162, "ResizablePMCArray"
+    push $P1162, $P1161
+    .return ($P1162)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<>=>"  :subid("300_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1165_tgt
-    .local int rx1165_pos
-    .local int rx1165_off
-    .local int rx1165_eos
-    .local int rx1165_rep
-    .local pmc rx1165_cur
-    .local pmc rx1165_debug
-    (rx1165_cur, rx1165_pos, rx1165_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1165_debug, rx1165_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1165_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1165_eos, rx1165_tgt
-    gt rx1165_pos, rx1165_eos, rx1165_done
-    set rx1165_off, 0
-    lt rx1165_pos, 2, rx1165_start
-    sub rx1165_off, rx1165_pos, 1
-    substr rx1165_tgt, rx1165_tgt, rx1165_off
-  rx1165_start:
-    eq $I10, 1, rx1165_restart
-    if_null rx1165_debug, debug_924
-    rx1165_cur."!cursor_debug"("START", "infix:sym<>=>")
-  debug_924:
+.sub "infix:sym<~>"  :subid("298_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1166_tgt
+    .local int rx1166_pos
+    .local int rx1166_off
+    .local int rx1166_eos
+    .local int rx1166_rep
+    .local pmc rx1166_cur
+    .local pmc rx1166_debug
+    (rx1166_cur, rx1166_pos, rx1166_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1166_debug, rx1166_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1166_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1166_eos, rx1166_tgt
+    gt rx1166_pos, rx1166_eos, rx1166_done
+    set rx1166_off, 0
+    lt rx1166_pos, 2, rx1166_start
+    sub rx1166_off, rx1166_pos, 1
+    substr rx1166_tgt, rx1166_tgt, rx1166_off
+  rx1166_start:
+    eq $I10, 1, rx1166_restart
+    if_null rx1166_debug, debug_922
+    rx1166_cur."!cursor_debug"("START", "infix:sym<~>")
+  debug_922:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1169_done
-    goto rxscan1169_scan
-  rxscan1169_loop:
-    ($P10) = rx1165_cur."from"()
-    inc $P10
-    set rx1165_pos, $P10
-    ge rx1165_pos, rx1165_eos, rxscan1169_done
-  rxscan1169_scan:
-    set_addr $I10, rxscan1169_loop
-    rx1165_cur."!mark_push"(0, rx1165_pos, $I10)
-  rxscan1169_done:
-.annotate 'line', 522
+    ne $I10, -1, rxscan1170_done
+    goto rxscan1170_scan
+  rxscan1170_loop:
+    ($P10) = rx1166_cur."from"()
+    inc $P10
+    set rx1166_pos, $P10
+    ge rx1166_pos, rx1166_eos, rxscan1170_done
+  rxscan1170_scan:
+    set_addr $I10, rxscan1170_loop
+    rx1166_cur."!mark_push"(0, rx1166_pos, $I10)
+  rxscan1170_done:
+.annotate 'line', 524
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1170_fail
-    rx1165_cur."!mark_push"(0, rx1165_pos, $I10)
-  # rx literal  ">="
-    add $I11, rx1165_pos, 2
-    gt $I11, rx1165_eos, rx1165_fail
-    sub $I11, rx1165_pos, rx1165_off
-    substr $S10, rx1165_tgt, $I11, 2
-    ne $S10, ">=", rx1165_fail
-    add rx1165_pos, 2
-    set_addr $I10, rxcap_1170_fail
-    ($I12, $I11) = rx1165_cur."!mark_peek"($I10)
-    rx1165_cur."!cursor_pos"($I11)
-    ($P10) = rx1165_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1165_pos, "")
-    rx1165_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1171_fail
+    rx1166_cur."!mark_push"(0, rx1166_pos, $I10)
+  # rx literal  "~"
+    add $I11, rx1166_pos, 1
+    gt $I11, rx1166_eos, rx1166_fail
+    sub $I11, rx1166_pos, rx1166_off
+    ord $I11, rx1166_tgt, $I11
+    ne $I11, 126, rx1166_fail
+    add rx1166_pos, 1
+    set_addr $I10, rxcap_1171_fail
+    ($I12, $I11) = rx1166_cur."!mark_peek"($I10)
+    rx1166_cur."!cursor_pos"($I11)
+    ($P10) = rx1166_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1166_pos, "")
+    rx1166_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1170_done
-  rxcap_1170_fail:
-    goto rx1165_fail
-  rxcap_1170_done:
+    goto rxcap_1171_done
+  rxcap_1171_fail:
+    goto rx1166_fail
+  rxcap_1171_done:
   # rx subrule "O" subtype=capture negate=
-    rx1165_cur."!cursor_pos"(rx1165_pos)
-    $P10 = rx1165_cur."O"("%relational, :pirop<isge INn>")
-    unless $P10, rx1165_fail
-    rx1165_cur."!mark_push"(0, -1, 0, $P10)
+    rx1166_cur."!cursor_pos"(rx1166_pos)
+    $P10 = rx1166_cur."O"("%concatenation , :pirop<concat>")
+    unless $P10, rx1166_fail
+    rx1166_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1165_pos = $P10."pos"()
+    rx1166_pos = $P10."pos"()
   # rx pass
-    rx1165_cur."!cursor_pass"(rx1165_pos, "infix:sym<>=>")
-    if_null rx1165_debug, debug_925
-    rx1165_cur."!cursor_debug"("PASS", "infix:sym<>=>", " at pos=", rx1165_pos)
+    rx1166_cur."!cursor_pass"(rx1166_pos, "infix:sym<~>")
+    if_null rx1166_debug, debug_923
+    rx1166_cur."!cursor_debug"("PASS", "infix:sym<~>", " at pos=", rx1166_pos)
+  debug_923:
+    .return (rx1166_cur)
+  rx1166_restart:
+.annotate 'line', 454
+    if_null rx1166_debug, debug_924
+    rx1166_cur."!cursor_debug"("NEXT", "infix:sym<~>")
+  debug_924:
+  rx1166_fail:
+    (rx1166_rep, rx1166_pos, $I10, $P10) = rx1166_cur."!mark_fail"(0)
+    lt rx1166_pos, -1, rx1166_done
+    eq rx1166_pos, -1, rx1166_fail
+    jump $I10
+  rx1166_done:
+    rx1166_cur."!cursor_fail"()
+    if_null rx1166_debug, debug_925
+    rx1166_cur."!cursor_debug"("FAIL", "infix:sym<~>")
   debug_925:
-    .return (rx1165_cur)
-  rx1165_restart:
-.annotate 'line', 447
-    if_null rx1165_debug, debug_926
-    rx1165_cur."!cursor_debug"("NEXT", "infix:sym<>=>")
-  debug_926:
-  rx1165_fail:
-    (rx1165_rep, rx1165_pos, $I10, $P10) = rx1165_cur."!mark_fail"(0)
-    lt rx1165_pos, -1, rx1165_done
-    eq rx1165_pos, -1, rx1165_fail
-    jump $I10
-  rx1165_done:
-    rx1165_cur."!cursor_fail"()
-    if_null rx1165_debug, debug_927
-    rx1165_cur."!cursor_debug"("FAIL", "infix:sym<>=>")
-  debug_927:
-    .return (rx1165_cur)
+    .return (rx1166_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<>=>"  :subid("301_1282324002.40722") :method
-.annotate 'line', 447
-    $P1167 = self."!PREFIX__!subrule"("O", ">=")
-    new $P1168, "ResizablePMCArray"
-    push $P1168, $P1167
-    .return ($P1168)
+.sub "!PREFIX__infix:sym<~>"  :subid("299_1284728478.15265") :method
+.annotate 'line', 454
+    $P1168 = self."!PREFIX__!subrule"("O", "~")
+    new $P1169, "ResizablePMCArray"
+    push $P1169, $P1168
+    .return ($P1169)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<<>"  :subid("302_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1172_tgt
-    .local int rx1172_pos
-    .local int rx1172_off
-    .local int rx1172_eos
-    .local int rx1172_rep
-    .local pmc rx1172_cur
-    .local pmc rx1172_debug
-    (rx1172_cur, rx1172_pos, rx1172_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1172_debug, rx1172_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1172_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1172_eos, rx1172_tgt
-    gt rx1172_pos, rx1172_eos, rx1172_done
-    set rx1172_off, 0
-    lt rx1172_pos, 2, rx1172_start
-    sub rx1172_off, rx1172_pos, 1
-    substr rx1172_tgt, rx1172_tgt, rx1172_off
-  rx1172_start:
-    eq $I10, 1, rx1172_restart
-    if_null rx1172_debug, debug_928
-    rx1172_cur."!cursor_debug"("START", "infix:sym<<>")
-  debug_928:
+.sub "infix:sym<==>"  :subid("300_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1173_tgt
+    .local int rx1173_pos
+    .local int rx1173_off
+    .local int rx1173_eos
+    .local int rx1173_rep
+    .local pmc rx1173_cur
+    .local pmc rx1173_debug
+    (rx1173_cur, rx1173_pos, rx1173_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1173_debug, rx1173_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1173_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1173_eos, rx1173_tgt
+    gt rx1173_pos, rx1173_eos, rx1173_done
+    set rx1173_off, 0
+    lt rx1173_pos, 2, rx1173_start
+    sub rx1173_off, rx1173_pos, 1
+    substr rx1173_tgt, rx1173_tgt, rx1173_off
+  rx1173_start:
+    eq $I10, 1, rx1173_restart
+    if_null rx1173_debug, debug_926
+    rx1173_cur."!cursor_debug"("START", "infix:sym<==>")
+  debug_926:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1176_done
-    goto rxscan1176_scan
-  rxscan1176_loop:
-    ($P10) = rx1172_cur."from"()
-    inc $P10
-    set rx1172_pos, $P10
-    ge rx1172_pos, rx1172_eos, rxscan1176_done
-  rxscan1176_scan:
-    set_addr $I10, rxscan1176_loop
-    rx1172_cur."!mark_push"(0, rx1172_pos, $I10)
-  rxscan1176_done:
-.annotate 'line', 523
+    ne $I10, -1, rxscan1177_done
+    goto rxscan1177_scan
+  rxscan1177_loop:
+    ($P10) = rx1173_cur."from"()
+    inc $P10
+    set rx1173_pos, $P10
+    ge rx1173_pos, rx1173_eos, rxscan1177_done
+  rxscan1177_scan:
+    set_addr $I10, rxscan1177_loop
+    rx1173_cur."!mark_push"(0, rx1173_pos, $I10)
+  rxscan1177_done:
+.annotate 'line', 526
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1177_fail
-    rx1172_cur."!mark_push"(0, rx1172_pos, $I10)
-  # rx literal  "<"
-    add $I11, rx1172_pos, 1
-    gt $I11, rx1172_eos, rx1172_fail
-    sub $I11, rx1172_pos, rx1172_off
-    ord $I11, rx1172_tgt, $I11
-    ne $I11, 60, rx1172_fail
-    add rx1172_pos, 1
-    set_addr $I10, rxcap_1177_fail
-    ($I12, $I11) = rx1172_cur."!mark_peek"($I10)
-    rx1172_cur."!cursor_pos"($I11)
-    ($P10) = rx1172_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1172_pos, "")
-    rx1172_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1178_fail
+    rx1173_cur."!mark_push"(0, rx1173_pos, $I10)
+  # rx literal  "=="
+    add $I11, rx1173_pos, 2
+    gt $I11, rx1173_eos, rx1173_fail
+    sub $I11, rx1173_pos, rx1173_off
+    substr $S10, rx1173_tgt, $I11, 2
+    ne $S10, "==", rx1173_fail
+    add rx1173_pos, 2
+    set_addr $I10, rxcap_1178_fail
+    ($I12, $I11) = rx1173_cur."!mark_peek"($I10)
+    rx1173_cur."!cursor_pos"($I11)
+    ($P10) = rx1173_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1173_pos, "")
+    rx1173_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1177_done
-  rxcap_1177_fail:
-    goto rx1172_fail
-  rxcap_1177_done:
+    goto rxcap_1178_done
+  rxcap_1178_fail:
+    goto rx1173_fail
+  rxcap_1178_done:
   # rx subrule "O" subtype=capture negate=
-    rx1172_cur."!cursor_pos"(rx1172_pos)
-    $P10 = rx1172_cur."O"("%relational, :pirop<islt INn>")
-    unless $P10, rx1172_fail
-    rx1172_cur."!mark_push"(0, -1, 0, $P10)
+    rx1173_cur."!cursor_pos"(rx1173_pos)
+    $P10 = rx1173_cur."O"("%relational, :pirop<iseq INn>")
+    unless $P10, rx1173_fail
+    rx1173_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1172_pos = $P10."pos"()
+    rx1173_pos = $P10."pos"()
   # rx pass
-    rx1172_cur."!cursor_pass"(rx1172_pos, "infix:sym<<>")
-    if_null rx1172_debug, debug_929
-    rx1172_cur."!cursor_debug"("PASS", "infix:sym<<>", " at pos=", rx1172_pos)
+    rx1173_cur."!cursor_pass"(rx1173_pos, "infix:sym<==>")
+    if_null rx1173_debug, debug_927
+    rx1173_cur."!cursor_debug"("PASS", "infix:sym<==>", " at pos=", rx1173_pos)
+  debug_927:
+    .return (rx1173_cur)
+  rx1173_restart:
+.annotate 'line', 454
+    if_null rx1173_debug, debug_928
+    rx1173_cur."!cursor_debug"("NEXT", "infix:sym<==>")
+  debug_928:
+  rx1173_fail:
+    (rx1173_rep, rx1173_pos, $I10, $P10) = rx1173_cur."!mark_fail"(0)
+    lt rx1173_pos, -1, rx1173_done
+    eq rx1173_pos, -1, rx1173_fail
+    jump $I10
+  rx1173_done:
+    rx1173_cur."!cursor_fail"()
+    if_null rx1173_debug, debug_929
+    rx1173_cur."!cursor_debug"("FAIL", "infix:sym<==>")
   debug_929:
-    .return (rx1172_cur)
-  rx1172_restart:
-.annotate 'line', 447
-    if_null rx1172_debug, debug_930
-    rx1172_cur."!cursor_debug"("NEXT", "infix:sym<<>")
-  debug_930:
-  rx1172_fail:
-    (rx1172_rep, rx1172_pos, $I10, $P10) = rx1172_cur."!mark_fail"(0)
-    lt rx1172_pos, -1, rx1172_done
-    eq rx1172_pos, -1, rx1172_fail
-    jump $I10
-  rx1172_done:
-    rx1172_cur."!cursor_fail"()
-    if_null rx1172_debug, debug_931
-    rx1172_cur."!cursor_debug"("FAIL", "infix:sym<<>")
-  debug_931:
-    .return (rx1172_cur)
+    .return (rx1173_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<<>"  :subid("303_1282324002.40722") :method
-.annotate 'line', 447
-    $P1174 = self."!PREFIX__!subrule"("O", "<")
-    new $P1175, "ResizablePMCArray"
-    push $P1175, $P1174
-    .return ($P1175)
+.sub "!PREFIX__infix:sym<==>"  :subid("301_1284728478.15265") :method
+.annotate 'line', 454
+    $P1175 = self."!PREFIX__!subrule"("O", "==")
+    new $P1176, "ResizablePMCArray"
+    push $P1176, $P1175
+    .return ($P1176)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<>>"  :subid("304_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1179_tgt
-    .local int rx1179_pos
-    .local int rx1179_off
-    .local int rx1179_eos
-    .local int rx1179_rep
-    .local pmc rx1179_cur
-    .local pmc rx1179_debug
-    (rx1179_cur, rx1179_pos, rx1179_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1179_debug, rx1179_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1179_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1179_eos, rx1179_tgt
-    gt rx1179_pos, rx1179_eos, rx1179_done
-    set rx1179_off, 0
-    lt rx1179_pos, 2, rx1179_start
-    sub rx1179_off, rx1179_pos, 1
-    substr rx1179_tgt, rx1179_tgt, rx1179_off
-  rx1179_start:
-    eq $I10, 1, rx1179_restart
-    if_null rx1179_debug, debug_932
-    rx1179_cur."!cursor_debug"("START", "infix:sym<>>")
-  debug_932:
+.sub "infix:sym<!=>"  :subid("302_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1180_tgt
+    .local int rx1180_pos
+    .local int rx1180_off
+    .local int rx1180_eos
+    .local int rx1180_rep
+    .local pmc rx1180_cur
+    .local pmc rx1180_debug
+    (rx1180_cur, rx1180_pos, rx1180_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1180_debug, rx1180_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1180_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1180_eos, rx1180_tgt
+    gt rx1180_pos, rx1180_eos, rx1180_done
+    set rx1180_off, 0
+    lt rx1180_pos, 2, rx1180_start
+    sub rx1180_off, rx1180_pos, 1
+    substr rx1180_tgt, rx1180_tgt, rx1180_off
+  rx1180_start:
+    eq $I10, 1, rx1180_restart
+    if_null rx1180_debug, debug_930
+    rx1180_cur."!cursor_debug"("START", "infix:sym<!=>")
+  debug_930:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1183_done
-    goto rxscan1183_scan
-  rxscan1183_loop:
-    ($P10) = rx1179_cur."from"()
-    inc $P10
-    set rx1179_pos, $P10
-    ge rx1179_pos, rx1179_eos, rxscan1183_done
-  rxscan1183_scan:
-    set_addr $I10, rxscan1183_loop
-    rx1179_cur."!mark_push"(0, rx1179_pos, $I10)
-  rxscan1183_done:
-.annotate 'line', 524
+    ne $I10, -1, rxscan1184_done
+    goto rxscan1184_scan
+  rxscan1184_loop:
+    ($P10) = rx1180_cur."from"()
+    inc $P10
+    set rx1180_pos, $P10
+    ge rx1180_pos, rx1180_eos, rxscan1184_done
+  rxscan1184_scan:
+    set_addr $I10, rxscan1184_loop
+    rx1180_cur."!mark_push"(0, rx1180_pos, $I10)
+  rxscan1184_done:
+.annotate 'line', 527
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1184_fail
-    rx1179_cur."!mark_push"(0, rx1179_pos, $I10)
-  # rx literal  ">"
-    add $I11, rx1179_pos, 1
-    gt $I11, rx1179_eos, rx1179_fail
-    sub $I11, rx1179_pos, rx1179_off
-    ord $I11, rx1179_tgt, $I11
-    ne $I11, 62, rx1179_fail
-    add rx1179_pos, 1
-    set_addr $I10, rxcap_1184_fail
-    ($I12, $I11) = rx1179_cur."!mark_peek"($I10)
-    rx1179_cur."!cursor_pos"($I11)
-    ($P10) = rx1179_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1179_pos, "")
-    rx1179_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1185_fail
+    rx1180_cur."!mark_push"(0, rx1180_pos, $I10)
+  # rx literal  "!="
+    add $I11, rx1180_pos, 2
+    gt $I11, rx1180_eos, rx1180_fail
+    sub $I11, rx1180_pos, rx1180_off
+    substr $S10, rx1180_tgt, $I11, 2
+    ne $S10, "!=", rx1180_fail
+    add rx1180_pos, 2
+    set_addr $I10, rxcap_1185_fail
+    ($I12, $I11) = rx1180_cur."!mark_peek"($I10)
+    rx1180_cur."!cursor_pos"($I11)
+    ($P10) = rx1180_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1180_pos, "")
+    rx1180_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1184_done
-  rxcap_1184_fail:
-    goto rx1179_fail
-  rxcap_1184_done:
+    goto rxcap_1185_done
+  rxcap_1185_fail:
+    goto rx1180_fail
+  rxcap_1185_done:
   # rx subrule "O" subtype=capture negate=
-    rx1179_cur."!cursor_pos"(rx1179_pos)
-    $P10 = rx1179_cur."O"("%relational, :pirop<isgt INn>")
-    unless $P10, rx1179_fail
-    rx1179_cur."!mark_push"(0, -1, 0, $P10)
+    rx1180_cur."!cursor_pos"(rx1180_pos)
+    $P10 = rx1180_cur."O"("%relational, :pirop<isne INn>")
+    unless $P10, rx1180_fail
+    rx1180_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1179_pos = $P10."pos"()
+    rx1180_pos = $P10."pos"()
   # rx pass
-    rx1179_cur."!cursor_pass"(rx1179_pos, "infix:sym<>>")
-    if_null rx1179_debug, debug_933
-    rx1179_cur."!cursor_debug"("PASS", "infix:sym<>>", " at pos=", rx1179_pos)
+    rx1180_cur."!cursor_pass"(rx1180_pos, "infix:sym<!=>")
+    if_null rx1180_debug, debug_931
+    rx1180_cur."!cursor_debug"("PASS", "infix:sym<!=>", " at pos=", rx1180_pos)
+  debug_931:
+    .return (rx1180_cur)
+  rx1180_restart:
+.annotate 'line', 454
+    if_null rx1180_debug, debug_932
+    rx1180_cur."!cursor_debug"("NEXT", "infix:sym<!=>")
+  debug_932:
+  rx1180_fail:
+    (rx1180_rep, rx1180_pos, $I10, $P10) = rx1180_cur."!mark_fail"(0)
+    lt rx1180_pos, -1, rx1180_done
+    eq rx1180_pos, -1, rx1180_fail
+    jump $I10
+  rx1180_done:
+    rx1180_cur."!cursor_fail"()
+    if_null rx1180_debug, debug_933
+    rx1180_cur."!cursor_debug"("FAIL", "infix:sym<!=>")
   debug_933:
-    .return (rx1179_cur)
-  rx1179_restart:
-.annotate 'line', 447
-    if_null rx1179_debug, debug_934
-    rx1179_cur."!cursor_debug"("NEXT", "infix:sym<>>")
-  debug_934:
-  rx1179_fail:
-    (rx1179_rep, rx1179_pos, $I10, $P10) = rx1179_cur."!mark_fail"(0)
-    lt rx1179_pos, -1, rx1179_done
-    eq rx1179_pos, -1, rx1179_fail
-    jump $I10
-  rx1179_done:
-    rx1179_cur."!cursor_fail"()
-    if_null rx1179_debug, debug_935
-    rx1179_cur."!cursor_debug"("FAIL", "infix:sym<>>")
-  debug_935:
-    .return (rx1179_cur)
+    .return (rx1180_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<>>"  :subid("305_1282324002.40722") :method
-.annotate 'line', 447
-    $P1181 = self."!PREFIX__!subrule"("O", ">")
-    new $P1182, "ResizablePMCArray"
-    push $P1182, $P1181
-    .return ($P1182)
+.sub "!PREFIX__infix:sym<!=>"  :subid("303_1284728478.15265") :method
+.annotate 'line', 454
+    $P1182 = self."!PREFIX__!subrule"("O", "!=")
+    new $P1183, "ResizablePMCArray"
+    push $P1183, $P1182
+    .return ($P1183)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<eq>"  :subid("306_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1186_tgt
-    .local int rx1186_pos
-    .local int rx1186_off
-    .local int rx1186_eos
-    .local int rx1186_rep
-    .local pmc rx1186_cur
-    .local pmc rx1186_debug
-    (rx1186_cur, rx1186_pos, rx1186_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1186_debug, rx1186_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1186_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1186_eos, rx1186_tgt
-    gt rx1186_pos, rx1186_eos, rx1186_done
-    set rx1186_off, 0
-    lt rx1186_pos, 2, rx1186_start
-    sub rx1186_off, rx1186_pos, 1
-    substr rx1186_tgt, rx1186_tgt, rx1186_off
-  rx1186_start:
-    eq $I10, 1, rx1186_restart
-    if_null rx1186_debug, debug_936
-    rx1186_cur."!cursor_debug"("START", "infix:sym<eq>")
-  debug_936:
+.sub "infix:sym<<=>"  :subid("304_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1187_tgt
+    .local int rx1187_pos
+    .local int rx1187_off
+    .local int rx1187_eos
+    .local int rx1187_rep
+    .local pmc rx1187_cur
+    .local pmc rx1187_debug
+    (rx1187_cur, rx1187_pos, rx1187_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1187_debug, rx1187_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1187_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1187_eos, rx1187_tgt
+    gt rx1187_pos, rx1187_eos, rx1187_done
+    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:
+    eq $I10, 1, rx1187_restart
+    if_null rx1187_debug, debug_934
+    rx1187_cur."!cursor_debug"("START", "infix:sym<<=>")
+  debug_934:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1190_done
-    goto rxscan1190_scan
-  rxscan1190_loop:
-    ($P10) = rx1186_cur."from"()
-    inc $P10
-    set rx1186_pos, $P10
-    ge rx1186_pos, rx1186_eos, rxscan1190_done
-  rxscan1190_scan:
-    set_addr $I10, rxscan1190_loop
-    rx1186_cur."!mark_push"(0, rx1186_pos, $I10)
-  rxscan1190_done:
-.annotate 'line', 525
+    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', 528
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1191_fail
-    rx1186_cur."!mark_push"(0, rx1186_pos, $I10)
-  # rx literal  "eq"
-    add $I11, rx1186_pos, 2
-    gt $I11, rx1186_eos, rx1186_fail
-    sub $I11, rx1186_pos, rx1186_off
-    substr $S10, rx1186_tgt, $I11, 2
-    ne $S10, "eq", rx1186_fail
-    add rx1186_pos, 2
-    set_addr $I10, rxcap_1191_fail
-    ($I12, $I11) = rx1186_cur."!mark_peek"($I10)
-    rx1186_cur."!cursor_pos"($I11)
-    ($P10) = rx1186_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1186_pos, "")
-    rx1186_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1192_fail
+    rx1187_cur."!mark_push"(0, rx1187_pos, $I10)
+  # rx literal  "<="
+    add $I11, rx1187_pos, 2
+    gt $I11, rx1187_eos, rx1187_fail
+    sub $I11, rx1187_pos, rx1187_off
+    substr $S10, rx1187_tgt, $I11, 2
+    ne $S10, "<=", rx1187_fail
+    add rx1187_pos, 2
+    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)
     $P10."!cursor_names"("sym")
-    goto rxcap_1191_done
-  rxcap_1191_fail:
-    goto rx1186_fail
-  rxcap_1191_done:
+    goto rxcap_1192_done
+  rxcap_1192_fail:
+    goto rx1187_fail
+  rxcap_1192_done:
   # rx subrule "O" subtype=capture negate=
-    rx1186_cur."!cursor_pos"(rx1186_pos)
-    $P10 = rx1186_cur."O"("%relational, :pirop<iseq ISs>")
-    unless $P10, rx1186_fail
-    rx1186_cur."!mark_push"(0, -1, 0, $P10)
+    rx1187_cur."!cursor_pos"(rx1187_pos)
+    $P10 = rx1187_cur."O"("%relational, :pirop<isle INn>")
+    unless $P10, rx1187_fail
+    rx1187_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1186_pos = $P10."pos"()
+    rx1187_pos = $P10."pos"()
   # rx pass
-    rx1186_cur."!cursor_pass"(rx1186_pos, "infix:sym<eq>")
-    if_null rx1186_debug, debug_937
-    rx1186_cur."!cursor_debug"("PASS", "infix:sym<eq>", " at pos=", rx1186_pos)
+    rx1187_cur."!cursor_pass"(rx1187_pos, "infix:sym<<=>")
+    if_null rx1187_debug, debug_935
+    rx1187_cur."!cursor_debug"("PASS", "infix:sym<<=>", " at pos=", rx1187_pos)
+  debug_935:
+    .return (rx1187_cur)
+  rx1187_restart:
+.annotate 'line', 454
+    if_null rx1187_debug, debug_936
+    rx1187_cur."!cursor_debug"("NEXT", "infix:sym<<=>")
+  debug_936:
+  rx1187_fail:
+    (rx1187_rep, rx1187_pos, $I10, $P10) = rx1187_cur."!mark_fail"(0)
+    lt rx1187_pos, -1, rx1187_done
+    eq rx1187_pos, -1, rx1187_fail
+    jump $I10
+  rx1187_done:
+    rx1187_cur."!cursor_fail"()
+    if_null rx1187_debug, debug_937
+    rx1187_cur."!cursor_debug"("FAIL", "infix:sym<<=>")
   debug_937:
-    .return (rx1186_cur)
-  rx1186_restart:
-.annotate 'line', 447
-    if_null rx1186_debug, debug_938
-    rx1186_cur."!cursor_debug"("NEXT", "infix:sym<eq>")
-  debug_938:
-  rx1186_fail:
-    (rx1186_rep, rx1186_pos, $I10, $P10) = rx1186_cur."!mark_fail"(0)
-    lt rx1186_pos, -1, rx1186_done
-    eq rx1186_pos, -1, rx1186_fail
-    jump $I10
-  rx1186_done:
-    rx1186_cur."!cursor_fail"()
-    if_null rx1186_debug, debug_939
-    rx1186_cur."!cursor_debug"("FAIL", "infix:sym<eq>")
-  debug_939:
-    .return (rx1186_cur)
+    .return (rx1187_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<eq>"  :subid("307_1282324002.40722") :method
-.annotate 'line', 447
-    $P1188 = self."!PREFIX__!subrule"("O", "eq")
-    new $P1189, "ResizablePMCArray"
-    push $P1189, $P1188
-    .return ($P1189)
+.sub "!PREFIX__infix:sym<<=>"  :subid("305_1284728478.15265") :method
+.annotate 'line', 454
+    $P1189 = self."!PREFIX__!subrule"("O", "<=")
+    new $P1190, "ResizablePMCArray"
+    push $P1190, $P1189
+    .return ($P1190)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<ne>"  :subid("308_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1193_tgt
-    .local int rx1193_pos
-    .local int rx1193_off
-    .local int rx1193_eos
-    .local int rx1193_rep
-    .local pmc rx1193_cur
-    .local pmc rx1193_debug
-    (rx1193_cur, rx1193_pos, rx1193_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1193_debug, rx1193_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1193_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1193_eos, rx1193_tgt
-    gt rx1193_pos, rx1193_eos, rx1193_done
-    set rx1193_off, 0
-    lt rx1193_pos, 2, rx1193_start
-    sub rx1193_off, rx1193_pos, 1
-    substr rx1193_tgt, rx1193_tgt, rx1193_off
-  rx1193_start:
-    eq $I10, 1, rx1193_restart
-    if_null rx1193_debug, debug_940
-    rx1193_cur."!cursor_debug"("START", "infix:sym<ne>")
-  debug_940:
+.sub "infix:sym<>=>"  :subid("306_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1194_tgt
+    .local int rx1194_pos
+    .local int rx1194_off
+    .local int rx1194_eos
+    .local int rx1194_rep
+    .local pmc rx1194_cur
+    .local pmc rx1194_debug
+    (rx1194_cur, rx1194_pos, rx1194_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1194_debug, rx1194_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1194_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1194_eos, rx1194_tgt
+    gt rx1194_pos, rx1194_eos, rx1194_done
+    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:
+    eq $I10, 1, rx1194_restart
+    if_null rx1194_debug, debug_938
+    rx1194_cur."!cursor_debug"("START", "infix:sym<>=>")
+  debug_938:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1197_done
-    goto rxscan1197_scan
-  rxscan1197_loop:
-    ($P10) = rx1193_cur."from"()
-    inc $P10
-    set rx1193_pos, $P10
-    ge rx1193_pos, rx1193_eos, rxscan1197_done
-  rxscan1197_scan:
-    set_addr $I10, rxscan1197_loop
-    rx1193_cur."!mark_push"(0, rx1193_pos, $I10)
-  rxscan1197_done:
-.annotate 'line', 526
+    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', 529
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1198_fail
-    rx1193_cur."!mark_push"(0, rx1193_pos, $I10)
-  # rx literal  "ne"
-    add $I11, rx1193_pos, 2
-    gt $I11, rx1193_eos, rx1193_fail
-    sub $I11, rx1193_pos, rx1193_off
-    substr $S10, rx1193_tgt, $I11, 2
-    ne $S10, "ne", rx1193_fail
-    add rx1193_pos, 2
-    set_addr $I10, rxcap_1198_fail
-    ($I12, $I11) = rx1193_cur."!mark_peek"($I10)
-    rx1193_cur."!cursor_pos"($I11)
-    ($P10) = rx1193_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1193_pos, "")
-    rx1193_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1199_fail
+    rx1194_cur."!mark_push"(0, rx1194_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)
     $P10."!cursor_names"("sym")
-    goto rxcap_1198_done
-  rxcap_1198_fail:
-    goto rx1193_fail
-  rxcap_1198_done:
+    goto rxcap_1199_done
+  rxcap_1199_fail:
+    goto rx1194_fail
+  rxcap_1199_done:
   # rx subrule "O" subtype=capture negate=
-    rx1193_cur."!cursor_pos"(rx1193_pos)
-    $P10 = rx1193_cur."O"("%relational, :pirop<isne ISs>")
-    unless $P10, rx1193_fail
-    rx1193_cur."!mark_push"(0, -1, 0, $P10)
+    rx1194_cur."!cursor_pos"(rx1194_pos)
+    $P10 = rx1194_cur."O"("%relational, :pirop<isge INn>")
+    unless $P10, rx1194_fail
+    rx1194_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1193_pos = $P10."pos"()
+    rx1194_pos = $P10."pos"()
   # rx pass
-    rx1193_cur."!cursor_pass"(rx1193_pos, "infix:sym<ne>")
-    if_null rx1193_debug, debug_941
-    rx1193_cur."!cursor_debug"("PASS", "infix:sym<ne>", " at pos=", rx1193_pos)
+    rx1194_cur."!cursor_pass"(rx1194_pos, "infix:sym<>=>")
+    if_null rx1194_debug, debug_939
+    rx1194_cur."!cursor_debug"("PASS", "infix:sym<>=>", " at pos=", rx1194_pos)
+  debug_939:
+    .return (rx1194_cur)
+  rx1194_restart:
+.annotate 'line', 454
+    if_null rx1194_debug, debug_940
+    rx1194_cur."!cursor_debug"("NEXT", "infix:sym<>=>")
+  debug_940:
+  rx1194_fail:
+    (rx1194_rep, rx1194_pos, $I10, $P10) = rx1194_cur."!mark_fail"(0)
+    lt rx1194_pos, -1, rx1194_done
+    eq rx1194_pos, -1, rx1194_fail
+    jump $I10
+  rx1194_done:
+    rx1194_cur."!cursor_fail"()
+    if_null rx1194_debug, debug_941
+    rx1194_cur."!cursor_debug"("FAIL", "infix:sym<>=>")
   debug_941:
-    .return (rx1193_cur)
-  rx1193_restart:
-.annotate 'line', 447
-    if_null rx1193_debug, debug_942
-    rx1193_cur."!cursor_debug"("NEXT", "infix:sym<ne>")
-  debug_942:
-  rx1193_fail:
-    (rx1193_rep, rx1193_pos, $I10, $P10) = rx1193_cur."!mark_fail"(0)
-    lt rx1193_pos, -1, rx1193_done
-    eq rx1193_pos, -1, rx1193_fail
-    jump $I10
-  rx1193_done:
-    rx1193_cur."!cursor_fail"()
-    if_null rx1193_debug, debug_943
-    rx1193_cur."!cursor_debug"("FAIL", "infix:sym<ne>")
-  debug_943:
-    .return (rx1193_cur)
+    .return (rx1194_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<ne>"  :subid("309_1282324002.40722") :method
-.annotate 'line', 447
-    $P1195 = self."!PREFIX__!subrule"("O", "ne")
-    new $P1196, "ResizablePMCArray"
-    push $P1196, $P1195
-    .return ($P1196)
+.sub "!PREFIX__infix:sym<>=>"  :subid("307_1284728478.15265") :method
+.annotate 'line', 454
+    $P1196 = self."!PREFIX__!subrule"("O", ">=")
+    new $P1197, "ResizablePMCArray"
+    push $P1197, $P1196
+    .return ($P1197)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<le>"  :subid("310_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1200_tgt
-    .local int rx1200_pos
-    .local int rx1200_off
-    .local int rx1200_eos
-    .local int rx1200_rep
-    .local pmc rx1200_cur
-    .local pmc rx1200_debug
-    (rx1200_cur, rx1200_pos, rx1200_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1200_debug, rx1200_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1200_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1200_eos, rx1200_tgt
-    gt rx1200_pos, rx1200_eos, rx1200_done
-    set rx1200_off, 0
-    lt rx1200_pos, 2, rx1200_start
-    sub rx1200_off, rx1200_pos, 1
-    substr rx1200_tgt, rx1200_tgt, rx1200_off
-  rx1200_start:
-    eq $I10, 1, rx1200_restart
-    if_null rx1200_debug, debug_944
-    rx1200_cur."!cursor_debug"("START", "infix:sym<le>")
-  debug_944:
+.sub "infix:sym<<>"  :subid("308_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1201_tgt
+    .local int rx1201_pos
+    .local int rx1201_off
+    .local int rx1201_eos
+    .local int rx1201_rep
+    .local pmc rx1201_cur
+    .local pmc rx1201_debug
+    (rx1201_cur, rx1201_pos, rx1201_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1201_debug, rx1201_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1201_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1201_eos, rx1201_tgt
+    gt rx1201_pos, rx1201_eos, rx1201_done
+    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:
+    eq $I10, 1, rx1201_restart
+    if_null rx1201_debug, debug_942
+    rx1201_cur."!cursor_debug"("START", "infix:sym<<>")
+  debug_942:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1204_done
-    goto rxscan1204_scan
-  rxscan1204_loop:
-    ($P10) = rx1200_cur."from"()
-    inc $P10
-    set rx1200_pos, $P10
-    ge rx1200_pos, rx1200_eos, rxscan1204_done
-  rxscan1204_scan:
-    set_addr $I10, rxscan1204_loop
-    rx1200_cur."!mark_push"(0, rx1200_pos, $I10)
-  rxscan1204_done:
-.annotate 'line', 527
+    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', 530
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1205_fail
-    rx1200_cur."!mark_push"(0, rx1200_pos, $I10)
-  # rx literal  "le"
-    add $I11, rx1200_pos, 2
-    gt $I11, rx1200_eos, rx1200_fail
-    sub $I11, rx1200_pos, rx1200_off
-    substr $S10, rx1200_tgt, $I11, 2
-    ne $S10, "le", rx1200_fail
-    add rx1200_pos, 2
-    set_addr $I10, rxcap_1205_fail
-    ($I12, $I11) = rx1200_cur."!mark_peek"($I10)
-    rx1200_cur."!cursor_pos"($I11)
-    ($P10) = rx1200_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1200_pos, "")
-    rx1200_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1206_fail
+    rx1201_cur."!mark_push"(0, rx1201_pos, $I10)
+  # rx literal  "<"
+    add $I11, rx1201_pos, 1
+    gt $I11, rx1201_eos, rx1201_fail
+    sub $I11, rx1201_pos, rx1201_off
+    ord $I11, rx1201_tgt, $I11
+    ne $I11, 60, rx1201_fail
+    add rx1201_pos, 1
+    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)
     $P10."!cursor_names"("sym")
-    goto rxcap_1205_done
-  rxcap_1205_fail:
-    goto rx1200_fail
-  rxcap_1205_done:
+    goto rxcap_1206_done
+  rxcap_1206_fail:
+    goto rx1201_fail
+  rxcap_1206_done:
   # rx subrule "O" subtype=capture negate=
-    rx1200_cur."!cursor_pos"(rx1200_pos)
-    $P10 = rx1200_cur."O"("%relational, :pirop<isle ISs>")
-    unless $P10, rx1200_fail
-    rx1200_cur."!mark_push"(0, -1, 0, $P10)
+    rx1201_cur."!cursor_pos"(rx1201_pos)
+    $P10 = rx1201_cur."O"("%relational, :pirop<islt INn>")
+    unless $P10, rx1201_fail
+    rx1201_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1200_pos = $P10."pos"()
+    rx1201_pos = $P10."pos"()
   # rx pass
-    rx1200_cur."!cursor_pass"(rx1200_pos, "infix:sym<le>")
-    if_null rx1200_debug, debug_945
-    rx1200_cur."!cursor_debug"("PASS", "infix:sym<le>", " at pos=", rx1200_pos)
+    rx1201_cur."!cursor_pass"(rx1201_pos, "infix:sym<<>")
+    if_null rx1201_debug, debug_943
+    rx1201_cur."!cursor_debug"("PASS", "infix:sym<<>", " at pos=", rx1201_pos)
+  debug_943:
+    .return (rx1201_cur)
+  rx1201_restart:
+.annotate 'line', 454
+    if_null rx1201_debug, debug_944
+    rx1201_cur."!cursor_debug"("NEXT", "infix:sym<<>")
+  debug_944:
+  rx1201_fail:
+    (rx1201_rep, rx1201_pos, $I10, $P10) = rx1201_cur."!mark_fail"(0)
+    lt rx1201_pos, -1, rx1201_done
+    eq rx1201_pos, -1, rx1201_fail
+    jump $I10
+  rx1201_done:
+    rx1201_cur."!cursor_fail"()
+    if_null rx1201_debug, debug_945
+    rx1201_cur."!cursor_debug"("FAIL", "infix:sym<<>")
   debug_945:
-    .return (rx1200_cur)
-  rx1200_restart:
-.annotate 'line', 447
-    if_null rx1200_debug, debug_946
-    rx1200_cur."!cursor_debug"("NEXT", "infix:sym<le>")
-  debug_946:
-  rx1200_fail:
-    (rx1200_rep, rx1200_pos, $I10, $P10) = rx1200_cur."!mark_fail"(0)
-    lt rx1200_pos, -1, rx1200_done
-    eq rx1200_pos, -1, rx1200_fail
-    jump $I10
-  rx1200_done:
-    rx1200_cur."!cursor_fail"()
-    if_null rx1200_debug, debug_947
-    rx1200_cur."!cursor_debug"("FAIL", "infix:sym<le>")
-  debug_947:
-    .return (rx1200_cur)
+    .return (rx1201_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<le>"  :subid("311_1282324002.40722") :method
-.annotate 'line', 447
-    $P1202 = self."!PREFIX__!subrule"("O", "le")
-    new $P1203, "ResizablePMCArray"
-    push $P1203, $P1202
-    .return ($P1203)
+.sub "!PREFIX__infix:sym<<>"  :subid("309_1284728478.15265") :method
+.annotate 'line', 454
+    $P1203 = self."!PREFIX__!subrule"("O", "<")
+    new $P1204, "ResizablePMCArray"
+    push $P1204, $P1203
+    .return ($P1204)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<ge>"  :subid("312_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1207_tgt
-    .local int rx1207_pos
-    .local int rx1207_off
-    .local int rx1207_eos
-    .local int rx1207_rep
-    .local pmc rx1207_cur
-    .local pmc rx1207_debug
-    (rx1207_cur, rx1207_pos, rx1207_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1207_debug, rx1207_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1207_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1207_eos, rx1207_tgt
-    gt rx1207_pos, rx1207_eos, rx1207_done
-    set rx1207_off, 0
-    lt rx1207_pos, 2, rx1207_start
-    sub rx1207_off, rx1207_pos, 1
-    substr rx1207_tgt, rx1207_tgt, rx1207_off
-  rx1207_start:
-    eq $I10, 1, rx1207_restart
-    if_null rx1207_debug, debug_948
-    rx1207_cur."!cursor_debug"("START", "infix:sym<ge>")
-  debug_948:
+.sub "infix:sym<>>"  :subid("310_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1208_tgt
+    .local int rx1208_pos
+    .local int rx1208_off
+    .local int rx1208_eos
+    .local int rx1208_rep
+    .local pmc rx1208_cur
+    .local pmc rx1208_debug
+    (rx1208_cur, rx1208_pos, rx1208_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1208_debug, rx1208_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1208_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1208_eos, rx1208_tgt
+    gt rx1208_pos, rx1208_eos, rx1208_done
+    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:
+    eq $I10, 1, rx1208_restart
+    if_null rx1208_debug, debug_946
+    rx1208_cur."!cursor_debug"("START", "infix:sym<>>")
+  debug_946:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1211_done
-    goto rxscan1211_scan
-  rxscan1211_loop:
-    ($P10) = rx1207_cur."from"()
-    inc $P10
-    set rx1207_pos, $P10
-    ge rx1207_pos, rx1207_eos, rxscan1211_done
-  rxscan1211_scan:
-    set_addr $I10, rxscan1211_loop
-    rx1207_cur."!mark_push"(0, rx1207_pos, $I10)
-  rxscan1211_done:
-.annotate 'line', 528
+    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', 531
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1212_fail
-    rx1207_cur."!mark_push"(0, rx1207_pos, $I10)
-  # rx literal  "ge"
-    add $I11, rx1207_pos, 2
-    gt $I11, rx1207_eos, rx1207_fail
-    sub $I11, rx1207_pos, rx1207_off
-    substr $S10, rx1207_tgt, $I11, 2
-    ne $S10, "ge", rx1207_fail
-    add rx1207_pos, 2
-    set_addr $I10, rxcap_1212_fail
-    ($I12, $I11) = rx1207_cur."!mark_peek"($I10)
-    rx1207_cur."!cursor_pos"($I11)
-    ($P10) = rx1207_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1207_pos, "")
-    rx1207_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1213_fail
+    rx1208_cur."!mark_push"(0, rx1208_pos, $I10)
+  # rx literal  ">"
+    add $I11, rx1208_pos, 1
+    gt $I11, rx1208_eos, rx1208_fail
+    sub $I11, rx1208_pos, rx1208_off
+    ord $I11, rx1208_tgt, $I11
+    ne $I11, 62, 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)
     $P10."!cursor_names"("sym")
-    goto rxcap_1212_done
-  rxcap_1212_fail:
-    goto rx1207_fail
-  rxcap_1212_done:
+    goto rxcap_1213_done
+  rxcap_1213_fail:
+    goto rx1208_fail
+  rxcap_1213_done:
   # rx subrule "O" subtype=capture negate=
-    rx1207_cur."!cursor_pos"(rx1207_pos)
-    $P10 = rx1207_cur."O"("%relational, :pirop<isge ISs>")
-    unless $P10, rx1207_fail
-    rx1207_cur."!mark_push"(0, -1, 0, $P10)
+    rx1208_cur."!cursor_pos"(rx1208_pos)
+    $P10 = rx1208_cur."O"("%relational, :pirop<isgt INn>")
+    unless $P10, rx1208_fail
+    rx1208_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1207_pos = $P10."pos"()
+    rx1208_pos = $P10."pos"()
   # rx pass
-    rx1207_cur."!cursor_pass"(rx1207_pos, "infix:sym<ge>")
-    if_null rx1207_debug, debug_949
-    rx1207_cur."!cursor_debug"("PASS", "infix:sym<ge>", " at pos=", rx1207_pos)
+    rx1208_cur."!cursor_pass"(rx1208_pos, "infix:sym<>>")
+    if_null rx1208_debug, debug_947
+    rx1208_cur."!cursor_debug"("PASS", "infix:sym<>>", " at pos=", rx1208_pos)
+  debug_947:
+    .return (rx1208_cur)
+  rx1208_restart:
+.annotate 'line', 454
+    if_null rx1208_debug, debug_948
+    rx1208_cur."!cursor_debug"("NEXT", "infix:sym<>>")
+  debug_948:
+  rx1208_fail:
+    (rx1208_rep, rx1208_pos, $I10, $P10) = rx1208_cur."!mark_fail"(0)
+    lt rx1208_pos, -1, rx1208_done
+    eq rx1208_pos, -1, rx1208_fail
+    jump $I10
+  rx1208_done:
+    rx1208_cur."!cursor_fail"()
+    if_null rx1208_debug, debug_949
+    rx1208_cur."!cursor_debug"("FAIL", "infix:sym<>>")
   debug_949:
-    .return (rx1207_cur)
-  rx1207_restart:
-.annotate 'line', 447
-    if_null rx1207_debug, debug_950
-    rx1207_cur."!cursor_debug"("NEXT", "infix:sym<ge>")
-  debug_950:
-  rx1207_fail:
-    (rx1207_rep, rx1207_pos, $I10, $P10) = rx1207_cur."!mark_fail"(0)
-    lt rx1207_pos, -1, rx1207_done
-    eq rx1207_pos, -1, rx1207_fail
-    jump $I10
-  rx1207_done:
-    rx1207_cur."!cursor_fail"()
-    if_null rx1207_debug, debug_951
-    rx1207_cur."!cursor_debug"("FAIL", "infix:sym<ge>")
-  debug_951:
-    .return (rx1207_cur)
+    .return (rx1208_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<ge>"  :subid("313_1282324002.40722") :method
-.annotate 'line', 447
-    $P1209 = self."!PREFIX__!subrule"("O", "ge")
-    new $P1210, "ResizablePMCArray"
-    push $P1210, $P1209
-    .return ($P1210)
+.sub "!PREFIX__infix:sym<>>"  :subid("311_1284728478.15265") :method
+.annotate 'line', 454
+    $P1210 = self."!PREFIX__!subrule"("O", ">")
+    new $P1211, "ResizablePMCArray"
+    push $P1211, $P1210
+    .return ($P1211)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<lt>"  :subid("314_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1214_tgt
-    .local int rx1214_pos
-    .local int rx1214_off
-    .local int rx1214_eos
-    .local int rx1214_rep
-    .local pmc rx1214_cur
-    .local pmc rx1214_debug
-    (rx1214_cur, rx1214_pos, rx1214_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1214_debug, rx1214_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1214_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1214_eos, rx1214_tgt
-    gt rx1214_pos, rx1214_eos, rx1214_done
-    set rx1214_off, 0
-    lt rx1214_pos, 2, rx1214_start
-    sub rx1214_off, rx1214_pos, 1
-    substr rx1214_tgt, rx1214_tgt, rx1214_off
-  rx1214_start:
-    eq $I10, 1, rx1214_restart
-    if_null rx1214_debug, debug_952
-    rx1214_cur."!cursor_debug"("START", "infix:sym<lt>")
-  debug_952:
+.sub "infix:sym<eq>"  :subid("312_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1215_tgt
+    .local int rx1215_pos
+    .local int rx1215_off
+    .local int rx1215_eos
+    .local int rx1215_rep
+    .local pmc rx1215_cur
+    .local pmc rx1215_debug
+    (rx1215_cur, rx1215_pos, rx1215_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1215_debug, rx1215_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1215_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1215_eos, rx1215_tgt
+    gt rx1215_pos, rx1215_eos, rx1215_done
+    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:
+    eq $I10, 1, rx1215_restart
+    if_null rx1215_debug, debug_950
+    rx1215_cur."!cursor_debug"("START", "infix:sym<eq>")
+  debug_950:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1218_done
-    goto rxscan1218_scan
-  rxscan1218_loop:
-    ($P10) = rx1214_cur."from"()
-    inc $P10
-    set rx1214_pos, $P10
-    ge rx1214_pos, rx1214_eos, rxscan1218_done
-  rxscan1218_scan:
-    set_addr $I10, rxscan1218_loop
-    rx1214_cur."!mark_push"(0, rx1214_pos, $I10)
-  rxscan1218_done:
-.annotate 'line', 529
+    ne $I10, -1, rxscan1219_done
+    goto rxscan1219_scan
+  rxscan1219_loop:
+    ($P10) = rx1215_cur."from"()
+    inc $P10
+    set rx1215_pos, $P10
+    ge rx1215_pos, rx1215_eos, rxscan1219_done
+  rxscan1219_scan:
+    set_addr $I10, rxscan1219_loop
+    rx1215_cur."!mark_push"(0, rx1215_pos, $I10)
+  rxscan1219_done:
+.annotate 'line', 532
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1219_fail
-    rx1214_cur."!mark_push"(0, rx1214_pos, $I10)
-  # rx literal  "lt"
-    add $I11, rx1214_pos, 2
-    gt $I11, rx1214_eos, rx1214_fail
-    sub $I11, rx1214_pos, rx1214_off
-    substr $S10, rx1214_tgt, $I11, 2
-    ne $S10, "lt", rx1214_fail
-    add rx1214_pos, 2
-    set_addr $I10, rxcap_1219_fail
-    ($I12, $I11) = rx1214_cur."!mark_peek"($I10)
-    rx1214_cur."!cursor_pos"($I11)
-    ($P10) = rx1214_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1214_pos, "")
-    rx1214_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1220_fail
+    rx1215_cur."!mark_push"(0, rx1215_pos, $I10)
+  # rx literal  "eq"
+    add $I11, rx1215_pos, 2
+    gt $I11, rx1215_eos, rx1215_fail
+    sub $I11, rx1215_pos, rx1215_off
+    substr $S10, rx1215_tgt, $I11, 2
+    ne $S10, "eq", rx1215_fail
+    add rx1215_pos, 2
+    set_addr $I10, rxcap_1220_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)
     $P10."!cursor_names"("sym")
-    goto rxcap_1219_done
-  rxcap_1219_fail:
-    goto rx1214_fail
-  rxcap_1219_done:
+    goto rxcap_1220_done
+  rxcap_1220_fail:
+    goto rx1215_fail
+  rxcap_1220_done:
   # rx subrule "O" subtype=capture negate=
-    rx1214_cur."!cursor_pos"(rx1214_pos)
-    $P10 = rx1214_cur."O"("%relational, :pirop<islt ISs>")
-    unless $P10, rx1214_fail
-    rx1214_cur."!mark_push"(0, -1, 0, $P10)
+    rx1215_cur."!cursor_pos"(rx1215_pos)
+    $P10 = rx1215_cur."O"("%relational, :pirop<iseq ISs>")
+    unless $P10, rx1215_fail
+    rx1215_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1214_pos = $P10."pos"()
+    rx1215_pos = $P10."pos"()
   # rx pass
-    rx1214_cur."!cursor_pass"(rx1214_pos, "infix:sym<lt>")
-    if_null rx1214_debug, debug_953
-    rx1214_cur."!cursor_debug"("PASS", "infix:sym<lt>", " at pos=", rx1214_pos)
+    rx1215_cur."!cursor_pass"(rx1215_pos, "infix:sym<eq>")
+    if_null rx1215_debug, debug_951
+    rx1215_cur."!cursor_debug"("PASS", "infix:sym<eq>", " at pos=", rx1215_pos)
+  debug_951:
+    .return (rx1215_cur)
+  rx1215_restart:
+.annotate 'line', 454
+    if_null rx1215_debug, debug_952
+    rx1215_cur."!cursor_debug"("NEXT", "infix:sym<eq>")
+  debug_952:
+  rx1215_fail:
+    (rx1215_rep, rx1215_pos, $I10, $P10) = rx1215_cur."!mark_fail"(0)
+    lt rx1215_pos, -1, rx1215_done
+    eq rx1215_pos, -1, rx1215_fail
+    jump $I10
+  rx1215_done:
+    rx1215_cur."!cursor_fail"()
+    if_null rx1215_debug, debug_953
+    rx1215_cur."!cursor_debug"("FAIL", "infix:sym<eq>")
   debug_953:
-    .return (rx1214_cur)
-  rx1214_restart:
-.annotate 'line', 447
-    if_null rx1214_debug, debug_954
-    rx1214_cur."!cursor_debug"("NEXT", "infix:sym<lt>")
-  debug_954:
-  rx1214_fail:
-    (rx1214_rep, rx1214_pos, $I10, $P10) = rx1214_cur."!mark_fail"(0)
-    lt rx1214_pos, -1, rx1214_done
-    eq rx1214_pos, -1, rx1214_fail
-    jump $I10
-  rx1214_done:
-    rx1214_cur."!cursor_fail"()
-    if_null rx1214_debug, debug_955
-    rx1214_cur."!cursor_debug"("FAIL", "infix:sym<lt>")
-  debug_955:
-    .return (rx1214_cur)
+    .return (rx1215_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<lt>"  :subid("315_1282324002.40722") :method
-.annotate 'line', 447
-    $P1216 = self."!PREFIX__!subrule"("O", "lt")
-    new $P1217, "ResizablePMCArray"
-    push $P1217, $P1216
-    .return ($P1217)
+.sub "!PREFIX__infix:sym<eq>"  :subid("313_1284728478.15265") :method
+.annotate 'line', 454
+    $P1217 = self."!PREFIX__!subrule"("O", "eq")
+    new $P1218, "ResizablePMCArray"
+    push $P1218, $P1217
+    .return ($P1218)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<gt>"  :subid("316_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1221_tgt
-    .local int rx1221_pos
-    .local int rx1221_off
-    .local int rx1221_eos
-    .local int rx1221_rep
-    .local pmc rx1221_cur
-    .local pmc rx1221_debug
-    (rx1221_cur, rx1221_pos, rx1221_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1221_debug, rx1221_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1221_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1221_eos, rx1221_tgt
-    gt rx1221_pos, rx1221_eos, rx1221_done
-    set rx1221_off, 0
-    lt rx1221_pos, 2, rx1221_start
-    sub rx1221_off, rx1221_pos, 1
-    substr rx1221_tgt, rx1221_tgt, rx1221_off
-  rx1221_start:
-    eq $I10, 1, rx1221_restart
-    if_null rx1221_debug, debug_956
-    rx1221_cur."!cursor_debug"("START", "infix:sym<gt>")
-  debug_956:
+.sub "infix:sym<ne>"  :subid("314_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1222_tgt
+    .local int rx1222_pos
+    .local int rx1222_off
+    .local int rx1222_eos
+    .local int rx1222_rep
+    .local pmc rx1222_cur
+    .local pmc rx1222_debug
+    (rx1222_cur, rx1222_pos, rx1222_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1222_debug, rx1222_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1222_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1222_eos, rx1222_tgt
+    gt rx1222_pos, rx1222_eos, rx1222_done
+    set rx1222_off, 0
+    lt rx1222_pos, 2, rx1222_start
+    sub rx1222_off, rx1222_pos, 1
+    substr rx1222_tgt, rx1222_tgt, rx1222_off
+  rx1222_start:
+    eq $I10, 1, rx1222_restart
+    if_null rx1222_debug, debug_954
+    rx1222_cur."!cursor_debug"("START", "infix:sym<ne>")
+  debug_954:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1225_done
-    goto rxscan1225_scan
-  rxscan1225_loop:
-    ($P10) = rx1221_cur."from"()
-    inc $P10
-    set rx1221_pos, $P10
-    ge rx1221_pos, rx1221_eos, rxscan1225_done
-  rxscan1225_scan:
-    set_addr $I10, rxscan1225_loop
-    rx1221_cur."!mark_push"(0, rx1221_pos, $I10)
-  rxscan1225_done:
-.annotate 'line', 530
+    ne $I10, -1, rxscan1226_done
+    goto rxscan1226_scan
+  rxscan1226_loop:
+    ($P10) = rx1222_cur."from"()
+    inc $P10
+    set rx1222_pos, $P10
+    ge rx1222_pos, rx1222_eos, rxscan1226_done
+  rxscan1226_scan:
+    set_addr $I10, rxscan1226_loop
+    rx1222_cur."!mark_push"(0, rx1222_pos, $I10)
+  rxscan1226_done:
+.annotate 'line', 533
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1226_fail
-    rx1221_cur."!mark_push"(0, rx1221_pos, $I10)
-  # rx literal  "gt"
-    add $I11, rx1221_pos, 2
-    gt $I11, rx1221_eos, rx1221_fail
-    sub $I11, rx1221_pos, rx1221_off
-    substr $S10, rx1221_tgt, $I11, 2
-    ne $S10, "gt", rx1221_fail
-    add rx1221_pos, 2
-    set_addr $I10, rxcap_1226_fail
-    ($I12, $I11) = rx1221_cur."!mark_peek"($I10)
-    rx1221_cur."!cursor_pos"($I11)
-    ($P10) = rx1221_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1221_pos, "")
-    rx1221_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1227_fail
+    rx1222_cur."!mark_push"(0, rx1222_pos, $I10)
+  # rx literal  "ne"
+    add $I11, rx1222_pos, 2
+    gt $I11, rx1222_eos, rx1222_fail
+    sub $I11, rx1222_pos, rx1222_off
+    substr $S10, rx1222_tgt, $I11, 2
+    ne $S10, "ne", rx1222_fail
+    add rx1222_pos, 2
+    set_addr $I10, rxcap_1227_fail
+    ($I12, $I11) = rx1222_cur."!mark_peek"($I10)
+    rx1222_cur."!cursor_pos"($I11)
+    ($P10) = rx1222_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1222_pos, "")
+    rx1222_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1226_done
-  rxcap_1226_fail:
-    goto rx1221_fail
-  rxcap_1226_done:
+    goto rxcap_1227_done
+  rxcap_1227_fail:
+    goto rx1222_fail
+  rxcap_1227_done:
   # rx subrule "O" subtype=capture negate=
-    rx1221_cur."!cursor_pos"(rx1221_pos)
-    $P10 = rx1221_cur."O"("%relational, :pirop<isgt ISs>")
-    unless $P10, rx1221_fail
-    rx1221_cur."!mark_push"(0, -1, 0, $P10)
+    rx1222_cur."!cursor_pos"(rx1222_pos)
+    $P10 = rx1222_cur."O"("%relational, :pirop<isne ISs>")
+    unless $P10, rx1222_fail
+    rx1222_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1221_pos = $P10."pos"()
+    rx1222_pos = $P10."pos"()
   # rx pass
-    rx1221_cur."!cursor_pass"(rx1221_pos, "infix:sym<gt>")
-    if_null rx1221_debug, debug_957
-    rx1221_cur."!cursor_debug"("PASS", "infix:sym<gt>", " at pos=", rx1221_pos)
+    rx1222_cur."!cursor_pass"(rx1222_pos, "infix:sym<ne>")
+    if_null rx1222_debug, debug_955
+    rx1222_cur."!cursor_debug"("PASS", "infix:sym<ne>", " at pos=", rx1222_pos)
+  debug_955:
+    .return (rx1222_cur)
+  rx1222_restart:
+.annotate 'line', 454
+    if_null rx1222_debug, debug_956
+    rx1222_cur."!cursor_debug"("NEXT", "infix:sym<ne>")
+  debug_956:
+  rx1222_fail:
+    (rx1222_rep, rx1222_pos, $I10, $P10) = rx1222_cur."!mark_fail"(0)
+    lt rx1222_pos, -1, rx1222_done
+    eq rx1222_pos, -1, rx1222_fail
+    jump $I10
+  rx1222_done:
+    rx1222_cur."!cursor_fail"()
+    if_null rx1222_debug, debug_957
+    rx1222_cur."!cursor_debug"("FAIL", "infix:sym<ne>")
   debug_957:
-    .return (rx1221_cur)
-  rx1221_restart:
-.annotate 'line', 447
-    if_null rx1221_debug, debug_958
-    rx1221_cur."!cursor_debug"("NEXT", "infix:sym<gt>")
-  debug_958:
-  rx1221_fail:
-    (rx1221_rep, rx1221_pos, $I10, $P10) = rx1221_cur."!mark_fail"(0)
-    lt rx1221_pos, -1, rx1221_done
-    eq rx1221_pos, -1, rx1221_fail
-    jump $I10
-  rx1221_done:
-    rx1221_cur."!cursor_fail"()
-    if_null rx1221_debug, debug_959
-    rx1221_cur."!cursor_debug"("FAIL", "infix:sym<gt>")
-  debug_959:
-    .return (rx1221_cur)
+    .return (rx1222_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<gt>"  :subid("317_1282324002.40722") :method
-.annotate 'line', 447
-    $P1223 = self."!PREFIX__!subrule"("O", "gt")
-    new $P1224, "ResizablePMCArray"
-    push $P1224, $P1223
-    .return ($P1224)
+.sub "!PREFIX__infix:sym<ne>"  :subid("315_1284728478.15265") :method
+.annotate 'line', 454
+    $P1224 = self."!PREFIX__!subrule"("O", "ne")
+    new $P1225, "ResizablePMCArray"
+    push $P1225, $P1224
+    .return ($P1225)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<=:=>"  :subid("318_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1228_tgt
-    .local int rx1228_pos
-    .local int rx1228_off
-    .local int rx1228_eos
-    .local int rx1228_rep
-    .local pmc rx1228_cur
-    .local pmc rx1228_debug
-    (rx1228_cur, rx1228_pos, rx1228_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1228_debug, rx1228_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1228_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1228_eos, rx1228_tgt
-    gt rx1228_pos, rx1228_eos, rx1228_done
-    set rx1228_off, 0
-    lt rx1228_pos, 2, rx1228_start
-    sub rx1228_off, rx1228_pos, 1
-    substr rx1228_tgt, rx1228_tgt, rx1228_off
-  rx1228_start:
-    eq $I10, 1, rx1228_restart
-    if_null rx1228_debug, debug_960
-    rx1228_cur."!cursor_debug"("START", "infix:sym<=:=>")
-  debug_960:
+.sub "infix:sym<le>"  :subid("316_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1229_tgt
+    .local int rx1229_pos
+    .local int rx1229_off
+    .local int rx1229_eos
+    .local int rx1229_rep
+    .local pmc rx1229_cur
+    .local pmc rx1229_debug
+    (rx1229_cur, rx1229_pos, rx1229_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1229_debug, rx1229_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1229_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1229_eos, rx1229_tgt
+    gt rx1229_pos, rx1229_eos, rx1229_done
+    set rx1229_off, 0
+    lt rx1229_pos, 2, rx1229_start
+    sub rx1229_off, rx1229_pos, 1
+    substr rx1229_tgt, rx1229_tgt, rx1229_off
+  rx1229_start:
+    eq $I10, 1, rx1229_restart
+    if_null rx1229_debug, debug_958
+    rx1229_cur."!cursor_debug"("START", "infix:sym<le>")
+  debug_958:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1232_done
-    goto rxscan1232_scan
-  rxscan1232_loop:
-    ($P10) = rx1228_cur."from"()
-    inc $P10
-    set rx1228_pos, $P10
-    ge rx1228_pos, rx1228_eos, rxscan1232_done
-  rxscan1232_scan:
-    set_addr $I10, rxscan1232_loop
-    rx1228_cur."!mark_push"(0, rx1228_pos, $I10)
-  rxscan1232_done:
-.annotate 'line', 531
+    ne $I10, -1, rxscan1233_done
+    goto rxscan1233_scan
+  rxscan1233_loop:
+    ($P10) = rx1229_cur."from"()
+    inc $P10
+    set rx1229_pos, $P10
+    ge rx1229_pos, rx1229_eos, rxscan1233_done
+  rxscan1233_scan:
+    set_addr $I10, rxscan1233_loop
+    rx1229_cur."!mark_push"(0, rx1229_pos, $I10)
+  rxscan1233_done:
+.annotate 'line', 534
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1233_fail
-    rx1228_cur."!mark_push"(0, rx1228_pos, $I10)
-  # rx literal  "=:="
-    add $I11, rx1228_pos, 3
-    gt $I11, rx1228_eos, rx1228_fail
-    sub $I11, rx1228_pos, rx1228_off
-    substr $S10, rx1228_tgt, $I11, 3
-    ne $S10, "=:=", rx1228_fail
-    add rx1228_pos, 3
-    set_addr $I10, rxcap_1233_fail
-    ($I12, $I11) = rx1228_cur."!mark_peek"($I10)
-    rx1228_cur."!cursor_pos"($I11)
-    ($P10) = rx1228_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1228_pos, "")
-    rx1228_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1234_fail
+    rx1229_cur."!mark_push"(0, rx1229_pos, $I10)
+  # rx literal  "le"
+    add $I11, rx1229_pos, 2
+    gt $I11, rx1229_eos, rx1229_fail
+    sub $I11, rx1229_pos, rx1229_off
+    substr $S10, rx1229_tgt, $I11, 2
+    ne $S10, "le", rx1229_fail
+    add rx1229_pos, 2
+    set_addr $I10, rxcap_1234_fail
+    ($I12, $I11) = rx1229_cur."!mark_peek"($I10)
+    rx1229_cur."!cursor_pos"($I11)
+    ($P10) = rx1229_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1229_pos, "")
+    rx1229_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1233_done
-  rxcap_1233_fail:
-    goto rx1228_fail
-  rxcap_1233_done:
+    goto rxcap_1234_done
+  rxcap_1234_fail:
+    goto rx1229_fail
+  rxcap_1234_done:
   # rx subrule "O" subtype=capture negate=
-    rx1228_cur."!cursor_pos"(rx1228_pos)
-    $P10 = rx1228_cur."O"("%relational, :pirop<issame>")
-    unless $P10, rx1228_fail
-    rx1228_cur."!mark_push"(0, -1, 0, $P10)
+    rx1229_cur."!cursor_pos"(rx1229_pos)
+    $P10 = rx1229_cur."O"("%relational, :pirop<isle ISs>")
+    unless $P10, rx1229_fail
+    rx1229_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1228_pos = $P10."pos"()
+    rx1229_pos = $P10."pos"()
   # rx pass
-    rx1228_cur."!cursor_pass"(rx1228_pos, "infix:sym<=:=>")
-    if_null rx1228_debug, debug_961
-    rx1228_cur."!cursor_debug"("PASS", "infix:sym<=:=>", " at pos=", rx1228_pos)
+    rx1229_cur."!cursor_pass"(rx1229_pos, "infix:sym<le>")
+    if_null rx1229_debug, debug_959
+    rx1229_cur."!cursor_debug"("PASS", "infix:sym<le>", " at pos=", rx1229_pos)
+  debug_959:
+    .return (rx1229_cur)
+  rx1229_restart:
+.annotate 'line', 454
+    if_null rx1229_debug, debug_960
+    rx1229_cur."!cursor_debug"("NEXT", "infix:sym<le>")
+  debug_960:
+  rx1229_fail:
+    (rx1229_rep, rx1229_pos, $I10, $P10) = rx1229_cur."!mark_fail"(0)
+    lt rx1229_pos, -1, rx1229_done
+    eq rx1229_pos, -1, rx1229_fail
+    jump $I10
+  rx1229_done:
+    rx1229_cur."!cursor_fail"()
+    if_null rx1229_debug, debug_961
+    rx1229_cur."!cursor_debug"("FAIL", "infix:sym<le>")
   debug_961:
-    .return (rx1228_cur)
-  rx1228_restart:
-.annotate 'line', 447
-    if_null rx1228_debug, debug_962
-    rx1228_cur."!cursor_debug"("NEXT", "infix:sym<=:=>")
-  debug_962:
-  rx1228_fail:
-    (rx1228_rep, rx1228_pos, $I10, $P10) = rx1228_cur."!mark_fail"(0)
-    lt rx1228_pos, -1, rx1228_done
-    eq rx1228_pos, -1, rx1228_fail
-    jump $I10
-  rx1228_done:
-    rx1228_cur."!cursor_fail"()
-    if_null rx1228_debug, debug_963
-    rx1228_cur."!cursor_debug"("FAIL", "infix:sym<=:=>")
-  debug_963:
-    .return (rx1228_cur)
+    .return (rx1229_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<=:=>"  :subid("319_1282324002.40722") :method
-.annotate 'line', 447
-    $P1230 = self."!PREFIX__!subrule"("O", "=:=")
-    new $P1231, "ResizablePMCArray"
-    push $P1231, $P1230
-    .return ($P1231)
+.sub "!PREFIX__infix:sym<le>"  :subid("317_1284728478.15265") :method
+.annotate 'line', 454
+    $P1231 = self."!PREFIX__!subrule"("O", "le")
+    new $P1232, "ResizablePMCArray"
+    push $P1232, $P1231
+    .return ($P1232)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<~~>"  :subid("320_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1235_tgt
-    .local int rx1235_pos
-    .local int rx1235_off
-    .local int rx1235_eos
-    .local int rx1235_rep
-    .local pmc rx1235_cur
-    .local pmc rx1235_debug
-    (rx1235_cur, rx1235_pos, rx1235_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1235_debug, rx1235_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1235_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1235_eos, rx1235_tgt
-    gt rx1235_pos, rx1235_eos, rx1235_done
-    set rx1235_off, 0
-    lt rx1235_pos, 2, rx1235_start
-    sub rx1235_off, rx1235_pos, 1
-    substr rx1235_tgt, rx1235_tgt, rx1235_off
-  rx1235_start:
-    eq $I10, 1, rx1235_restart
-    if_null rx1235_debug, debug_964
-    rx1235_cur."!cursor_debug"("START", "infix:sym<~~>")
-  debug_964:
+.sub "infix:sym<ge>"  :subid("318_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1236_tgt
+    .local int rx1236_pos
+    .local int rx1236_off
+    .local int rx1236_eos
+    .local int rx1236_rep
+    .local pmc rx1236_cur
+    .local pmc rx1236_debug
+    (rx1236_cur, rx1236_pos, rx1236_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1236_debug, rx1236_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1236_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1236_eos, rx1236_tgt
+    gt rx1236_pos, rx1236_eos, rx1236_done
+    set rx1236_off, 0
+    lt rx1236_pos, 2, rx1236_start
+    sub rx1236_off, rx1236_pos, 1
+    substr rx1236_tgt, rx1236_tgt, rx1236_off
+  rx1236_start:
+    eq $I10, 1, rx1236_restart
+    if_null rx1236_debug, debug_962
+    rx1236_cur."!cursor_debug"("START", "infix:sym<ge>")
+  debug_962:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1239_done
-    goto rxscan1239_scan
-  rxscan1239_loop:
-    ($P10) = rx1235_cur."from"()
-    inc $P10
-    set rx1235_pos, $P10
-    ge rx1235_pos, rx1235_eos, rxscan1239_done
-  rxscan1239_scan:
-    set_addr $I10, rxscan1239_loop
-    rx1235_cur."!mark_push"(0, rx1235_pos, $I10)
-  rxscan1239_done:
-.annotate 'line', 532
+    ne $I10, -1, rxscan1240_done
+    goto rxscan1240_scan
+  rxscan1240_loop:
+    ($P10) = rx1236_cur."from"()
+    inc $P10
+    set rx1236_pos, $P10
+    ge rx1236_pos, rx1236_eos, rxscan1240_done
+  rxscan1240_scan:
+    set_addr $I10, rxscan1240_loop
+    rx1236_cur."!mark_push"(0, rx1236_pos, $I10)
+  rxscan1240_done:
+.annotate 'line', 535
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1240_fail
-    rx1235_cur."!mark_push"(0, rx1235_pos, $I10)
-  # rx literal  "~~"
-    add $I11, rx1235_pos, 2
-    gt $I11, rx1235_eos, rx1235_fail
-    sub $I11, rx1235_pos, rx1235_off
-    substr $S10, rx1235_tgt, $I11, 2
-    ne $S10, "~~", rx1235_fail
-    add rx1235_pos, 2
-    set_addr $I10, rxcap_1240_fail
-    ($I12, $I11) = rx1235_cur."!mark_peek"($I10)
-    rx1235_cur."!cursor_pos"($I11)
-    ($P10) = rx1235_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1235_pos, "")
-    rx1235_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1241_fail
+    rx1236_cur."!mark_push"(0, rx1236_pos, $I10)
+  # rx literal  "ge"
+    add $I11, rx1236_pos, 2
+    gt $I11, rx1236_eos, rx1236_fail
+    sub $I11, rx1236_pos, rx1236_off
+    substr $S10, rx1236_tgt, $I11, 2
+    ne $S10, "ge", rx1236_fail
+    add rx1236_pos, 2
+    set_addr $I10, rxcap_1241_fail
+    ($I12, $I11) = rx1236_cur."!mark_peek"($I10)
+    rx1236_cur."!cursor_pos"($I11)
+    ($P10) = rx1236_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1236_pos, "")
+    rx1236_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1240_done
-  rxcap_1240_fail:
-    goto rx1235_fail
-  rxcap_1240_done:
+    goto rxcap_1241_done
+  rxcap_1241_fail:
+    goto rx1236_fail
+  rxcap_1241_done:
   # rx subrule "O" subtype=capture negate=
-    rx1235_cur."!cursor_pos"(rx1235_pos)
-    $P10 = rx1235_cur."O"("%relational, :reducecheck<smartmatch>")
-    unless $P10, rx1235_fail
-    rx1235_cur."!mark_push"(0, -1, 0, $P10)
+    rx1236_cur."!cursor_pos"(rx1236_pos)
+    $P10 = rx1236_cur."O"("%relational, :pirop<isge ISs>")
+    unless $P10, rx1236_fail
+    rx1236_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1235_pos = $P10."pos"()
+    rx1236_pos = $P10."pos"()
   # rx pass
-    rx1235_cur."!cursor_pass"(rx1235_pos, "infix:sym<~~>")
-    if_null rx1235_debug, debug_965
-    rx1235_cur."!cursor_debug"("PASS", "infix:sym<~~>", " at pos=", rx1235_pos)
+    rx1236_cur."!cursor_pass"(rx1236_pos, "infix:sym<ge>")
+    if_null rx1236_debug, debug_963
+    rx1236_cur."!cursor_debug"("PASS", "infix:sym<ge>", " at pos=", rx1236_pos)
+  debug_963:
+    .return (rx1236_cur)
+  rx1236_restart:
+.annotate 'line', 454
+    if_null rx1236_debug, debug_964
+    rx1236_cur."!cursor_debug"("NEXT", "infix:sym<ge>")
+  debug_964:
+  rx1236_fail:
+    (rx1236_rep, rx1236_pos, $I10, $P10) = rx1236_cur."!mark_fail"(0)
+    lt rx1236_pos, -1, rx1236_done
+    eq rx1236_pos, -1, rx1236_fail
+    jump $I10
+  rx1236_done:
+    rx1236_cur."!cursor_fail"()
+    if_null rx1236_debug, debug_965
+    rx1236_cur."!cursor_debug"("FAIL", "infix:sym<ge>")
   debug_965:
-    .return (rx1235_cur)
-  rx1235_restart:
-.annotate 'line', 447
-    if_null rx1235_debug, debug_966
-    rx1235_cur."!cursor_debug"("NEXT", "infix:sym<~~>")
-  debug_966:
-  rx1235_fail:
-    (rx1235_rep, rx1235_pos, $I10, $P10) = rx1235_cur."!mark_fail"(0)
-    lt rx1235_pos, -1, rx1235_done
-    eq rx1235_pos, -1, rx1235_fail
-    jump $I10
-  rx1235_done:
-    rx1235_cur."!cursor_fail"()
-    if_null rx1235_debug, debug_967
-    rx1235_cur."!cursor_debug"("FAIL", "infix:sym<~~>")
-  debug_967:
-    .return (rx1235_cur)
+    .return (rx1236_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<~~>"  :subid("321_1282324002.40722") :method
-.annotate 'line', 447
-    $P1237 = self."!PREFIX__!subrule"("O", "~~")
-    new $P1238, "ResizablePMCArray"
-    push $P1238, $P1237
-    .return ($P1238)
+.sub "!PREFIX__infix:sym<ge>"  :subid("319_1284728478.15265") :method
+.annotate 'line', 454
+    $P1238 = self."!PREFIX__!subrule"("O", "ge")
+    new $P1239, "ResizablePMCArray"
+    push $P1239, $P1238
+    .return ($P1239)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<&&>"  :subid("322_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1242_tgt
-    .local int rx1242_pos
-    .local int rx1242_off
-    .local int rx1242_eos
-    .local int rx1242_rep
-    .local pmc rx1242_cur
-    .local pmc rx1242_debug
-    (rx1242_cur, rx1242_pos, rx1242_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1242_debug, rx1242_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1242_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1242_eos, rx1242_tgt
-    gt rx1242_pos, rx1242_eos, rx1242_done
-    set rx1242_off, 0
-    lt rx1242_pos, 2, rx1242_start
-    sub rx1242_off, rx1242_pos, 1
-    substr rx1242_tgt, rx1242_tgt, rx1242_off
-  rx1242_start:
-    eq $I10, 1, rx1242_restart
-    if_null rx1242_debug, debug_968
-    rx1242_cur."!cursor_debug"("START", "infix:sym<&&>")
-  debug_968:
+.sub "infix:sym<lt>"  :subid("320_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1243_tgt
+    .local int rx1243_pos
+    .local int rx1243_off
+    .local int rx1243_eos
+    .local int rx1243_rep
+    .local pmc rx1243_cur
+    .local pmc rx1243_debug
+    (rx1243_cur, rx1243_pos, rx1243_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1243_debug, rx1243_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1243_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1243_eos, rx1243_tgt
+    gt rx1243_pos, rx1243_eos, rx1243_done
+    set rx1243_off, 0
+    lt rx1243_pos, 2, rx1243_start
+    sub rx1243_off, rx1243_pos, 1
+    substr rx1243_tgt, rx1243_tgt, rx1243_off
+  rx1243_start:
+    eq $I10, 1, rx1243_restart
+    if_null rx1243_debug, debug_966
+    rx1243_cur."!cursor_debug"("START", "infix:sym<lt>")
+  debug_966:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1246_done
-    goto rxscan1246_scan
-  rxscan1246_loop:
-    ($P10) = rx1242_cur."from"()
-    inc $P10
-    set rx1242_pos, $P10
-    ge rx1242_pos, rx1242_eos, rxscan1246_done
-  rxscan1246_scan:
-    set_addr $I10, rxscan1246_loop
-    rx1242_cur."!mark_push"(0, rx1242_pos, $I10)
-  rxscan1246_done:
-.annotate 'line', 534
+    ne $I10, -1, rxscan1247_done
+    goto rxscan1247_scan
+  rxscan1247_loop:
+    ($P10) = rx1243_cur."from"()
+    inc $P10
+    set rx1243_pos, $P10
+    ge rx1243_pos, rx1243_eos, rxscan1247_done
+  rxscan1247_scan:
+    set_addr $I10, rxscan1247_loop
+    rx1243_cur."!mark_push"(0, rx1243_pos, $I10)
+  rxscan1247_done:
+.annotate 'line', 536
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1247_fail
-    rx1242_cur."!mark_push"(0, rx1242_pos, $I10)
-  # rx literal  "&&"
-    add $I11, rx1242_pos, 2
-    gt $I11, rx1242_eos, rx1242_fail
-    sub $I11, rx1242_pos, rx1242_off
-    substr $S10, rx1242_tgt, $I11, 2
-    ne $S10, "&&", rx1242_fail
-    add rx1242_pos, 2
-    set_addr $I10, rxcap_1247_fail
-    ($I12, $I11) = rx1242_cur."!mark_peek"($I10)
-    rx1242_cur."!cursor_pos"($I11)
-    ($P10) = rx1242_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1242_pos, "")
-    rx1242_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1248_fail
+    rx1243_cur."!mark_push"(0, rx1243_pos, $I10)
+  # rx literal  "lt"
+    add $I11, rx1243_pos, 2
+    gt $I11, rx1243_eos, rx1243_fail
+    sub $I11, rx1243_pos, rx1243_off
+    substr $S10, rx1243_tgt, $I11, 2
+    ne $S10, "lt", rx1243_fail
+    add rx1243_pos, 2
+    set_addr $I10, rxcap_1248_fail
+    ($I12, $I11) = rx1243_cur."!mark_peek"($I10)
+    rx1243_cur."!cursor_pos"($I11)
+    ($P10) = rx1243_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1243_pos, "")
+    rx1243_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1247_done
-  rxcap_1247_fail:
-    goto rx1242_fail
-  rxcap_1247_done:
+    goto rxcap_1248_done
+  rxcap_1248_fail:
+    goto rx1243_fail
+  rxcap_1248_done:
   # rx subrule "O" subtype=capture negate=
-    rx1242_cur."!cursor_pos"(rx1242_pos)
-    $P10 = rx1242_cur."O"("%tight_and, :pasttype<if>")
-    unless $P10, rx1242_fail
-    rx1242_cur."!mark_push"(0, -1, 0, $P10)
+    rx1243_cur."!cursor_pos"(rx1243_pos)
+    $P10 = rx1243_cur."O"("%relational, :pirop<islt ISs>")
+    unless $P10, rx1243_fail
+    rx1243_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1242_pos = $P10."pos"()
+    rx1243_pos = $P10."pos"()
   # rx pass
-    rx1242_cur."!cursor_pass"(rx1242_pos, "infix:sym<&&>")
-    if_null rx1242_debug, debug_969
-    rx1242_cur."!cursor_debug"("PASS", "infix:sym<&&>", " at pos=", rx1242_pos)
+    rx1243_cur."!cursor_pass"(rx1243_pos, "infix:sym<lt>")
+    if_null rx1243_debug, debug_967
+    rx1243_cur."!cursor_debug"("PASS", "infix:sym<lt>", " at pos=", rx1243_pos)
+  debug_967:
+    .return (rx1243_cur)
+  rx1243_restart:
+.annotate 'line', 454
+    if_null rx1243_debug, debug_968
+    rx1243_cur."!cursor_debug"("NEXT", "infix:sym<lt>")
+  debug_968:
+  rx1243_fail:
+    (rx1243_rep, rx1243_pos, $I10, $P10) = rx1243_cur."!mark_fail"(0)
+    lt rx1243_pos, -1, rx1243_done
+    eq rx1243_pos, -1, rx1243_fail
+    jump $I10
+  rx1243_done:
+    rx1243_cur."!cursor_fail"()
+    if_null rx1243_debug, debug_969
+    rx1243_cur."!cursor_debug"("FAIL", "infix:sym<lt>")
   debug_969:
-    .return (rx1242_cur)
-  rx1242_restart:
-.annotate 'line', 447
-    if_null rx1242_debug, debug_970
-    rx1242_cur."!cursor_debug"("NEXT", "infix:sym<&&>")
-  debug_970:
-  rx1242_fail:
-    (rx1242_rep, rx1242_pos, $I10, $P10) = rx1242_cur."!mark_fail"(0)
-    lt rx1242_pos, -1, rx1242_done
-    eq rx1242_pos, -1, rx1242_fail
-    jump $I10
-  rx1242_done:
-    rx1242_cur."!cursor_fail"()
-    if_null rx1242_debug, debug_971
-    rx1242_cur."!cursor_debug"("FAIL", "infix:sym<&&>")
-  debug_971:
-    .return (rx1242_cur)
+    .return (rx1243_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<&&>"  :subid("323_1282324002.40722") :method
-.annotate 'line', 447
-    $P1244 = self."!PREFIX__!subrule"("O", "&&")
-    new $P1245, "ResizablePMCArray"
-    push $P1245, $P1244
-    .return ($P1245)
+.sub "!PREFIX__infix:sym<lt>"  :subid("321_1284728478.15265") :method
+.annotate 'line', 454
+    $P1245 = self."!PREFIX__!subrule"("O", "lt")
+    new $P1246, "ResizablePMCArray"
+    push $P1246, $P1245
+    .return ($P1246)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<||>"  :subid("324_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1249_tgt
-    .local int rx1249_pos
-    .local int rx1249_off
-    .local int rx1249_eos
-    .local int rx1249_rep
-    .local pmc rx1249_cur
-    .local pmc rx1249_debug
-    (rx1249_cur, rx1249_pos, rx1249_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1249_debug, rx1249_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1249_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1249_eos, rx1249_tgt
-    gt rx1249_pos, rx1249_eos, rx1249_done
-    set rx1249_off, 0
-    lt rx1249_pos, 2, rx1249_start
-    sub rx1249_off, rx1249_pos, 1
-    substr rx1249_tgt, rx1249_tgt, rx1249_off
-  rx1249_start:
-    eq $I10, 1, rx1249_restart
-    if_null rx1249_debug, debug_972
-    rx1249_cur."!cursor_debug"("START", "infix:sym<||>")
-  debug_972:
+.sub "infix:sym<gt>"  :subid("322_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1250_tgt
+    .local int rx1250_pos
+    .local int rx1250_off
+    .local int rx1250_eos
+    .local int rx1250_rep
+    .local pmc rx1250_cur
+    .local pmc rx1250_debug
+    (rx1250_cur, rx1250_pos, rx1250_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1250_debug, rx1250_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1250_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1250_eos, rx1250_tgt
+    gt rx1250_pos, rx1250_eos, rx1250_done
+    set rx1250_off, 0
+    lt rx1250_pos, 2, rx1250_start
+    sub rx1250_off, rx1250_pos, 1
+    substr rx1250_tgt, rx1250_tgt, rx1250_off
+  rx1250_start:
+    eq $I10, 1, rx1250_restart
+    if_null rx1250_debug, debug_970
+    rx1250_cur."!cursor_debug"("START", "infix:sym<gt>")
+  debug_970:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1253_done
-    goto rxscan1253_scan
-  rxscan1253_loop:
-    ($P10) = rx1249_cur."from"()
-    inc $P10
-    set rx1249_pos, $P10
-    ge rx1249_pos, rx1249_eos, rxscan1253_done
-  rxscan1253_scan:
-    set_addr $I10, rxscan1253_loop
-    rx1249_cur."!mark_push"(0, rx1249_pos, $I10)
-  rxscan1253_done:
-.annotate 'line', 536
+    ne $I10, -1, rxscan1254_done
+    goto rxscan1254_scan
+  rxscan1254_loop:
+    ($P10) = rx1250_cur."from"()
+    inc $P10
+    set rx1250_pos, $P10
+    ge rx1250_pos, rx1250_eos, rxscan1254_done
+  rxscan1254_scan:
+    set_addr $I10, rxscan1254_loop
+    rx1250_cur."!mark_push"(0, rx1250_pos, $I10)
+  rxscan1254_done:
+.annotate 'line', 537
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1254_fail
-    rx1249_cur."!mark_push"(0, rx1249_pos, $I10)
-  # rx literal  "||"
-    add $I11, rx1249_pos, 2
-    gt $I11, rx1249_eos, rx1249_fail
-    sub $I11, rx1249_pos, rx1249_off
-    substr $S10, rx1249_tgt, $I11, 2
-    ne $S10, "||", rx1249_fail
-    add rx1249_pos, 2
-    set_addr $I10, rxcap_1254_fail
-    ($I12, $I11) = rx1249_cur."!mark_peek"($I10)
-    rx1249_cur."!cursor_pos"($I11)
-    ($P10) = rx1249_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1249_pos, "")
-    rx1249_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1255_fail
+    rx1250_cur."!mark_push"(0, rx1250_pos, $I10)
+  # rx literal  "gt"
+    add $I11, rx1250_pos, 2
+    gt $I11, rx1250_eos, rx1250_fail
+    sub $I11, rx1250_pos, rx1250_off
+    substr $S10, rx1250_tgt, $I11, 2
+    ne $S10, "gt", rx1250_fail
+    add rx1250_pos, 2
+    set_addr $I10, rxcap_1255_fail
+    ($I12, $I11) = rx1250_cur."!mark_peek"($I10)
+    rx1250_cur."!cursor_pos"($I11)
+    ($P10) = rx1250_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1250_pos, "")
+    rx1250_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1254_done
-  rxcap_1254_fail:
-    goto rx1249_fail
-  rxcap_1254_done:
+    goto rxcap_1255_done
+  rxcap_1255_fail:
+    goto rx1250_fail
+  rxcap_1255_done:
   # rx subrule "O" subtype=capture negate=
-    rx1249_cur."!cursor_pos"(rx1249_pos)
-    $P10 = rx1249_cur."O"("%tight_or, :pasttype<unless>")
-    unless $P10, rx1249_fail
-    rx1249_cur."!mark_push"(0, -1, 0, $P10)
+    rx1250_cur."!cursor_pos"(rx1250_pos)
+    $P10 = rx1250_cur."O"("%relational, :pirop<isgt ISs>")
+    unless $P10, rx1250_fail
+    rx1250_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1249_pos = $P10."pos"()
+    rx1250_pos = $P10."pos"()
   # rx pass
-    rx1249_cur."!cursor_pass"(rx1249_pos, "infix:sym<||>")
-    if_null rx1249_debug, debug_973
-    rx1249_cur."!cursor_debug"("PASS", "infix:sym<||>", " at pos=", rx1249_pos)
+    rx1250_cur."!cursor_pass"(rx1250_pos, "infix:sym<gt>")
+    if_null rx1250_debug, debug_971
+    rx1250_cur."!cursor_debug"("PASS", "infix:sym<gt>", " at pos=", rx1250_pos)
+  debug_971:
+    .return (rx1250_cur)
+  rx1250_restart:
+.annotate 'line', 454
+    if_null rx1250_debug, debug_972
+    rx1250_cur."!cursor_debug"("NEXT", "infix:sym<gt>")
+  debug_972:
+  rx1250_fail:
+    (rx1250_rep, rx1250_pos, $I10, $P10) = rx1250_cur."!mark_fail"(0)
+    lt rx1250_pos, -1, rx1250_done
+    eq rx1250_pos, -1, rx1250_fail
+    jump $I10
+  rx1250_done:
+    rx1250_cur."!cursor_fail"()
+    if_null rx1250_debug, debug_973
+    rx1250_cur."!cursor_debug"("FAIL", "infix:sym<gt>")
   debug_973:
-    .return (rx1249_cur)
-  rx1249_restart:
-.annotate 'line', 447
-    if_null rx1249_debug, debug_974
-    rx1249_cur."!cursor_debug"("NEXT", "infix:sym<||>")
-  debug_974:
-  rx1249_fail:
-    (rx1249_rep, rx1249_pos, $I10, $P10) = rx1249_cur."!mark_fail"(0)
-    lt rx1249_pos, -1, rx1249_done
-    eq rx1249_pos, -1, rx1249_fail
-    jump $I10
-  rx1249_done:
-    rx1249_cur."!cursor_fail"()
-    if_null rx1249_debug, debug_975
-    rx1249_cur."!cursor_debug"("FAIL", "infix:sym<||>")
-  debug_975:
-    .return (rx1249_cur)
+    .return (rx1250_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<||>"  :subid("325_1282324002.40722") :method
-.annotate 'line', 447
-    $P1251 = self."!PREFIX__!subrule"("O", "||")
-    new $P1252, "ResizablePMCArray"
-    push $P1252, $P1251
-    .return ($P1252)
+.sub "!PREFIX__infix:sym<gt>"  :subid("323_1284728478.15265") :method
+.annotate 'line', 454
+    $P1252 = self."!PREFIX__!subrule"("O", "gt")
+    new $P1253, "ResizablePMCArray"
+    push $P1253, $P1252
+    .return ($P1253)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<//>"  :subid("326_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1256_tgt
-    .local int rx1256_pos
-    .local int rx1256_off
-    .local int rx1256_eos
-    .local int rx1256_rep
-    .local pmc rx1256_cur
-    .local pmc rx1256_debug
-    (rx1256_cur, rx1256_pos, rx1256_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1256_debug, rx1256_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1256_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1256_eos, rx1256_tgt
-    gt rx1256_pos, rx1256_eos, rx1256_done
-    set rx1256_off, 0
-    lt rx1256_pos, 2, rx1256_start
-    sub rx1256_off, rx1256_pos, 1
-    substr rx1256_tgt, rx1256_tgt, rx1256_off
-  rx1256_start:
-    eq $I10, 1, rx1256_restart
-    if_null rx1256_debug, debug_976
-    rx1256_cur."!cursor_debug"("START", "infix:sym<//>")
-  debug_976:
+.sub "infix:sym<=:=>"  :subid("324_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1257_tgt
+    .local int rx1257_pos
+    .local int rx1257_off
+    .local int rx1257_eos
+    .local int rx1257_rep
+    .local pmc rx1257_cur
+    .local pmc rx1257_debug
+    (rx1257_cur, rx1257_pos, rx1257_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1257_debug, rx1257_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1257_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1257_eos, rx1257_tgt
+    gt rx1257_pos, rx1257_eos, rx1257_done
+    set rx1257_off, 0
+    lt rx1257_pos, 2, rx1257_start
+    sub rx1257_off, rx1257_pos, 1
+    substr rx1257_tgt, rx1257_tgt, rx1257_off
+  rx1257_start:
+    eq $I10, 1, rx1257_restart
+    if_null rx1257_debug, debug_974
+    rx1257_cur."!cursor_debug"("START", "infix:sym<=:=>")
+  debug_974:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1260_done
-    goto rxscan1260_scan
-  rxscan1260_loop:
-    ($P10) = rx1256_cur."from"()
-    inc $P10
-    set rx1256_pos, $P10
-    ge rx1256_pos, rx1256_eos, rxscan1260_done
-  rxscan1260_scan:
-    set_addr $I10, rxscan1260_loop
-    rx1256_cur."!mark_push"(0, rx1256_pos, $I10)
-  rxscan1260_done:
-.annotate 'line', 537
+    ne $I10, -1, rxscan1261_done
+    goto rxscan1261_scan
+  rxscan1261_loop:
+    ($P10) = rx1257_cur."from"()
+    inc $P10
+    set rx1257_pos, $P10
+    ge rx1257_pos, rx1257_eos, rxscan1261_done
+  rxscan1261_scan:
+    set_addr $I10, rxscan1261_loop
+    rx1257_cur."!mark_push"(0, rx1257_pos, $I10)
+  rxscan1261_done:
+.annotate 'line', 538
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1261_fail
-    rx1256_cur."!mark_push"(0, rx1256_pos, $I10)
-  # rx literal  "//"
-    add $I11, rx1256_pos, 2
-    gt $I11, rx1256_eos, rx1256_fail
-    sub $I11, rx1256_pos, rx1256_off
-    substr $S10, rx1256_tgt, $I11, 2
-    ne $S10, "//", rx1256_fail
-    add rx1256_pos, 2
-    set_addr $I10, rxcap_1261_fail
-    ($I12, $I11) = rx1256_cur."!mark_peek"($I10)
-    rx1256_cur."!cursor_pos"($I11)
-    ($P10) = rx1256_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1256_pos, "")
-    rx1256_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1262_fail
+    rx1257_cur."!mark_push"(0, rx1257_pos, $I10)
+  # rx literal  "=:="
+    add $I11, rx1257_pos, 3
+    gt $I11, rx1257_eos, rx1257_fail
+    sub $I11, rx1257_pos, rx1257_off
+    substr $S10, rx1257_tgt, $I11, 3
+    ne $S10, "=:=", rx1257_fail
+    add rx1257_pos, 3
+    set_addr $I10, rxcap_1262_fail
+    ($I12, $I11) = rx1257_cur."!mark_peek"($I10)
+    rx1257_cur."!cursor_pos"($I11)
+    ($P10) = rx1257_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1257_pos, "")
+    rx1257_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1261_done
-  rxcap_1261_fail:
-    goto rx1256_fail
-  rxcap_1261_done:
+    goto rxcap_1262_done
+  rxcap_1262_fail:
+    goto rx1257_fail
+  rxcap_1262_done:
   # rx subrule "O" subtype=capture negate=
-    rx1256_cur."!cursor_pos"(rx1256_pos)
-    $P10 = rx1256_cur."O"("%tight_or, :pasttype<def_or>")
-    unless $P10, rx1256_fail
-    rx1256_cur."!mark_push"(0, -1, 0, $P10)
+    rx1257_cur."!cursor_pos"(rx1257_pos)
+    $P10 = rx1257_cur."O"("%relational, :pirop<issame>")
+    unless $P10, rx1257_fail
+    rx1257_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1256_pos = $P10."pos"()
+    rx1257_pos = $P10."pos"()
   # rx pass
-    rx1256_cur."!cursor_pass"(rx1256_pos, "infix:sym<//>")
-    if_null rx1256_debug, debug_977
-    rx1256_cur."!cursor_debug"("PASS", "infix:sym<//>", " at pos=", rx1256_pos)
+    rx1257_cur."!cursor_pass"(rx1257_pos, "infix:sym<=:=>")
+    if_null rx1257_debug, debug_975
+    rx1257_cur."!cursor_debug"("PASS", "infix:sym<=:=>", " at pos=", rx1257_pos)
+  debug_975:
+    .return (rx1257_cur)
+  rx1257_restart:
+.annotate 'line', 454
+    if_null rx1257_debug, debug_976
+    rx1257_cur."!cursor_debug"("NEXT", "infix:sym<=:=>")
+  debug_976:
+  rx1257_fail:
+    (rx1257_rep, rx1257_pos, $I10, $P10) = rx1257_cur."!mark_fail"(0)
+    lt rx1257_pos, -1, rx1257_done
+    eq rx1257_pos, -1, rx1257_fail
+    jump $I10
+  rx1257_done:
+    rx1257_cur."!cursor_fail"()
+    if_null rx1257_debug, debug_977
+    rx1257_cur."!cursor_debug"("FAIL", "infix:sym<=:=>")
   debug_977:
-    .return (rx1256_cur)
-  rx1256_restart:
-.annotate 'line', 447
-    if_null rx1256_debug, debug_978
-    rx1256_cur."!cursor_debug"("NEXT", "infix:sym<//>")
-  debug_978:
-  rx1256_fail:
-    (rx1256_rep, rx1256_pos, $I10, $P10) = rx1256_cur."!mark_fail"(0)
-    lt rx1256_pos, -1, rx1256_done
-    eq rx1256_pos, -1, rx1256_fail
-    jump $I10
-  rx1256_done:
-    rx1256_cur."!cursor_fail"()
-    if_null rx1256_debug, debug_979
-    rx1256_cur."!cursor_debug"("FAIL", "infix:sym<//>")
-  debug_979:
-    .return (rx1256_cur)
+    .return (rx1257_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<//>"  :subid("327_1282324002.40722") :method
-.annotate 'line', 447
-    $P1258 = self."!PREFIX__!subrule"("O", "//")
-    new $P1259, "ResizablePMCArray"
-    push $P1259, $P1258
-    .return ($P1259)
+.sub "!PREFIX__infix:sym<=:=>"  :subid("325_1284728478.15265") :method
+.annotate 'line', 454
+    $P1259 = self."!PREFIX__!subrule"("O", "=:=")
+    new $P1260, "ResizablePMCArray"
+    push $P1260, $P1259
+    .return ($P1260)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<?? !!>"  :subid("328_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1263_tgt
-    .local int rx1263_pos
-    .local int rx1263_off
-    .local int rx1263_eos
-    .local int rx1263_rep
-    .local pmc rx1263_cur
-    .local pmc rx1263_debug
-    (rx1263_cur, rx1263_pos, rx1263_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1263_debug, rx1263_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1263_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1263_eos, rx1263_tgt
-    gt rx1263_pos, rx1263_eos, rx1263_done
-    set rx1263_off, 0
-    lt rx1263_pos, 2, rx1263_start
-    sub rx1263_off, rx1263_pos, 1
-    substr rx1263_tgt, rx1263_tgt, rx1263_off
-  rx1263_start:
-    eq $I10, 1, rx1263_restart
-    if_null rx1263_debug, debug_980
-    rx1263_cur."!cursor_debug"("START", "infix:sym<?? !!>")
-  debug_980:
+.sub "infix:sym<~~>"  :subid("326_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1264_tgt
+    .local int rx1264_pos
+    .local int rx1264_off
+    .local int rx1264_eos
+    .local int rx1264_rep
+    .local pmc rx1264_cur
+    .local pmc rx1264_debug
+    (rx1264_cur, rx1264_pos, rx1264_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1264_debug, rx1264_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1264_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1264_eos, rx1264_tgt
+    gt rx1264_pos, rx1264_eos, rx1264_done
+    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:
+    eq $I10, 1, rx1264_restart
+    if_null rx1264_debug, debug_978
+    rx1264_cur."!cursor_debug"("START", "infix:sym<~~>")
+  debug_978:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1267_done
-    goto rxscan1267_scan
-  rxscan1267_loop:
-    ($P10) = rx1263_cur."from"()
-    inc $P10
-    set rx1263_pos, $P10
-    ge rx1263_pos, rx1263_eos, rxscan1267_done
-  rxscan1267_scan:
-    set_addr $I10, rxscan1267_loop
-    rx1263_cur."!mark_push"(0, rx1263_pos, $I10)
-  rxscan1267_done:
-.annotate 'line', 540
-  # rx literal  "??"
-    add $I11, rx1263_pos, 2
-    gt $I11, rx1263_eos, rx1263_fail
-    sub $I11, rx1263_pos, rx1263_off
-    substr $S10, rx1263_tgt, $I11, 2
-    ne $S10, "??", rx1263_fail
-    add rx1263_pos, 2
-.annotate 'line', 541
-  # rx subrule "ws" subtype=method negate=
-    rx1263_cur."!cursor_pos"(rx1263_pos)
-    $P10 = rx1263_cur."ws"()
-    unless $P10, rx1263_fail
-    rx1263_pos = $P10."pos"()
-.annotate 'line', 542
-  # rx subrule "EXPR" subtype=capture negate=
-    rx1263_cur."!cursor_pos"(rx1263_pos)
-    $P10 = rx1263_cur."EXPR"("i=")
-    unless $P10, rx1263_fail
-    rx1263_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("EXPR")
-    rx1263_pos = $P10."pos"()
-.annotate 'line', 543
-  # rx literal  "!!"
-    add $I11, rx1263_pos, 2
-    gt $I11, rx1263_eos, rx1263_fail
-    sub $I11, rx1263_pos, rx1263_off
-    substr $S10, rx1263_tgt, $I11, 2
-    ne $S10, "!!", rx1263_fail
-    add rx1263_pos, 2
-.annotate 'line', 544
+    ne $I10, -1, rxscan1268_done
+    goto rxscan1268_scan
+  rxscan1268_loop:
+    ($P10) = rx1264_cur."from"()
+    inc $P10
+    set rx1264_pos, $P10
+    ge rx1264_pos, rx1264_eos, rxscan1268_done
+  rxscan1268_scan:
+    set_addr $I10, rxscan1268_loop
+    rx1264_cur."!mark_push"(0, rx1264_pos, $I10)
+  rxscan1268_done:
+.annotate 'line', 539
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_1269_fail
+    rx1264_cur."!mark_push"(0, rx1264_pos, $I10)
+  # rx literal  "~~"
+    add $I11, rx1264_pos, 2
+    gt $I11, rx1264_eos, rx1264_fail
+    sub $I11, rx1264_pos, rx1264_off
+    substr $S10, rx1264_tgt, $I11, 2
+    ne $S10, "~~", rx1264_fail
+    add rx1264_pos, 2
+    set_addr $I10, rxcap_1269_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"("sym")
+    goto rxcap_1269_done
+  rxcap_1269_fail:
+    goto rx1264_fail
+  rxcap_1269_done:
   # rx subrule "O" subtype=capture negate=
-    rx1263_cur."!cursor_pos"(rx1263_pos)
-    $P10 = rx1263_cur."O"("%conditional, :reducecheck<ternary>, :pasttype<if>")
-    unless $P10, rx1263_fail
-    rx1263_cur."!mark_push"(0, -1, 0, $P10)
+    rx1264_cur."!cursor_pos"(rx1264_pos)
+    $P10 = rx1264_cur."O"("%relational, :reducecheck<smartmatch>")
+    unless $P10, rx1264_fail
+    rx1264_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1263_pos = $P10."pos"()
-.annotate 'line', 539
+    rx1264_pos = $P10."pos"()
   # rx pass
-    rx1263_cur."!cursor_pass"(rx1263_pos, "infix:sym<?? !!>")
-    if_null rx1263_debug, debug_981
-    rx1263_cur."!cursor_debug"("PASS", "infix:sym<?? !!>", " at pos=", rx1263_pos)
+    rx1264_cur."!cursor_pass"(rx1264_pos, "infix:sym<~~>")
+    if_null rx1264_debug, debug_979
+    rx1264_cur."!cursor_debug"("PASS", "infix:sym<~~>", " at pos=", rx1264_pos)
+  debug_979:
+    .return (rx1264_cur)
+  rx1264_restart:
+.annotate 'line', 454
+    if_null rx1264_debug, debug_980
+    rx1264_cur."!cursor_debug"("NEXT", "infix:sym<~~>")
+  debug_980:
+  rx1264_fail:
+    (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"()
+    if_null rx1264_debug, debug_981
+    rx1264_cur."!cursor_debug"("FAIL", "infix:sym<~~>")
   debug_981:
-    .return (rx1263_cur)
-  rx1263_restart:
-.annotate 'line', 447
-    if_null rx1263_debug, debug_982
-    rx1263_cur."!cursor_debug"("NEXT", "infix:sym<?? !!>")
-  debug_982:
-  rx1263_fail:
-    (rx1263_rep, rx1263_pos, $I10, $P10) = rx1263_cur."!mark_fail"(0)
-    lt rx1263_pos, -1, rx1263_done
-    eq rx1263_pos, -1, rx1263_fail
-    jump $I10
-  rx1263_done:
-    rx1263_cur."!cursor_fail"()
-    if_null rx1263_debug, debug_983
-    rx1263_cur."!cursor_debug"("FAIL", "infix:sym<?? !!>")
-  debug_983:
-    .return (rx1263_cur)
+    .return (rx1264_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<?? !!>"  :subid("329_1282324002.40722") :method
-.annotate 'line', 447
-    $P1265 = self."!PREFIX__!subrule"("ws", "??")
-    new $P1266, "ResizablePMCArray"
-    push $P1266, $P1265
-    .return ($P1266)
+.sub "!PREFIX__infix:sym<~~>"  :subid("327_1284728478.15265") :method
+.annotate 'line', 454
+    $P1266 = self."!PREFIX__!subrule"("O", "~~")
+    new $P1267, "ResizablePMCArray"
+    push $P1267, $P1266
+    .return ($P1267)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<=>"  :subid("330_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1269_tgt
-    .local int rx1269_pos
-    .local int rx1269_off
-    .local int rx1269_eos
-    .local int rx1269_rep
-    .local pmc rx1269_cur
-    .local pmc rx1269_debug
-    (rx1269_cur, rx1269_pos, rx1269_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1269_debug, rx1269_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1269_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1269_eos, rx1269_tgt
-    gt rx1269_pos, rx1269_eos, rx1269_done
-    set rx1269_off, 0
-    lt rx1269_pos, 2, rx1269_start
-    sub rx1269_off, rx1269_pos, 1
-    substr rx1269_tgt, rx1269_tgt, rx1269_off
-  rx1269_start:
-    eq $I10, 1, rx1269_restart
-    if_null rx1269_debug, debug_984
-    rx1269_cur."!cursor_debug"("START", "infix:sym<=>")
-  debug_984:
+.sub "infix:sym<&&>"  :subid("328_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1271_tgt
+    .local int rx1271_pos
+    .local int rx1271_off
+    .local int rx1271_eos
+    .local int rx1271_rep
+    .local pmc rx1271_cur
+    .local pmc rx1271_debug
+    (rx1271_cur, rx1271_pos, rx1271_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1271_debug, rx1271_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1271_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1271_eos, rx1271_tgt
+    gt rx1271_pos, rx1271_eos, rx1271_done
+    set rx1271_off, 0
+    lt rx1271_pos, 2, rx1271_start
+    sub rx1271_off, rx1271_pos, 1
+    substr rx1271_tgt, rx1271_tgt, rx1271_off
+  rx1271_start:
+    eq $I10, 1, rx1271_restart
+    if_null rx1271_debug, debug_982
+    rx1271_cur."!cursor_debug"("START", "infix:sym<&&>")
+  debug_982:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1273_done
-    goto rxscan1273_scan
-  rxscan1273_loop:
-    ($P10) = rx1269_cur."from"()
-    inc $P10
-    set rx1269_pos, $P10
-    ge rx1269_pos, rx1269_eos, rxscan1273_done
-  rxscan1273_scan:
-    set_addr $I10, rxscan1273_loop
-    rx1269_cur."!mark_push"(0, rx1269_pos, $I10)
-  rxscan1273_done:
-.annotate 'line', 548
+    ne $I10, -1, rxscan1275_done
+    goto rxscan1275_scan
+  rxscan1275_loop:
+    ($P10) = rx1271_cur."from"()
+    inc $P10
+    set rx1271_pos, $P10
+    ge rx1271_pos, rx1271_eos, rxscan1275_done
+  rxscan1275_scan:
+    set_addr $I10, rxscan1275_loop
+    rx1271_cur."!mark_push"(0, rx1271_pos, $I10)
+  rxscan1275_done:
+.annotate 'line', 541
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1274_fail
-    rx1269_cur."!mark_push"(0, rx1269_pos, $I10)
-  # rx literal  "="
-    add $I11, rx1269_pos, 1
-    gt $I11, rx1269_eos, rx1269_fail
-    sub $I11, rx1269_pos, rx1269_off
-    ord $I11, rx1269_tgt, $I11
-    ne $I11, 61, rx1269_fail
-    add rx1269_pos, 1
-    set_addr $I10, rxcap_1274_fail
-    ($I12, $I11) = rx1269_cur."!mark_peek"($I10)
-    rx1269_cur."!cursor_pos"($I11)
-    ($P10) = rx1269_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1269_pos, "")
-    rx1269_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1276_fail
+    rx1271_cur."!mark_push"(0, rx1271_pos, $I10)
+  # rx literal  "&&"
+    add $I11, rx1271_pos, 2
+    gt $I11, rx1271_eos, rx1271_fail
+    sub $I11, rx1271_pos, rx1271_off
+    substr $S10, rx1271_tgt, $I11, 2
+    ne $S10, "&&", rx1271_fail
+    add rx1271_pos, 2
+    set_addr $I10, rxcap_1276_fail
+    ($I12, $I11) = rx1271_cur."!mark_peek"($I10)
+    rx1271_cur."!cursor_pos"($I11)
+    ($P10) = rx1271_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1271_pos, "")
+    rx1271_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1274_done
-  rxcap_1274_fail:
-    goto rx1269_fail
-  rxcap_1274_done:
-  # rx subrule "panic" subtype=method negate=
-    rx1269_cur."!cursor_pos"(rx1269_pos)
-    $P10 = rx1269_cur."panic"("Assignment (\"=\") not supported in NQP, use \":=\" instead")
-    unless $P10, rx1269_fail
-    rx1269_pos = $P10."pos"()
-.annotate 'line', 547
+    goto rxcap_1276_done
+  rxcap_1276_fail:
+    goto rx1271_fail
+  rxcap_1276_done:
+  # rx subrule "O" subtype=capture negate=
+    rx1271_cur."!cursor_pos"(rx1271_pos)
+    $P10 = rx1271_cur."O"("%tight_and, :pasttype<if>")
+    unless $P10, rx1271_fail
+    rx1271_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("O")
+    rx1271_pos = $P10."pos"()
   # rx pass
-    rx1269_cur."!cursor_pass"(rx1269_pos, "infix:sym<=>")
-    if_null rx1269_debug, debug_985
-    rx1269_cur."!cursor_debug"("PASS", "infix:sym<=>", " at pos=", rx1269_pos)
+    rx1271_cur."!cursor_pass"(rx1271_pos, "infix:sym<&&>")
+    if_null rx1271_debug, debug_983
+    rx1271_cur."!cursor_debug"("PASS", "infix:sym<&&>", " at pos=", rx1271_pos)
+  debug_983:
+    .return (rx1271_cur)
+  rx1271_restart:
+.annotate 'line', 454
+    if_null rx1271_debug, debug_984
+    rx1271_cur."!cursor_debug"("NEXT", "infix:sym<&&>")
+  debug_984:
+  rx1271_fail:
+    (rx1271_rep, rx1271_pos, $I10, $P10) = rx1271_cur."!mark_fail"(0)
+    lt rx1271_pos, -1, rx1271_done
+    eq rx1271_pos, -1, rx1271_fail
+    jump $I10
+  rx1271_done:
+    rx1271_cur."!cursor_fail"()
+    if_null rx1271_debug, debug_985
+    rx1271_cur."!cursor_debug"("FAIL", "infix:sym<&&>")
   debug_985:
-    .return (rx1269_cur)
-  rx1269_restart:
-.annotate 'line', 447
-    if_null rx1269_debug, debug_986
-    rx1269_cur."!cursor_debug"("NEXT", "infix:sym<=>")
-  debug_986:
-  rx1269_fail:
-    (rx1269_rep, rx1269_pos, $I10, $P10) = rx1269_cur."!mark_fail"(0)
-    lt rx1269_pos, -1, rx1269_done
-    eq rx1269_pos, -1, rx1269_fail
-    jump $I10
-  rx1269_done:
-    rx1269_cur."!cursor_fail"()
-    if_null rx1269_debug, debug_987
-    rx1269_cur."!cursor_debug"("FAIL", "infix:sym<=>")
-  debug_987:
-    .return (rx1269_cur)
+    .return (rx1271_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<=>"  :subid("331_1282324002.40722") :method
-.annotate 'line', 447
-    $P1271 = self."!PREFIX__!subrule"("panic", "=")
-    new $P1272, "ResizablePMCArray"
-    push $P1272, $P1271
-    .return ($P1272)
+.sub "!PREFIX__infix:sym<&&>"  :subid("329_1284728478.15265") :method
+.annotate 'line', 454
+    $P1273 = self."!PREFIX__!subrule"("O", "&&")
+    new $P1274, "ResizablePMCArray"
+    push $P1274, $P1273
+    .return ($P1274)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<:=>"  :subid("332_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1276_tgt
-    .local int rx1276_pos
-    .local int rx1276_off
-    .local int rx1276_eos
-    .local int rx1276_rep
-    .local pmc rx1276_cur
-    .local pmc rx1276_debug
-    (rx1276_cur, rx1276_pos, rx1276_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1276_debug, rx1276_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1276_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1276_eos, rx1276_tgt
-    gt rx1276_pos, rx1276_eos, rx1276_done
-    set rx1276_off, 0
-    lt rx1276_pos, 2, rx1276_start
-    sub rx1276_off, rx1276_pos, 1
-    substr rx1276_tgt, rx1276_tgt, rx1276_off
-  rx1276_start:
-    eq $I10, 1, rx1276_restart
-    if_null rx1276_debug, debug_988
-    rx1276_cur."!cursor_debug"("START", "infix:sym<:=>")
-  debug_988:
+.sub "infix:sym<||>"  :subid("330_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1278_tgt
+    .local int rx1278_pos
+    .local int rx1278_off
+    .local int rx1278_eos
+    .local int rx1278_rep
+    .local pmc rx1278_cur
+    .local pmc rx1278_debug
+    (rx1278_cur, rx1278_pos, rx1278_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1278_debug, rx1278_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1278_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1278_eos, rx1278_tgt
+    gt rx1278_pos, rx1278_eos, rx1278_done
+    set rx1278_off, 0
+    lt rx1278_pos, 2, rx1278_start
+    sub rx1278_off, rx1278_pos, 1
+    substr rx1278_tgt, rx1278_tgt, rx1278_off
+  rx1278_start:
+    eq $I10, 1, rx1278_restart
+    if_null rx1278_debug, debug_986
+    rx1278_cur."!cursor_debug"("START", "infix:sym<||>")
+  debug_986:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1280_done
-    goto rxscan1280_scan
-  rxscan1280_loop:
-    ($P10) = rx1276_cur."from"()
-    inc $P10
-    set rx1276_pos, $P10
-    ge rx1276_pos, rx1276_eos, rxscan1280_done
-  rxscan1280_scan:
-    set_addr $I10, rxscan1280_loop
-    rx1276_cur."!mark_push"(0, rx1276_pos, $I10)
-  rxscan1280_done:
-.annotate 'line', 550
+    ne $I10, -1, rxscan1282_done
+    goto rxscan1282_scan
+  rxscan1282_loop:
+    ($P10) = rx1278_cur."from"()
+    inc $P10
+    set rx1278_pos, $P10
+    ge rx1278_pos, rx1278_eos, rxscan1282_done
+  rxscan1282_scan:
+    set_addr $I10, rxscan1282_loop
+    rx1278_cur."!mark_push"(0, rx1278_pos, $I10)
+  rxscan1282_done:
+.annotate 'line', 543
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1281_fail
-    rx1276_cur."!mark_push"(0, rx1276_pos, $I10)
-  # rx literal  ":="
-    add $I11, rx1276_pos, 2
-    gt $I11, rx1276_eos, rx1276_fail
-    sub $I11, rx1276_pos, rx1276_off
-    substr $S10, rx1276_tgt, $I11, 2
-    ne $S10, ":=", rx1276_fail
-    add rx1276_pos, 2
-    set_addr $I10, rxcap_1281_fail
-    ($I12, $I11) = rx1276_cur."!mark_peek"($I10)
-    rx1276_cur."!cursor_pos"($I11)
-    ($P10) = rx1276_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1276_pos, "")
-    rx1276_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_1283_fail
+    rx1278_cur."!mark_push"(0, rx1278_pos, $I10)
+  # rx literal  "||"
+    add $I11, rx1278_pos, 2
+    gt $I11, rx1278_eos, rx1278_fail
+    sub $I11, rx1278_pos, rx1278_off
+    substr $S10, rx1278_tgt, $I11, 2
+    ne $S10, "||", rx1278_fail
+    add rx1278_pos, 2
+    set_addr $I10, rxcap_1283_fail
+    ($I12, $I11) = rx1278_cur."!mark_peek"($I10)
+    rx1278_cur."!cursor_pos"($I11)
+    ($P10) = rx1278_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1278_pos, "")
+    rx1278_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1281_done
-  rxcap_1281_fail:
-    goto rx1276_fail
-  rxcap_1281_done:
+    goto rxcap_1283_done
+  rxcap_1283_fail:
+    goto rx1278_fail
+  rxcap_1283_done:
   # rx subrule "O" subtype=capture negate=
-    rx1276_cur."!cursor_pos"(rx1276_pos)
-    $P10 = rx1276_cur."O"("%assignment, :pasttype<bind>")
-    unless $P10, rx1276_fail
-    rx1276_cur."!mark_push"(0, -1, 0, $P10)
+    rx1278_cur."!cursor_pos"(rx1278_pos)
+    $P10 = rx1278_cur."O"("%tight_or, :pasttype<unless>")
+    unless $P10, rx1278_fail
+    rx1278_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1276_pos = $P10."pos"()
+    rx1278_pos = $P10."pos"()
   # rx pass
-    rx1276_cur."!cursor_pass"(rx1276_pos, "infix:sym<:=>")
-    if_null rx1276_debug, debug_989
-    rx1276_cur."!cursor_debug"("PASS", "infix:sym<:=>", " at pos=", rx1276_pos)
+    rx1278_cur."!cursor_pass"(rx1278_pos, "infix:sym<||>")
+    if_null rx1278_debug, debug_987
+    rx1278_cur."!cursor_debug"("PASS", "infix:sym<||>", " at pos=", rx1278_pos)
+  debug_987:
+    .return (rx1278_cur)
+  rx1278_restart:
+.annotate 'line', 454
+    if_null rx1278_debug, debug_988
+    rx1278_cur."!cursor_debug"("NEXT", "infix:sym<||>")
+  debug_988:
+  rx1278_fail:
+    (rx1278_rep, rx1278_pos, $I10, $P10) = rx1278_cur."!mark_fail"(0)
+    lt rx1278_pos, -1, rx1278_done
+    eq rx1278_pos, -1, rx1278_fail
+    jump $I10
+  rx1278_done:
+    rx1278_cur."!cursor_fail"()
+    if_null rx1278_debug, debug_989
+    rx1278_cur."!cursor_debug"("FAIL", "infix:sym<||>")
   debug_989:
-    .return (rx1276_cur)
-  rx1276_restart:
-.annotate 'line', 447
-    if_null rx1276_debug, debug_990
-    rx1276_cur."!cursor_debug"("NEXT", "infix:sym<:=>")
+    .return (rx1278_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__infix:sym<||>"  :subid("331_1284728478.15265") :method
+.annotate 'line', 454
+    $P1280 = self."!PREFIX__!subrule"("O", "||")
+    new $P1281, "ResizablePMCArray"
+    push $P1281, $P1280
+    .return ($P1281)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "infix:sym<//>"  :subid("332_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1285_tgt
+    .local int rx1285_pos
+    .local int rx1285_off
+    .local int rx1285_eos
+    .local int rx1285_rep
+    .local pmc rx1285_cur
+    .local pmc rx1285_debug
+    (rx1285_cur, rx1285_pos, rx1285_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1285_debug, rx1285_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1285_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1285_eos, rx1285_tgt
+    gt rx1285_pos, rx1285_eos, rx1285_done
+    set rx1285_off, 0
+    lt rx1285_pos, 2, rx1285_start
+    sub rx1285_off, rx1285_pos, 1
+    substr rx1285_tgt, rx1285_tgt, rx1285_off
+  rx1285_start:
+    eq $I10, 1, rx1285_restart
+    if_null rx1285_debug, debug_990
+    rx1285_cur."!cursor_debug"("START", "infix:sym<//>")
   debug_990:
-  rx1276_fail:
-    (rx1276_rep, rx1276_pos, $I10, $P10) = rx1276_cur."!mark_fail"(0)
-    lt rx1276_pos, -1, rx1276_done
-    eq rx1276_pos, -1, rx1276_fail
-    jump $I10
-  rx1276_done:
-    rx1276_cur."!cursor_fail"()
-    if_null rx1276_debug, debug_991
-    rx1276_cur."!cursor_debug"("FAIL", "infix:sym<:=>")
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1289_done
+    goto rxscan1289_scan
+  rxscan1289_loop:
+    ($P10) = rx1285_cur."from"()
+    inc $P10
+    set rx1285_pos, $P10
+    ge rx1285_pos, rx1285_eos, rxscan1289_done
+  rxscan1289_scan:
+    set_addr $I10, rxscan1289_loop
+    rx1285_cur."!mark_push"(0, rx1285_pos, $I10)
+  rxscan1289_done:
+.annotate 'line', 544
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_1290_fail
+    rx1285_cur."!mark_push"(0, rx1285_pos, $I10)
+  # rx literal  "//"
+    add $I11, rx1285_pos, 2
+    gt $I11, rx1285_eos, rx1285_fail
+    sub $I11, rx1285_pos, rx1285_off
+    substr $S10, rx1285_tgt, $I11, 2
+    ne $S10, "//", rx1285_fail
+    add rx1285_pos, 2
+    set_addr $I10, rxcap_1290_fail
+    ($I12, $I11) = rx1285_cur."!mark_peek"($I10)
+    rx1285_cur."!cursor_pos"($I11)
+    ($P10) = rx1285_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1285_pos, "")
+    rx1285_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_1290_done
+  rxcap_1290_fail:
+    goto rx1285_fail
+  rxcap_1290_done:
+  # rx subrule "O" subtype=capture negate=
+    rx1285_cur."!cursor_pos"(rx1285_pos)
+    $P10 = rx1285_cur."O"("%tight_or, :pasttype<def_or>")
+    unless $P10, rx1285_fail
+    rx1285_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("O")
+    rx1285_pos = $P10."pos"()
+  # rx pass
+    rx1285_cur."!cursor_pass"(rx1285_pos, "infix:sym<//>")
+    if_null rx1285_debug, debug_991
+    rx1285_cur."!cursor_debug"("PASS", "infix:sym<//>", " at pos=", rx1285_pos)
   debug_991:
-    .return (rx1276_cur)
+    .return (rx1285_cur)
+  rx1285_restart:
+.annotate 'line', 454
+    if_null rx1285_debug, debug_992
+    rx1285_cur."!cursor_debug"("NEXT", "infix:sym<//>")
+  debug_992:
+  rx1285_fail:
+    (rx1285_rep, rx1285_pos, $I10, $P10) = rx1285_cur."!mark_fail"(0)
+    lt rx1285_pos, -1, rx1285_done
+    eq rx1285_pos, -1, rx1285_fail
+    jump $I10
+  rx1285_done:
+    rx1285_cur."!cursor_fail"()
+    if_null rx1285_debug, debug_993
+    rx1285_cur."!cursor_debug"("FAIL", "infix:sym<//>")
+  debug_993:
+    .return (rx1285_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<:=>"  :subid("333_1282324002.40722") :method
-.annotate 'line', 447
-    $P1278 = self."!PREFIX__!subrule"("O", ":=")
-    new $P1279, "ResizablePMCArray"
-    push $P1279, $P1278
-    .return ($P1279)
+.sub "!PREFIX__infix:sym<//>"  :subid("333_1284728478.15265") :method
+.annotate 'line', 454
+    $P1287 = self."!PREFIX__!subrule"("O", "//")
+    new $P1288, "ResizablePMCArray"
+    push $P1288, $P1287
+    .return ($P1288)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<::=>"  :subid("334_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1283_tgt
-    .local int rx1283_pos
-    .local int rx1283_off
-    .local int rx1283_eos
-    .local int rx1283_rep
-    .local pmc rx1283_cur
-    .local pmc rx1283_debug
-    (rx1283_cur, rx1283_pos, rx1283_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1283_debug, rx1283_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1283_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1283_eos, rx1283_tgt
-    gt rx1283_pos, rx1283_eos, rx1283_done
-    set rx1283_off, 0
-    lt rx1283_pos, 2, rx1283_start
-    sub rx1283_off, rx1283_pos, 1
-    substr rx1283_tgt, rx1283_tgt, rx1283_off
-  rx1283_start:
-    eq $I10, 1, rx1283_restart
-    if_null rx1283_debug, debug_992
-    rx1283_cur."!cursor_debug"("START", "infix:sym<::=>")
-  debug_992:
+.sub "infix:sym<?? !!>"  :subid("334_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1292_tgt
+    .local int rx1292_pos
+    .local int rx1292_off
+    .local int rx1292_eos
+    .local int rx1292_rep
+    .local pmc rx1292_cur
+    .local pmc rx1292_debug
+    (rx1292_cur, rx1292_pos, rx1292_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1292_debug, rx1292_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1292_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1292_eos, rx1292_tgt
+    gt rx1292_pos, rx1292_eos, rx1292_done
+    set rx1292_off, 0
+    lt rx1292_pos, 2, rx1292_start
+    sub rx1292_off, rx1292_pos, 1
+    substr rx1292_tgt, rx1292_tgt, rx1292_off
+  rx1292_start:
+    eq $I10, 1, rx1292_restart
+    if_null rx1292_debug, debug_994
+    rx1292_cur."!cursor_debug"("START", "infix:sym<?? !!>")
+  debug_994:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1287_done
-    goto rxscan1287_scan
-  rxscan1287_loop:
-    ($P10) = rx1283_cur."from"()
-    inc $P10
-    set rx1283_pos, $P10
-    ge rx1283_pos, rx1283_eos, rxscan1287_done
-  rxscan1287_scan:
-    set_addr $I10, rxscan1287_loop
-    rx1283_cur."!mark_push"(0, rx1283_pos, $I10)
-  rxscan1287_done:
+    ne $I10, -1, rxscan1296_done
+    goto rxscan1296_scan
+  rxscan1296_loop:
+    ($P10) = rx1292_cur."from"()
+    inc $P10
+    set rx1292_pos, $P10
+    ge rx1292_pos, rx1292_eos, rxscan1296_done
+  rxscan1296_scan:
+    set_addr $I10, rxscan1296_loop
+    rx1292_cur."!mark_push"(0, rx1292_pos, $I10)
+  rxscan1296_done:
+.annotate 'line', 547
+  # rx literal  "??"
+    add $I11, rx1292_pos, 2
+    gt $I11, rx1292_eos, rx1292_fail
+    sub $I11, rx1292_pos, rx1292_off
+    substr $S10, rx1292_tgt, $I11, 2
+    ne $S10, "??", rx1292_fail
+    add rx1292_pos, 2
+.annotate 'line', 548
+  # rx subrule "ws" subtype=method negate=
+    rx1292_cur."!cursor_pos"(rx1292_pos)
+    $P10 = rx1292_cur."ws"()
+    unless $P10, rx1292_fail
+    rx1292_pos = $P10."pos"()
+.annotate 'line', 549
+  # rx subrule "EXPR" subtype=capture negate=
+    rx1292_cur."!cursor_pos"(rx1292_pos)
+    $P10 = rx1292_cur."EXPR"("i=")
+    unless $P10, rx1292_fail
+    rx1292_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("EXPR")
+    rx1292_pos = $P10."pos"()
+.annotate 'line', 550
+  # rx literal  "!!"
+    add $I11, rx1292_pos, 2
+    gt $I11, rx1292_eos, rx1292_fail
+    sub $I11, rx1292_pos, rx1292_off
+    substr $S10, rx1292_tgt, $I11, 2
+    ne $S10, "!!", rx1292_fail
+    add rx1292_pos, 2
 .annotate 'line', 551
+  # rx subrule "O" subtype=capture negate=
+    rx1292_cur."!cursor_pos"(rx1292_pos)
+    $P10 = rx1292_cur."O"("%conditional, :reducecheck<ternary>, :pasttype<if>")
+    unless $P10, rx1292_fail
+    rx1292_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("O")
+    rx1292_pos = $P10."pos"()
+.annotate 'line', 546
+  # rx pass
+    rx1292_cur."!cursor_pass"(rx1292_pos, "infix:sym<?? !!>")
+    if_null rx1292_debug, debug_995
+    rx1292_cur."!cursor_debug"("PASS", "infix:sym<?? !!>", " at pos=", rx1292_pos)
+  debug_995:
+    .return (rx1292_cur)
+  rx1292_restart:
+.annotate 'line', 454
+    if_null rx1292_debug, debug_996
+    rx1292_cur."!cursor_debug"("NEXT", "infix:sym<?? !!>")
+  debug_996:
+  rx1292_fail:
+    (rx1292_rep, rx1292_pos, $I10, $P10) = rx1292_cur."!mark_fail"(0)
+    lt rx1292_pos, -1, rx1292_done
+    eq rx1292_pos, -1, rx1292_fail
+    jump $I10
+  rx1292_done:
+    rx1292_cur."!cursor_fail"()
+    if_null rx1292_debug, debug_997
+    rx1292_cur."!cursor_debug"("FAIL", "infix:sym<?? !!>")
+  debug_997:
+    .return (rx1292_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__infix:sym<?? !!>"  :subid("335_1284728478.15265") :method
+.annotate 'line', 454
+    $P1294 = self."!PREFIX__!subrule"("ws", "??")
+    new $P1295, "ResizablePMCArray"
+    push $P1295, $P1294
+    .return ($P1295)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "infix:sym<=>"  :subid("336_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1298_tgt
+    .local int rx1298_pos
+    .local int rx1298_off
+    .local int rx1298_eos
+    .local int rx1298_rep
+    .local pmc rx1298_cur
+    .local pmc rx1298_debug
+    (rx1298_cur, rx1298_pos, rx1298_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1298_debug, rx1298_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1298_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1298_eos, rx1298_tgt
+    gt rx1298_pos, rx1298_eos, rx1298_done
+    set rx1298_off, 0
+    lt rx1298_pos, 2, rx1298_start
+    sub rx1298_off, rx1298_pos, 1
+    substr rx1298_tgt, rx1298_tgt, rx1298_off
+  rx1298_start:
+    eq $I10, 1, rx1298_restart
+    if_null rx1298_debug, debug_998
+    rx1298_cur."!cursor_debug"("START", "infix:sym<=>")
+  debug_998:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1302_done
+    goto rxscan1302_scan
+  rxscan1302_loop:
+    ($P10) = rx1298_cur."from"()
+    inc $P10
+    set rx1298_pos, $P10
+    ge rx1298_pos, rx1298_eos, rxscan1302_done
+  rxscan1302_scan:
+    set_addr $I10, rxscan1302_loop
+    rx1298_cur."!mark_push"(0, rx1298_pos, $I10)
+  rxscan1302_done:
+.annotate 'line', 555
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_1303_fail
+    rx1298_cur."!mark_push"(0, rx1298_pos, $I10)
+  # rx literal  "="
+    add $I11, rx1298_pos, 1
+    gt $I11, rx1298_eos, rx1298_fail
+    sub $I11, rx1298_pos, rx1298_off
+    ord $I11, rx1298_tgt, $I11
+    ne $I11, 61, rx1298_fail
+    add rx1298_pos, 1
+    set_addr $I10, rxcap_1303_fail
+    ($I12, $I11) = rx1298_cur."!mark_peek"($I10)
+    rx1298_cur."!cursor_pos"($I11)
+    ($P10) = rx1298_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1298_pos, "")
+    rx1298_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_1303_done
+  rxcap_1303_fail:
+    goto rx1298_fail
+  rxcap_1303_done:
+  # rx subrule "panic" subtype=method negate=
+    rx1298_cur."!cursor_pos"(rx1298_pos)
+    $P10 = rx1298_cur."panic"("Assignment (\"=\") not supported in NQP, use \":=\" instead")
+    unless $P10, rx1298_fail
+    rx1298_pos = $P10."pos"()
+.annotate 'line', 554
+  # rx pass
+    rx1298_cur."!cursor_pass"(rx1298_pos, "infix:sym<=>")
+    if_null rx1298_debug, debug_999
+    rx1298_cur."!cursor_debug"("PASS", "infix:sym<=>", " at pos=", rx1298_pos)
+  debug_999:
+    .return (rx1298_cur)
+  rx1298_restart:
+.annotate 'line', 454
+    if_null rx1298_debug, debug_1000
+    rx1298_cur."!cursor_debug"("NEXT", "infix:sym<=>")
+  debug_1000:
+  rx1298_fail:
+    (rx1298_rep, rx1298_pos, $I10, $P10) = rx1298_cur."!mark_fail"(0)
+    lt rx1298_pos, -1, rx1298_done
+    eq rx1298_pos, -1, rx1298_fail
+    jump $I10
+  rx1298_done:
+    rx1298_cur."!cursor_fail"()
+    if_null rx1298_debug, debug_1001
+    rx1298_cur."!cursor_debug"("FAIL", "infix:sym<=>")
+  debug_1001:
+    .return (rx1298_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__infix:sym<=>"  :subid("337_1284728478.15265") :method
+.annotate 'line', 454
+    $P1300 = self."!PREFIX__!subrule"("panic", "=")
+    new $P1301, "ResizablePMCArray"
+    push $P1301, $P1300
+    .return ($P1301)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "infix:sym<:=>"  :subid("338_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1305_tgt
+    .local int rx1305_pos
+    .local int rx1305_off
+    .local int rx1305_eos
+    .local int rx1305_rep
+    .local pmc rx1305_cur
+    .local pmc rx1305_debug
+    (rx1305_cur, rx1305_pos, rx1305_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1305_debug, rx1305_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1305_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1305_eos, rx1305_tgt
+    gt rx1305_pos, rx1305_eos, rx1305_done
+    set rx1305_off, 0
+    lt rx1305_pos, 2, rx1305_start
+    sub rx1305_off, rx1305_pos, 1
+    substr rx1305_tgt, rx1305_tgt, rx1305_off
+  rx1305_start:
+    eq $I10, 1, rx1305_restart
+    if_null rx1305_debug, debug_1002
+    rx1305_cur."!cursor_debug"("START", "infix:sym<:=>")
+  debug_1002:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1309_done
+    goto rxscan1309_scan
+  rxscan1309_loop:
+    ($P10) = rx1305_cur."from"()
+    inc $P10
+    set rx1305_pos, $P10
+    ge rx1305_pos, rx1305_eos, rxscan1309_done
+  rxscan1309_scan:
+    set_addr $I10, rxscan1309_loop
+    rx1305_cur."!mark_push"(0, rx1305_pos, $I10)
+  rxscan1309_done:
+.annotate 'line', 557
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_1310_fail
+    rx1305_cur."!mark_push"(0, rx1305_pos, $I10)
+  # rx literal  ":="
+    add $I11, rx1305_pos, 2
+    gt $I11, rx1305_eos, rx1305_fail
+    sub $I11, rx1305_pos, rx1305_off
+    substr $S10, rx1305_tgt, $I11, 2
+    ne $S10, ":=", rx1305_fail
+    add rx1305_pos, 2
+    set_addr $I10, rxcap_1310_fail
+    ($I12, $I11) = rx1305_cur."!mark_peek"($I10)
+    rx1305_cur."!cursor_pos"($I11)
+    ($P10) = rx1305_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1305_pos, "")
+    rx1305_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_1310_done
+  rxcap_1310_fail:
+    goto rx1305_fail
+  rxcap_1310_done:
+  # rx subrule "O" subtype=capture negate=
+    rx1305_cur."!cursor_pos"(rx1305_pos)
+    $P10 = rx1305_cur."O"("%assignment, :pasttype<bind>")
+    unless $P10, rx1305_fail
+    rx1305_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("O")
+    rx1305_pos = $P10."pos"()
+  # rx pass
+    rx1305_cur."!cursor_pass"(rx1305_pos, "infix:sym<:=>")
+    if_null rx1305_debug, debug_1003
+    rx1305_cur."!cursor_debug"("PASS", "infix:sym<:=>", " at pos=", rx1305_pos)
+  debug_1003:
+    .return (rx1305_cur)
+  rx1305_restart:
+.annotate 'line', 454
+    if_null rx1305_debug, debug_1004
+    rx1305_cur."!cursor_debug"("NEXT", "infix:sym<:=>")
+  debug_1004:
+  rx1305_fail:
+    (rx1305_rep, rx1305_pos, $I10, $P10) = rx1305_cur."!mark_fail"(0)
+    lt rx1305_pos, -1, rx1305_done
+    eq rx1305_pos, -1, rx1305_fail
+    jump $I10
+  rx1305_done:
+    rx1305_cur."!cursor_fail"()
+    if_null rx1305_debug, debug_1005
+    rx1305_cur."!cursor_debug"("FAIL", "infix:sym<:=>")
+  debug_1005:
+    .return (rx1305_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__infix:sym<:=>"  :subid("339_1284728478.15265") :method
+.annotate 'line', 454
+    $P1307 = self."!PREFIX__!subrule"("O", ":=")
+    new $P1308, "ResizablePMCArray"
+    push $P1308, $P1307
+    .return ($P1308)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "infix:sym<::=>"  :subid("340_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1312_tgt
+    .local int rx1312_pos
+    .local int rx1312_off
+    .local int rx1312_eos
+    .local int rx1312_rep
+    .local pmc rx1312_cur
+    .local pmc rx1312_debug
+    (rx1312_cur, rx1312_pos, rx1312_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1312_debug, rx1312_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1312_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1312_eos, rx1312_tgt
+    gt rx1312_pos, rx1312_eos, rx1312_done
+    set rx1312_off, 0
+    lt rx1312_pos, 2, rx1312_start
+    sub rx1312_off, rx1312_pos, 1
+    substr rx1312_tgt, rx1312_tgt, rx1312_off
+  rx1312_start:
+    eq $I10, 1, rx1312_restart
+    if_null rx1312_debug, debug_1006
+    rx1312_cur."!cursor_debug"("START", "infix:sym<::=>")
+  debug_1006:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1316_done
+    goto rxscan1316_scan
+  rxscan1316_loop:
+    ($P10) = rx1312_cur."from"()
+    inc $P10
+    set rx1312_pos, $P10
+    ge rx1312_pos, rx1312_eos, rxscan1316_done
+  rxscan1316_scan:
+    set_addr $I10, rxscan1316_loop
+    rx1312_cur."!mark_push"(0, rx1312_pos, $I10)
+  rxscan1316_done:
+.annotate 'line', 558
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1288_fail
-    rx1283_cur."!mark_push"(0, rx1283_pos, $I10)
+    set_addr $I10, rxcap_1317_fail
+    rx1312_cur."!mark_push"(0, rx1312_pos, $I10)
   # rx literal  "::="
-    add $I11, rx1283_pos, 3
-    gt $I11, rx1283_eos, rx1283_fail
-    sub $I11, rx1283_pos, rx1283_off
-    substr $S10, rx1283_tgt, $I11, 3
-    ne $S10, "::=", rx1283_fail
-    add rx1283_pos, 3
-    set_addr $I10, rxcap_1288_fail
-    ($I12, $I11) = rx1283_cur."!mark_peek"($I10)
-    rx1283_cur."!cursor_pos"($I11)
-    ($P10) = rx1283_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1283_pos, "")
-    rx1283_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1312_pos, 3
+    gt $I11, rx1312_eos, rx1312_fail
+    sub $I11, rx1312_pos, rx1312_off
+    substr $S10, rx1312_tgt, $I11, 3
+    ne $S10, "::=", rx1312_fail
+    add rx1312_pos, 3
+    set_addr $I10, rxcap_1317_fail
+    ($I12, $I11) = rx1312_cur."!mark_peek"($I10)
+    rx1312_cur."!cursor_pos"($I11)
+    ($P10) = rx1312_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1312_pos, "")
+    rx1312_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1288_done
-  rxcap_1288_fail:
-    goto rx1283_fail
-  rxcap_1288_done:
+    goto rxcap_1317_done
+  rxcap_1317_fail:
+    goto rx1312_fail
+  rxcap_1317_done:
   # rx subrule "O" subtype=capture negate=
-    rx1283_cur."!cursor_pos"(rx1283_pos)
-    $P10 = rx1283_cur."O"("%assignment, :pasttype<bind>")
-    unless $P10, rx1283_fail
-    rx1283_cur."!mark_push"(0, -1, 0, $P10)
+    rx1312_cur."!cursor_pos"(rx1312_pos)
+    $P10 = rx1312_cur."O"("%assignment, :pasttype<bind>")
+    unless $P10, rx1312_fail
+    rx1312_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1283_pos = $P10."pos"()
+    rx1312_pos = $P10."pos"()
   # rx pass
-    rx1283_cur."!cursor_pass"(rx1283_pos, "infix:sym<::=>")
-    if_null rx1283_debug, debug_993
-    rx1283_cur."!cursor_debug"("PASS", "infix:sym<::=>", " at pos=", rx1283_pos)
-  debug_993:
-    .return (rx1283_cur)
-  rx1283_restart:
-.annotate 'line', 447
-    if_null rx1283_debug, debug_994
-    rx1283_cur."!cursor_debug"("NEXT", "infix:sym<::=>")
-  debug_994:
-  rx1283_fail:
-    (rx1283_rep, rx1283_pos, $I10, $P10) = rx1283_cur."!mark_fail"(0)
-    lt rx1283_pos, -1, rx1283_done
-    eq rx1283_pos, -1, rx1283_fail
-    jump $I10
-  rx1283_done:
-    rx1283_cur."!cursor_fail"()
-    if_null rx1283_debug, debug_995
-    rx1283_cur."!cursor_debug"("FAIL", "infix:sym<::=>")
-  debug_995:
-    .return (rx1283_cur)
+    rx1312_cur."!cursor_pass"(rx1312_pos, "infix:sym<::=>")
+    if_null rx1312_debug, debug_1007
+    rx1312_cur."!cursor_debug"("PASS", "infix:sym<::=>", " at pos=", rx1312_pos)
+  debug_1007:
+    .return (rx1312_cur)
+  rx1312_restart:
+.annotate 'line', 454
+    if_null rx1312_debug, debug_1008
+    rx1312_cur."!cursor_debug"("NEXT", "infix:sym<::=>")
+  debug_1008:
+  rx1312_fail:
+    (rx1312_rep, rx1312_pos, $I10, $P10) = rx1312_cur."!mark_fail"(0)
+    lt rx1312_pos, -1, rx1312_done
+    eq rx1312_pos, -1, rx1312_fail
+    jump $I10
+  rx1312_done:
+    rx1312_cur."!cursor_fail"()
+    if_null rx1312_debug, debug_1009
+    rx1312_cur."!cursor_debug"("FAIL", "infix:sym<::=>")
+  debug_1009:
+    .return (rx1312_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<::=>"  :subid("335_1282324002.40722") :method
-.annotate 'line', 447
-    $P1285 = self."!PREFIX__!subrule"("O", "::=")
-    new $P1286, "ResizablePMCArray"
-    push $P1286, $P1285
-    .return ($P1286)
+.sub "!PREFIX__infix:sym<::=>"  :subid("341_1284728478.15265") :method
+.annotate 'line', 454
+    $P1314 = self."!PREFIX__!subrule"("O", "::=")
+    new $P1315, "ResizablePMCArray"
+    push $P1315, $P1314
+    .return ($P1315)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<,>"  :subid("336_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1290_tgt
-    .local int rx1290_pos
-    .local int rx1290_off
-    .local int rx1290_eos
-    .local int rx1290_rep
-    .local pmc rx1290_cur
-    .local pmc rx1290_debug
-    (rx1290_cur, rx1290_pos, rx1290_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1290_debug, rx1290_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1290_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1290_eos, rx1290_tgt
-    gt rx1290_pos, rx1290_eos, rx1290_done
-    set rx1290_off, 0
-    lt rx1290_pos, 2, rx1290_start
-    sub rx1290_off, rx1290_pos, 1
-    substr rx1290_tgt, rx1290_tgt, rx1290_off
-  rx1290_start:
-    eq $I10, 1, rx1290_restart
-    if_null rx1290_debug, debug_996
-    rx1290_cur."!cursor_debug"("START", "infix:sym<,>")
-  debug_996:
+.sub "infix:sym<,>"  :subid("342_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1319_tgt
+    .local int rx1319_pos
+    .local int rx1319_off
+    .local int rx1319_eos
+    .local int rx1319_rep
+    .local pmc rx1319_cur
+    .local pmc rx1319_debug
+    (rx1319_cur, rx1319_pos, rx1319_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1319_debug, rx1319_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1319_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1319_eos, rx1319_tgt
+    gt rx1319_pos, rx1319_eos, rx1319_done
+    set rx1319_off, 0
+    lt rx1319_pos, 2, rx1319_start
+    sub rx1319_off, rx1319_pos, 1
+    substr rx1319_tgt, rx1319_tgt, rx1319_off
+  rx1319_start:
+    eq $I10, 1, rx1319_restart
+    if_null rx1319_debug, debug_1010
+    rx1319_cur."!cursor_debug"("START", "infix:sym<,>")
+  debug_1010:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1294_done
-    goto rxscan1294_scan
-  rxscan1294_loop:
-    ($P10) = rx1290_cur."from"()
-    inc $P10
-    set rx1290_pos, $P10
-    ge rx1290_pos, rx1290_eos, rxscan1294_done
-  rxscan1294_scan:
-    set_addr $I10, rxscan1294_loop
-    rx1290_cur."!mark_push"(0, rx1290_pos, $I10)
-  rxscan1294_done:
-.annotate 'line', 553
+    ne $I10, -1, rxscan1323_done
+    goto rxscan1323_scan
+  rxscan1323_loop:
+    ($P10) = rx1319_cur."from"()
+    inc $P10
+    set rx1319_pos, $P10
+    ge rx1319_pos, rx1319_eos, rxscan1323_done
+  rxscan1323_scan:
+    set_addr $I10, rxscan1323_loop
+    rx1319_cur."!mark_push"(0, rx1319_pos, $I10)
+  rxscan1323_done:
+.annotate 'line', 560
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1295_fail
-    rx1290_cur."!mark_push"(0, rx1290_pos, $I10)
+    set_addr $I10, rxcap_1324_fail
+    rx1319_cur."!mark_push"(0, rx1319_pos, $I10)
   # rx literal  ","
-    add $I11, rx1290_pos, 1
-    gt $I11, rx1290_eos, rx1290_fail
-    sub $I11, rx1290_pos, rx1290_off
-    ord $I11, rx1290_tgt, $I11
-    ne $I11, 44, rx1290_fail
-    add rx1290_pos, 1
-    set_addr $I10, rxcap_1295_fail
-    ($I12, $I11) = rx1290_cur."!mark_peek"($I10)
-    rx1290_cur."!cursor_pos"($I11)
-    ($P10) = rx1290_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1290_pos, "")
-    rx1290_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1319_pos, 1
+    gt $I11, rx1319_eos, rx1319_fail
+    sub $I11, rx1319_pos, rx1319_off
+    ord $I11, rx1319_tgt, $I11
+    ne $I11, 44, rx1319_fail
+    add rx1319_pos, 1
+    set_addr $I10, rxcap_1324_fail
+    ($I12, $I11) = rx1319_cur."!mark_peek"($I10)
+    rx1319_cur."!cursor_pos"($I11)
+    ($P10) = rx1319_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1319_pos, "")
+    rx1319_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1295_done
-  rxcap_1295_fail:
-    goto rx1290_fail
-  rxcap_1295_done:
+    goto rxcap_1324_done
+  rxcap_1324_fail:
+    goto rx1319_fail
+  rxcap_1324_done:
   # rx subrule "O" subtype=capture negate=
-    rx1290_cur."!cursor_pos"(rx1290_pos)
-    $P10 = rx1290_cur."O"("%comma, :pasttype<list>")
-    unless $P10, rx1290_fail
-    rx1290_cur."!mark_push"(0, -1, 0, $P10)
+    rx1319_cur."!cursor_pos"(rx1319_pos)
+    $P10 = rx1319_cur."O"("%comma, :pasttype<list>")
+    unless $P10, rx1319_fail
+    rx1319_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1290_pos = $P10."pos"()
+    rx1319_pos = $P10."pos"()
   # rx pass
-    rx1290_cur."!cursor_pass"(rx1290_pos, "infix:sym<,>")
-    if_null rx1290_debug, debug_997
-    rx1290_cur."!cursor_debug"("PASS", "infix:sym<,>", " at pos=", rx1290_pos)
-  debug_997:
-    .return (rx1290_cur)
-  rx1290_restart:
-.annotate 'line', 447
-    if_null rx1290_debug, debug_998
-    rx1290_cur."!cursor_debug"("NEXT", "infix:sym<,>")
-  debug_998:
-  rx1290_fail:
-    (rx1290_rep, rx1290_pos, $I10, $P10) = rx1290_cur."!mark_fail"(0)
-    lt rx1290_pos, -1, rx1290_done
-    eq rx1290_pos, -1, rx1290_fail
-    jump $I10
-  rx1290_done:
-    rx1290_cur."!cursor_fail"()
-    if_null rx1290_debug, debug_999
-    rx1290_cur."!cursor_debug"("FAIL", "infix:sym<,>")
-  debug_999:
-    .return (rx1290_cur)
+    rx1319_cur."!cursor_pass"(rx1319_pos, "infix:sym<,>")
+    if_null rx1319_debug, debug_1011
+    rx1319_cur."!cursor_debug"("PASS", "infix:sym<,>", " at pos=", rx1319_pos)
+  debug_1011:
+    .return (rx1319_cur)
+  rx1319_restart:
+.annotate 'line', 454
+    if_null rx1319_debug, debug_1012
+    rx1319_cur."!cursor_debug"("NEXT", "infix:sym<,>")
+  debug_1012:
+  rx1319_fail:
+    (rx1319_rep, rx1319_pos, $I10, $P10) = rx1319_cur."!mark_fail"(0)
+    lt rx1319_pos, -1, rx1319_done
+    eq rx1319_pos, -1, rx1319_fail
+    jump $I10
+  rx1319_done:
+    rx1319_cur."!cursor_fail"()
+    if_null rx1319_debug, debug_1013
+    rx1319_cur."!cursor_debug"("FAIL", "infix:sym<,>")
+  debug_1013:
+    .return (rx1319_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<,>"  :subid("337_1282324002.40722") :method
-.annotate 'line', 447
-    $P1292 = self."!PREFIX__!subrule"("O", ",")
-    new $P1293, "ResizablePMCArray"
-    push $P1293, $P1292
-    .return ($P1293)
+.sub "!PREFIX__infix:sym<,>"  :subid("343_1284728478.15265") :method
+.annotate 'line', 454
+    $P1321 = self."!PREFIX__!subrule"("O", ",")
+    new $P1322, "ResizablePMCArray"
+    push $P1322, $P1321
+    .return ($P1322)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<return>"  :subid("338_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1297_tgt
-    .local int rx1297_pos
-    .local int rx1297_off
-    .local int rx1297_eos
-    .local int rx1297_rep
-    .local pmc rx1297_cur
-    .local pmc rx1297_debug
-    (rx1297_cur, rx1297_pos, rx1297_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1297_debug, rx1297_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1297_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1297_eos, rx1297_tgt
-    gt rx1297_pos, rx1297_eos, rx1297_done
-    set rx1297_off, 0
-    lt rx1297_pos, 2, rx1297_start
-    sub rx1297_off, rx1297_pos, 1
-    substr rx1297_tgt, rx1297_tgt, rx1297_off
-  rx1297_start:
-    eq $I10, 1, rx1297_restart
-    if_null rx1297_debug, debug_1000
-    rx1297_cur."!cursor_debug"("START", "prefix:sym<return>")
-  debug_1000:
+.sub "prefix:sym<return>"  :subid("344_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1326_tgt
+    .local int rx1326_pos
+    .local int rx1326_off
+    .local int rx1326_eos
+    .local int rx1326_rep
+    .local pmc rx1326_cur
+    .local pmc rx1326_debug
+    (rx1326_cur, rx1326_pos, rx1326_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1326_debug, rx1326_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1326_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1326_eos, rx1326_tgt
+    gt rx1326_pos, rx1326_eos, rx1326_done
+    set rx1326_off, 0
+    lt rx1326_pos, 2, rx1326_start
+    sub rx1326_off, rx1326_pos, 1
+    substr rx1326_tgt, rx1326_tgt, rx1326_off
+  rx1326_start:
+    eq $I10, 1, rx1326_restart
+    if_null rx1326_debug, debug_1014
+    rx1326_cur."!cursor_debug"("START", "prefix:sym<return>")
+  debug_1014:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1300_done
-    goto rxscan1300_scan
-  rxscan1300_loop:
-    ($P10) = rx1297_cur."from"()
-    inc $P10
-    set rx1297_pos, $P10
-    ge rx1297_pos, rx1297_eos, rxscan1300_done
-  rxscan1300_scan:
-    set_addr $I10, rxscan1300_loop
-    rx1297_cur."!mark_push"(0, rx1297_pos, $I10)
-  rxscan1300_done:
-.annotate 'line', 555
+    ne $I10, -1, rxscan1329_done
+    goto rxscan1329_scan
+  rxscan1329_loop:
+    ($P10) = rx1326_cur."from"()
+    inc $P10
+    set rx1326_pos, $P10
+    ge rx1326_pos, rx1326_eos, rxscan1329_done
+  rxscan1329_scan:
+    set_addr $I10, rxscan1329_loop
+    rx1326_cur."!mark_push"(0, rx1326_pos, $I10)
+  rxscan1329_done:
+.annotate 'line', 562
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1301_fail
-    rx1297_cur."!mark_push"(0, rx1297_pos, $I10)
+    set_addr $I10, rxcap_1330_fail
+    rx1326_cur."!mark_push"(0, rx1326_pos, $I10)
   # rx literal  "return"
-    add $I11, rx1297_pos, 6
-    gt $I11, rx1297_eos, rx1297_fail
-    sub $I11, rx1297_pos, rx1297_off
-    substr $S10, rx1297_tgt, $I11, 6
-    ne $S10, "return", rx1297_fail
-    add rx1297_pos, 6
-    set_addr $I10, rxcap_1301_fail
-    ($I12, $I11) = rx1297_cur."!mark_peek"($I10)
-    rx1297_cur."!cursor_pos"($I11)
-    ($P10) = rx1297_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1297_pos, "")
-    rx1297_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1326_pos, 6
+    gt $I11, rx1326_eos, rx1326_fail
+    sub $I11, rx1326_pos, rx1326_off
+    substr $S10, rx1326_tgt, $I11, 6
+    ne $S10, "return", rx1326_fail
+    add rx1326_pos, 6
+    set_addr $I10, rxcap_1330_fail
+    ($I12, $I11) = rx1326_cur."!mark_peek"($I10)
+    rx1326_cur."!cursor_pos"($I11)
+    ($P10) = rx1326_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1326_pos, "")
+    rx1326_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1301_done
-  rxcap_1301_fail:
-    goto rx1297_fail
-  rxcap_1301_done:
+    goto rxcap_1330_done
+  rxcap_1330_fail:
+    goto rx1326_fail
+  rxcap_1330_done:
   # rx charclass s
-    ge rx1297_pos, rx1297_eos, rx1297_fail
-    sub $I10, rx1297_pos, rx1297_off
-    is_cclass $I11, 32, rx1297_tgt, $I10
-    unless $I11, rx1297_fail
-    inc rx1297_pos
+    ge rx1326_pos, rx1326_eos, rx1326_fail
+    sub $I10, rx1326_pos, rx1326_off
+    is_cclass $I11, 32, rx1326_tgt, $I10
+    unless $I11, rx1326_fail
+    inc rx1326_pos
   # rx subrule "O" subtype=capture negate=
-    rx1297_cur."!cursor_pos"(rx1297_pos)
-    $P10 = rx1297_cur."O"("%list_prefix, :pasttype<return>")
-    unless $P10, rx1297_fail
-    rx1297_cur."!mark_push"(0, -1, 0, $P10)
+    rx1326_cur."!cursor_pos"(rx1326_pos)
+    $P10 = rx1326_cur."O"("%list_prefix, :pasttype<return>")
+    unless $P10, rx1326_fail
+    rx1326_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1297_pos = $P10."pos"()
+    rx1326_pos = $P10."pos"()
   # rx pass
-    rx1297_cur."!cursor_pass"(rx1297_pos, "prefix:sym<return>")
-    if_null rx1297_debug, debug_1001
-    rx1297_cur."!cursor_debug"("PASS", "prefix:sym<return>", " at pos=", rx1297_pos)
-  debug_1001:
-    .return (rx1297_cur)
-  rx1297_restart:
-.annotate 'line', 447
-    if_null rx1297_debug, debug_1002
-    rx1297_cur."!cursor_debug"("NEXT", "prefix:sym<return>")
-  debug_1002:
-  rx1297_fail:
-    (rx1297_rep, rx1297_pos, $I10, $P10) = rx1297_cur."!mark_fail"(0)
-    lt rx1297_pos, -1, rx1297_done
-    eq rx1297_pos, -1, rx1297_fail
-    jump $I10
-  rx1297_done:
-    rx1297_cur."!cursor_fail"()
-    if_null rx1297_debug, debug_1003
-    rx1297_cur."!cursor_debug"("FAIL", "prefix:sym<return>")
-  debug_1003:
-    .return (rx1297_cur)
+    rx1326_cur."!cursor_pass"(rx1326_pos, "prefix:sym<return>")
+    if_null rx1326_debug, debug_1015
+    rx1326_cur."!cursor_debug"("PASS", "prefix:sym<return>", " at pos=", rx1326_pos)
+  debug_1015:
+    .return (rx1326_cur)
+  rx1326_restart:
+.annotate 'line', 454
+    if_null rx1326_debug, debug_1016
+    rx1326_cur."!cursor_debug"("NEXT", "prefix:sym<return>")
+  debug_1016:
+  rx1326_fail:
+    (rx1326_rep, rx1326_pos, $I10, $P10) = rx1326_cur."!mark_fail"(0)
+    lt rx1326_pos, -1, rx1326_done
+    eq rx1326_pos, -1, rx1326_fail
+    jump $I10
+  rx1326_done:
+    rx1326_cur."!cursor_fail"()
+    if_null rx1326_debug, debug_1017
+    rx1326_cur."!cursor_debug"("FAIL", "prefix:sym<return>")
+  debug_1017:
+    .return (rx1326_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<return>"  :subid("339_1282324002.40722") :method
-.annotate 'line', 447
-    new $P1299, "ResizablePMCArray"
-    push $P1299, "return"
-    .return ($P1299)
+.sub "!PREFIX__prefix:sym<return>"  :subid("345_1284728478.15265") :method
+.annotate 'line', 454
+    new $P1328, "ResizablePMCArray"
+    push $P1328, "return"
+    .return ($P1328)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<make>"  :subid("340_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1303_tgt
-    .local int rx1303_pos
-    .local int rx1303_off
-    .local int rx1303_eos
-    .local int rx1303_rep
-    .local pmc rx1303_cur
-    .local pmc rx1303_debug
-    (rx1303_cur, rx1303_pos, rx1303_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1303_debug, rx1303_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1303_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1303_eos, rx1303_tgt
-    gt rx1303_pos, rx1303_eos, rx1303_done
-    set rx1303_off, 0
-    lt rx1303_pos, 2, rx1303_start
-    sub rx1303_off, rx1303_pos, 1
-    substr rx1303_tgt, rx1303_tgt, rx1303_off
-  rx1303_start:
-    eq $I10, 1, rx1303_restart
-    if_null rx1303_debug, debug_1004
-    rx1303_cur."!cursor_debug"("START", "prefix:sym<make>")
-  debug_1004:
+.sub "prefix:sym<make>"  :subid("346_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1332_tgt
+    .local int rx1332_pos
+    .local int rx1332_off
+    .local int rx1332_eos
+    .local int rx1332_rep
+    .local pmc rx1332_cur
+    .local pmc rx1332_debug
+    (rx1332_cur, rx1332_pos, rx1332_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1332_debug, rx1332_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1332_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1332_eos, rx1332_tgt
+    gt rx1332_pos, rx1332_eos, rx1332_done
+    set rx1332_off, 0
+    lt rx1332_pos, 2, rx1332_start
+    sub rx1332_off, rx1332_pos, 1
+    substr rx1332_tgt, rx1332_tgt, rx1332_off
+  rx1332_start:
+    eq $I10, 1, rx1332_restart
+    if_null rx1332_debug, debug_1018
+    rx1332_cur."!cursor_debug"("START", "prefix:sym<make>")
+  debug_1018:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1306_done
-    goto rxscan1306_scan
-  rxscan1306_loop:
-    ($P10) = rx1303_cur."from"()
-    inc $P10
-    set rx1303_pos, $P10
-    ge rx1303_pos, rx1303_eos, rxscan1306_done
-  rxscan1306_scan:
-    set_addr $I10, rxscan1306_loop
-    rx1303_cur."!mark_push"(0, rx1303_pos, $I10)
-  rxscan1306_done:
-.annotate 'line', 556
+    ne $I10, -1, rxscan1335_done
+    goto rxscan1335_scan
+  rxscan1335_loop:
+    ($P10) = rx1332_cur."from"()
+    inc $P10
+    set rx1332_pos, $P10
+    ge rx1332_pos, rx1332_eos, rxscan1335_done
+  rxscan1335_scan:
+    set_addr $I10, rxscan1335_loop
+    rx1332_cur."!mark_push"(0, rx1332_pos, $I10)
+  rxscan1335_done:
+.annotate 'line', 563
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1307_fail
-    rx1303_cur."!mark_push"(0, rx1303_pos, $I10)
+    set_addr $I10, rxcap_1336_fail
+    rx1332_cur."!mark_push"(0, rx1332_pos, $I10)
   # rx literal  "make"
-    add $I11, rx1303_pos, 4
-    gt $I11, rx1303_eos, rx1303_fail
-    sub $I11, rx1303_pos, rx1303_off
-    substr $S10, rx1303_tgt, $I11, 4
-    ne $S10, "make", rx1303_fail
-    add rx1303_pos, 4
-    set_addr $I10, rxcap_1307_fail
-    ($I12, $I11) = rx1303_cur."!mark_peek"($I10)
-    rx1303_cur."!cursor_pos"($I11)
-    ($P10) = rx1303_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1303_pos, "")
-    rx1303_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1332_pos, 4
+    gt $I11, rx1332_eos, rx1332_fail
+    sub $I11, rx1332_pos, rx1332_off
+    substr $S10, rx1332_tgt, $I11, 4
+    ne $S10, "make", rx1332_fail
+    add rx1332_pos, 4
+    set_addr $I10, rxcap_1336_fail
+    ($I12, $I11) = rx1332_cur."!mark_peek"($I10)
+    rx1332_cur."!cursor_pos"($I11)
+    ($P10) = rx1332_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1332_pos, "")
+    rx1332_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1307_done
-  rxcap_1307_fail:
-    goto rx1303_fail
-  rxcap_1307_done:
+    goto rxcap_1336_done
+  rxcap_1336_fail:
+    goto rx1332_fail
+  rxcap_1336_done:
   # rx charclass s
-    ge rx1303_pos, rx1303_eos, rx1303_fail
-    sub $I10, rx1303_pos, rx1303_off
-    is_cclass $I11, 32, rx1303_tgt, $I10
-    unless $I11, rx1303_fail
-    inc rx1303_pos
+    ge rx1332_pos, rx1332_eos, rx1332_fail
+    sub $I10, rx1332_pos, rx1332_off
+    is_cclass $I11, 32, rx1332_tgt, $I10
+    unless $I11, rx1332_fail
+    inc rx1332_pos
   # rx subrule "O" subtype=capture negate=
-    rx1303_cur."!cursor_pos"(rx1303_pos)
-    $P10 = rx1303_cur."O"("%list_prefix")
-    unless $P10, rx1303_fail
-    rx1303_cur."!mark_push"(0, -1, 0, $P10)
+    rx1332_cur."!cursor_pos"(rx1332_pos)
+    $P10 = rx1332_cur."O"("%list_prefix")
+    unless $P10, rx1332_fail
+    rx1332_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1303_pos = $P10."pos"()
+    rx1332_pos = $P10."pos"()
   # rx pass
-    rx1303_cur."!cursor_pass"(rx1303_pos, "prefix:sym<make>")
-    if_null rx1303_debug, debug_1005
-    rx1303_cur."!cursor_debug"("PASS", "prefix:sym<make>", " at pos=", rx1303_pos)
-  debug_1005:
-    .return (rx1303_cur)
-  rx1303_restart:
-.annotate 'line', 447
-    if_null rx1303_debug, debug_1006
-    rx1303_cur."!cursor_debug"("NEXT", "prefix:sym<make>")
-  debug_1006:
-  rx1303_fail:
-    (rx1303_rep, rx1303_pos, $I10, $P10) = rx1303_cur."!mark_fail"(0)
-    lt rx1303_pos, -1, rx1303_done
-    eq rx1303_pos, -1, rx1303_fail
-    jump $I10
-  rx1303_done:
-    rx1303_cur."!cursor_fail"()
-    if_null rx1303_debug, debug_1007
-    rx1303_cur."!cursor_debug"("FAIL", "prefix:sym<make>")
-  debug_1007:
-    .return (rx1303_cur)
+    rx1332_cur."!cursor_pass"(rx1332_pos, "prefix:sym<make>")
+    if_null rx1332_debug, debug_1019
+    rx1332_cur."!cursor_debug"("PASS", "prefix:sym<make>", " at pos=", rx1332_pos)
+  debug_1019:
+    .return (rx1332_cur)
+  rx1332_restart:
+.annotate 'line', 454
+    if_null rx1332_debug, debug_1020
+    rx1332_cur."!cursor_debug"("NEXT", "prefix:sym<make>")
+  debug_1020:
+  rx1332_fail:
+    (rx1332_rep, rx1332_pos, $I10, $P10) = rx1332_cur."!mark_fail"(0)
+    lt rx1332_pos, -1, rx1332_done
+    eq rx1332_pos, -1, rx1332_fail
+    jump $I10
+  rx1332_done:
+    rx1332_cur."!cursor_fail"()
+    if_null rx1332_debug, debug_1021
+    rx1332_cur."!cursor_debug"("FAIL", "prefix:sym<make>")
+  debug_1021:
+    .return (rx1332_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<make>"  :subid("341_1282324002.40722") :method
-.annotate 'line', 447
-    new $P1305, "ResizablePMCArray"
-    push $P1305, "make"
-    .return ($P1305)
+.sub "!PREFIX__prefix:sym<make>"  :subid("347_1284728478.15265") :method
+.annotate 'line', 454
+    new $P1334, "ResizablePMCArray"
+    push $P1334, "make"
+    .return ($P1334)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<last>"  :subid("342_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1309_tgt
-    .local int rx1309_pos
-    .local int rx1309_off
-    .local int rx1309_eos
-    .local int rx1309_rep
-    .local pmc rx1309_cur
-    .local pmc rx1309_debug
-    (rx1309_cur, rx1309_pos, rx1309_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1309_debug, rx1309_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1309_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1309_eos, rx1309_tgt
-    gt rx1309_pos, rx1309_eos, rx1309_done
-    set rx1309_off, 0
-    lt rx1309_pos, 2, rx1309_start
-    sub rx1309_off, rx1309_pos, 1
-    substr rx1309_tgt, rx1309_tgt, rx1309_off
-  rx1309_start:
-    eq $I10, 1, rx1309_restart
-    if_null rx1309_debug, debug_1008
-    rx1309_cur."!cursor_debug"("START", "term:sym<last>")
-  debug_1008:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1312_done
-    goto rxscan1312_scan
-  rxscan1312_loop:
-    ($P10) = rx1309_cur."from"()
-    inc $P10
-    set rx1309_pos, $P10
-    ge rx1309_pos, rx1309_eos, rxscan1312_done
-  rxscan1312_scan:
-    set_addr $I10, rxscan1312_loop
-    rx1309_cur."!mark_push"(0, rx1309_pos, $I10)
-  rxscan1312_done:
-.annotate 'line', 557
+.sub "term:sym<last>"  :subid("348_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1338_tgt
+    .local int rx1338_pos
+    .local int rx1338_off
+    .local int rx1338_eos
+    .local int rx1338_rep
+    .local pmc rx1338_cur
+    .local pmc rx1338_debug
+    (rx1338_cur, rx1338_pos, rx1338_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1338_debug, rx1338_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1338_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1338_eos, rx1338_tgt
+    gt rx1338_pos, rx1338_eos, rx1338_done
+    set rx1338_off, 0
+    lt rx1338_pos, 2, rx1338_start
+    sub rx1338_off, rx1338_pos, 1
+    substr rx1338_tgt, rx1338_tgt, rx1338_off
+  rx1338_start:
+    eq $I10, 1, rx1338_restart
+    if_null rx1338_debug, debug_1022
+    rx1338_cur."!cursor_debug"("START", "term:sym<last>")
+  debug_1022:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1341_done
+    goto rxscan1341_scan
+  rxscan1341_loop:
+    ($P10) = rx1338_cur."from"()
+    inc $P10
+    set rx1338_pos, $P10
+    ge rx1338_pos, rx1338_eos, rxscan1341_done
+  rxscan1341_scan:
+    set_addr $I10, rxscan1341_loop
+    rx1338_cur."!mark_push"(0, rx1338_pos, $I10)
+  rxscan1341_done:
+.annotate 'line', 564
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1313_fail
-    rx1309_cur."!mark_push"(0, rx1309_pos, $I10)
+    set_addr $I10, rxcap_1342_fail
+    rx1338_cur."!mark_push"(0, rx1338_pos, $I10)
   # rx literal  "last"
-    add $I11, rx1309_pos, 4
-    gt $I11, rx1309_eos, rx1309_fail
-    sub $I11, rx1309_pos, rx1309_off
-    substr $S10, rx1309_tgt, $I11, 4
-    ne $S10, "last", rx1309_fail
-    add rx1309_pos, 4
-    set_addr $I10, rxcap_1313_fail
-    ($I12, $I11) = rx1309_cur."!mark_peek"($I10)
-    rx1309_cur."!cursor_pos"($I11)
-    ($P10) = rx1309_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1309_pos, "")
-    rx1309_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1338_pos, 4
+    gt $I11, rx1338_eos, rx1338_fail
+    sub $I11, rx1338_pos, rx1338_off
+    substr $S10, rx1338_tgt, $I11, 4
+    ne $S10, "last", rx1338_fail
+    add rx1338_pos, 4
+    set_addr $I10, rxcap_1342_fail
+    ($I12, $I11) = rx1338_cur."!mark_peek"($I10)
+    rx1338_cur."!cursor_pos"($I11)
+    ($P10) = rx1338_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1338_pos, "")
+    rx1338_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1313_done
-  rxcap_1313_fail:
-    goto rx1309_fail
-  rxcap_1313_done:
-  # rx pass
-    rx1309_cur."!cursor_pass"(rx1309_pos, "term:sym<last>")
-    if_null rx1309_debug, debug_1009
-    rx1309_cur."!cursor_debug"("PASS", "term:sym<last>", " at pos=", rx1309_pos)
-  debug_1009:
-    .return (rx1309_cur)
-  rx1309_restart:
-.annotate 'line', 447
-    if_null rx1309_debug, debug_1010
-    rx1309_cur."!cursor_debug"("NEXT", "term:sym<last>")
-  debug_1010:
-  rx1309_fail:
-    (rx1309_rep, rx1309_pos, $I10, $P10) = rx1309_cur."!mark_fail"(0)
-    lt rx1309_pos, -1, rx1309_done
-    eq rx1309_pos, -1, rx1309_fail
-    jump $I10
-  rx1309_done:
-    rx1309_cur."!cursor_fail"()
-    if_null rx1309_debug, debug_1011
-    rx1309_cur."!cursor_debug"("FAIL", "term:sym<last>")
-  debug_1011:
-    .return (rx1309_cur)
+    goto rxcap_1342_done
+  rxcap_1342_fail:
+    goto rx1338_fail
+  rxcap_1342_done:
+  # rx pass
+    rx1338_cur."!cursor_pass"(rx1338_pos, "term:sym<last>")
+    if_null rx1338_debug, debug_1023
+    rx1338_cur."!cursor_debug"("PASS", "term:sym<last>", " at pos=", rx1338_pos)
+  debug_1023:
+    .return (rx1338_cur)
+  rx1338_restart:
+.annotate 'line', 454
+    if_null rx1338_debug, debug_1024
+    rx1338_cur."!cursor_debug"("NEXT", "term:sym<last>")
+  debug_1024:
+  rx1338_fail:
+    (rx1338_rep, rx1338_pos, $I10, $P10) = rx1338_cur."!mark_fail"(0)
+    lt rx1338_pos, -1, rx1338_done
+    eq rx1338_pos, -1, rx1338_fail
+    jump $I10
+  rx1338_done:
+    rx1338_cur."!cursor_fail"()
+    if_null rx1338_debug, debug_1025
+    rx1338_cur."!cursor_debug"("FAIL", "term:sym<last>")
+  debug_1025:
+    .return (rx1338_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<last>"  :subid("343_1282324002.40722") :method
-.annotate 'line', 447
-    new $P1311, "ResizablePMCArray"
-    push $P1311, "last"
-    .return ($P1311)
+.sub "!PREFIX__term:sym<last>"  :subid("349_1284728478.15265") :method
+.annotate 'line', 454
+    new $P1340, "ResizablePMCArray"
+    push $P1340, "last"
+    .return ($P1340)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<next>"  :subid("344_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1315_tgt
-    .local int rx1315_pos
-    .local int rx1315_off
-    .local int rx1315_eos
-    .local int rx1315_rep
-    .local pmc rx1315_cur
-    .local pmc rx1315_debug
-    (rx1315_cur, rx1315_pos, rx1315_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1315_debug, rx1315_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1315_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1315_eos, rx1315_tgt
-    gt rx1315_pos, rx1315_eos, rx1315_done
-    set rx1315_off, 0
-    lt rx1315_pos, 2, rx1315_start
-    sub rx1315_off, rx1315_pos, 1
-    substr rx1315_tgt, rx1315_tgt, rx1315_off
-  rx1315_start:
-    eq $I10, 1, rx1315_restart
-    if_null rx1315_debug, debug_1012
-    rx1315_cur."!cursor_debug"("START", "term:sym<next>")
-  debug_1012:
+.sub "term:sym<next>"  :subid("350_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1344_tgt
+    .local int rx1344_pos
+    .local int rx1344_off
+    .local int rx1344_eos
+    .local int rx1344_rep
+    .local pmc rx1344_cur
+    .local pmc rx1344_debug
+    (rx1344_cur, rx1344_pos, rx1344_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1344_debug, rx1344_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1344_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1344_eos, rx1344_tgt
+    gt rx1344_pos, rx1344_eos, rx1344_done
+    set rx1344_off, 0
+    lt rx1344_pos, 2, rx1344_start
+    sub rx1344_off, rx1344_pos, 1
+    substr rx1344_tgt, rx1344_tgt, rx1344_off
+  rx1344_start:
+    eq $I10, 1, rx1344_restart
+    if_null rx1344_debug, debug_1026
+    rx1344_cur."!cursor_debug"("START", "term:sym<next>")
+  debug_1026:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1318_done
-    goto rxscan1318_scan
-  rxscan1318_loop:
-    ($P10) = rx1315_cur."from"()
-    inc $P10
-    set rx1315_pos, $P10
-    ge rx1315_pos, rx1315_eos, rxscan1318_done
-  rxscan1318_scan:
-    set_addr $I10, rxscan1318_loop
-    rx1315_cur."!mark_push"(0, rx1315_pos, $I10)
-  rxscan1318_done:
-.annotate 'line', 558
+    ne $I10, -1, rxscan1347_done
+    goto rxscan1347_scan
+  rxscan1347_loop:
+    ($P10) = rx1344_cur."from"()
+    inc $P10
+    set rx1344_pos, $P10
+    ge rx1344_pos, rx1344_eos, rxscan1347_done
+  rxscan1347_scan:
+    set_addr $I10, rxscan1347_loop
+    rx1344_cur."!mark_push"(0, rx1344_pos, $I10)
+  rxscan1347_done:
+.annotate 'line', 565
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1319_fail
-    rx1315_cur."!mark_push"(0, rx1315_pos, $I10)
+    set_addr $I10, rxcap_1348_fail
+    rx1344_cur."!mark_push"(0, rx1344_pos, $I10)
   # rx literal  "next"
-    add $I11, rx1315_pos, 4
-    gt $I11, rx1315_eos, rx1315_fail
-    sub $I11, rx1315_pos, rx1315_off
-    substr $S10, rx1315_tgt, $I11, 4
-    ne $S10, "next", rx1315_fail
-    add rx1315_pos, 4
-    set_addr $I10, rxcap_1319_fail
-    ($I12, $I11) = rx1315_cur."!mark_peek"($I10)
-    rx1315_cur."!cursor_pos"($I11)
-    ($P10) = rx1315_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1315_pos, "")
-    rx1315_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1344_pos, 4
+    gt $I11, rx1344_eos, rx1344_fail
+    sub $I11, rx1344_pos, rx1344_off
+    substr $S10, rx1344_tgt, $I11, 4
+    ne $S10, "next", rx1344_fail
+    add rx1344_pos, 4
+    set_addr $I10, rxcap_1348_fail
+    ($I12, $I11) = rx1344_cur."!mark_peek"($I10)
+    rx1344_cur."!cursor_pos"($I11)
+    ($P10) = rx1344_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1344_pos, "")
+    rx1344_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1319_done
-  rxcap_1319_fail:
-    goto rx1315_fail
-  rxcap_1319_done:
-  # rx pass
-    rx1315_cur."!cursor_pass"(rx1315_pos, "term:sym<next>")
-    if_null rx1315_debug, debug_1013
-    rx1315_cur."!cursor_debug"("PASS", "term:sym<next>", " at pos=", rx1315_pos)
-  debug_1013:
-    .return (rx1315_cur)
-  rx1315_restart:
-.annotate 'line', 447
-    if_null rx1315_debug, debug_1014
-    rx1315_cur."!cursor_debug"("NEXT", "term:sym<next>")
-  debug_1014:
-  rx1315_fail:
-    (rx1315_rep, rx1315_pos, $I10, $P10) = rx1315_cur."!mark_fail"(0)
-    lt rx1315_pos, -1, rx1315_done
-    eq rx1315_pos, -1, rx1315_fail
-    jump $I10
-  rx1315_done:
-    rx1315_cur."!cursor_fail"()
-    if_null rx1315_debug, debug_1015
-    rx1315_cur."!cursor_debug"("FAIL", "term:sym<next>")
-  debug_1015:
-    .return (rx1315_cur)
+    goto rxcap_1348_done
+  rxcap_1348_fail:
+    goto rx1344_fail
+  rxcap_1348_done:
+  # rx pass
+    rx1344_cur."!cursor_pass"(rx1344_pos, "term:sym<next>")
+    if_null rx1344_debug, debug_1027
+    rx1344_cur."!cursor_debug"("PASS", "term:sym<next>", " at pos=", rx1344_pos)
+  debug_1027:
+    .return (rx1344_cur)
+  rx1344_restart:
+.annotate 'line', 454
+    if_null rx1344_debug, debug_1028
+    rx1344_cur."!cursor_debug"("NEXT", "term:sym<next>")
+  debug_1028:
+  rx1344_fail:
+    (rx1344_rep, rx1344_pos, $I10, $P10) = rx1344_cur."!mark_fail"(0)
+    lt rx1344_pos, -1, rx1344_done
+    eq rx1344_pos, -1, rx1344_fail
+    jump $I10
+  rx1344_done:
+    rx1344_cur."!cursor_fail"()
+    if_null rx1344_debug, debug_1029
+    rx1344_cur."!cursor_debug"("FAIL", "term:sym<next>")
+  debug_1029:
+    .return (rx1344_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<next>"  :subid("345_1282324002.40722") :method
-.annotate 'line', 447
-    new $P1317, "ResizablePMCArray"
-    push $P1317, "next"
-    .return ($P1317)
+.sub "!PREFIX__term:sym<next>"  :subid("351_1284728478.15265") :method
+.annotate 'line', 454
+    new $P1346, "ResizablePMCArray"
+    push $P1346, "next"
+    .return ($P1346)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<redo>"  :subid("346_1282324002.40722") :method :outer("11_1282324002.40722")
-.annotate 'line', 447
-    .local string rx1321_tgt
-    .local int rx1321_pos
-    .local int rx1321_off
-    .local int rx1321_eos
-    .local int rx1321_rep
-    .local pmc rx1321_cur
-    .local pmc rx1321_debug
-    (rx1321_cur, rx1321_pos, rx1321_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1321_debug, rx1321_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1321_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1321_eos, rx1321_tgt
-    gt rx1321_pos, rx1321_eos, rx1321_done
-    set rx1321_off, 0
-    lt rx1321_pos, 2, rx1321_start
-    sub rx1321_off, rx1321_pos, 1
-    substr rx1321_tgt, rx1321_tgt, rx1321_off
-  rx1321_start:
-    eq $I10, 1, rx1321_restart
-    if_null rx1321_debug, debug_1016
-    rx1321_cur."!cursor_debug"("START", "term:sym<redo>")
-  debug_1016:
+.sub "term:sym<redo>"  :subid("352_1284728478.15265") :method :outer("11_1284728478.15265")
+.annotate 'line', 454
+    .local string rx1350_tgt
+    .local int rx1350_pos
+    .local int rx1350_off
+    .local int rx1350_eos
+    .local int rx1350_rep
+    .local pmc rx1350_cur
+    .local pmc rx1350_debug
+    (rx1350_cur, rx1350_pos, rx1350_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1350_debug, rx1350_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1350_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1350_eos, rx1350_tgt
+    gt rx1350_pos, rx1350_eos, rx1350_done
+    set rx1350_off, 0
+    lt rx1350_pos, 2, rx1350_start
+    sub rx1350_off, rx1350_pos, 1
+    substr rx1350_tgt, rx1350_tgt, rx1350_off
+  rx1350_start:
+    eq $I10, 1, rx1350_restart
+    if_null rx1350_debug, debug_1030
+    rx1350_cur."!cursor_debug"("START", "term:sym<redo>")
+  debug_1030:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1324_done
-    goto rxscan1324_scan
-  rxscan1324_loop:
-    ($P10) = rx1321_cur."from"()
-    inc $P10
-    set rx1321_pos, $P10
-    ge rx1321_pos, rx1321_eos, rxscan1324_done
-  rxscan1324_scan:
-    set_addr $I10, rxscan1324_loop
-    rx1321_cur."!mark_push"(0, rx1321_pos, $I10)
-  rxscan1324_done:
-.annotate 'line', 559
+    ne $I10, -1, rxscan1353_done
+    goto rxscan1353_scan
+  rxscan1353_loop:
+    ($P10) = rx1350_cur."from"()
+    inc $P10
+    set rx1350_pos, $P10
+    ge rx1350_pos, rx1350_eos, rxscan1353_done
+  rxscan1353_scan:
+    set_addr $I10, rxscan1353_loop
+    rx1350_cur."!mark_push"(0, rx1350_pos, $I10)
+  rxscan1353_done:
+.annotate 'line', 566
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1325_fail
-    rx1321_cur."!mark_push"(0, rx1321_pos, $I10)
+    set_addr $I10, rxcap_1354_fail
+    rx1350_cur."!mark_push"(0, rx1350_pos, $I10)
   # rx literal  "redo"
-    add $I11, rx1321_pos, 4
-    gt $I11, rx1321_eos, rx1321_fail
-    sub $I11, rx1321_pos, rx1321_off
-    substr $S10, rx1321_tgt, $I11, 4
-    ne $S10, "redo", rx1321_fail
-    add rx1321_pos, 4
-    set_addr $I10, rxcap_1325_fail
-    ($I12, $I11) = rx1321_cur."!mark_peek"($I10)
-    rx1321_cur."!cursor_pos"($I11)
-    ($P10) = rx1321_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1321_pos, "")
-    rx1321_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1350_pos, 4
+    gt $I11, rx1350_eos, rx1350_fail
+    sub $I11, rx1350_pos, rx1350_off
+    substr $S10, rx1350_tgt, $I11, 4
+    ne $S10, "redo", rx1350_fail
+    add rx1350_pos, 4
+    set_addr $I10, rxcap_1354_fail
+    ($I12, $I11) = rx1350_cur."!mark_peek"($I10)
+    rx1350_cur."!cursor_pos"($I11)
+    ($P10) = rx1350_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1350_pos, "")
+    rx1350_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1325_done
-  rxcap_1325_fail:
-    goto rx1321_fail
-  rxcap_1325_done:
-  # rx pass
-    rx1321_cur."!cursor_pass"(rx1321_pos, "term:sym<redo>")
-    if_null rx1321_debug, debug_1017
-    rx1321_cur."!cursor_debug"("PASS", "term:sym<redo>", " at pos=", rx1321_pos)
-  debug_1017:
-    .return (rx1321_cur)
-  rx1321_restart:
-.annotate 'line', 447
-    if_null rx1321_debug, debug_1018
-    rx1321_cur."!cursor_debug"("NEXT", "term:sym<redo>")
-  debug_1018:
-  rx1321_fail:
-    (rx1321_rep, rx1321_pos, $I10, $P10) = rx1321_cur."!mark_fail"(0)
-    lt rx1321_pos, -1, rx1321_done
-    eq rx1321_pos, -1, rx1321_fail
-    jump $I10
-  rx1321_done:
-    rx1321_cur."!cursor_fail"()
-    if_null rx1321_debug, debug_1019
-    rx1321_cur."!cursor_debug"("FAIL", "term:sym<redo>")
-  debug_1019:
-    .return (rx1321_cur)
+    goto rxcap_1354_done
+  rxcap_1354_fail:
+    goto rx1350_fail
+  rxcap_1354_done:
+  # rx pass
+    rx1350_cur."!cursor_pass"(rx1350_pos, "term:sym<redo>")
+    if_null rx1350_debug, debug_1031
+    rx1350_cur."!cursor_debug"("PASS", "term:sym<redo>", " at pos=", rx1350_pos)
+  debug_1031:
+    .return (rx1350_cur)
+  rx1350_restart:
+.annotate 'line', 454
+    if_null rx1350_debug, debug_1032
+    rx1350_cur."!cursor_debug"("NEXT", "term:sym<redo>")
+  debug_1032:
+  rx1350_fail:
+    (rx1350_rep, rx1350_pos, $I10, $P10) = rx1350_cur."!mark_fail"(0)
+    lt rx1350_pos, -1, rx1350_done
+    eq rx1350_pos, -1, rx1350_fail
+    jump $I10
+  rx1350_done:
+    rx1350_cur."!cursor_fail"()
+    if_null rx1350_debug, debug_1033
+    rx1350_cur."!cursor_debug"("FAIL", "term:sym<redo>")
+  debug_1033:
+    .return (rx1350_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<redo>"  :subid("347_1282324002.40722") :method
-.annotate 'line', 447
-    new $P1323, "ResizablePMCArray"
-    push $P1323, "redo"
-    .return ($P1323)
+.sub "!PREFIX__term:sym<redo>"  :subid("353_1284728478.15265") :method
+.annotate 'line', 454
+    new $P1352, "ResizablePMCArray"
+    push $P1352, "redo"
+    .return ($P1352)
 .end
 
 
 .namespace ["NQP";"Grammar"]
 .include "except_types.pasm"
-.sub "smartmatch"  :subid("348_1282324002.40722") :method :outer("11_1282324002.40722")
-    .param pmc param_1329
-.annotate 'line', 561
-    new $P1328, 'ExceptionHandler'
-    set_addr $P1328, control_1327
-    $P1328."handle_types"(.CONTROL_RETURN)
-    push_eh $P1328
-    .lex "self", self
-    .lex "$/", param_1329
-.annotate 'line', 563
-    new $P1330, "Undef"
-    .lex "$t", $P1330
-    find_lex $P1331, "$/"
-    unless_null $P1331, vivify_1020
-    $P1331 = root_new ['parrot';'ResizablePMCArray']
-  vivify_1020:
-    set $P1332, $P1331[0]
-    unless_null $P1332, vivify_1021
-    new $P1332, "Undef"
-  vivify_1021:
-    store_lex "$t", $P1332
-    find_lex $P1333, "$/"
-    unless_null $P1333, vivify_1022
-    $P1333 = root_new ['parrot';'ResizablePMCArray']
-  vivify_1022:
-    set $P1334, $P1333[1]
-    unless_null $P1334, vivify_1023
-    new $P1334, "Undef"
-  vivify_1023:
-    find_lex $P1335, "$/"
-    unless_null $P1335, vivify_1024
-    $P1335 = root_new ['parrot';'ResizablePMCArray']
-    store_lex "$/", $P1335
-  vivify_1024:
-    set $P1335[0], $P1334
-    find_lex $P1336, "$t"
-    find_lex $P1337, "$/"
-    unless_null $P1337, vivify_1025
-    $P1337 = root_new ['parrot';'ResizablePMCArray']
-    store_lex "$/", $P1337
-  vivify_1025:
-    set $P1337[1], $P1336
-.annotate 'line', 561
-    .return ($P1336)
-  control_1327:
+.sub "smartmatch"  :subid("354_1284728478.15265") :method :outer("11_1284728478.15265")
+    .param pmc param_1358
+.annotate 'line', 568
+    new $P1357, 'ExceptionHandler'
+    set_addr $P1357, control_1356
+    $P1357."handle_types"(.CONTROL_RETURN)
+    push_eh $P1357
+    .lex "self", self
+    .lex "$/", param_1358
+.annotate 'line', 570
+    new $P1359, "Undef"
+    .lex "$t", $P1359
+    find_lex $P1360, "$/"
+    unless_null $P1360, vivify_1034
+    $P1360 = root_new ['parrot';'ResizablePMCArray']
+  vivify_1034:
+    set $P1361, $P1360[0]
+    unless_null $P1361, vivify_1035
+    new $P1361, "Undef"
+  vivify_1035:
+    store_lex "$t", $P1361
+    find_lex $P1362, "$/"
+    unless_null $P1362, vivify_1036
+    $P1362 = root_new ['parrot';'ResizablePMCArray']
+  vivify_1036:
+    set $P1363, $P1362[1]
+    unless_null $P1363, vivify_1037
+    new $P1363, "Undef"
+  vivify_1037:
+    find_lex $P1364, "$/"
+    unless_null $P1364, vivify_1038
+    $P1364 = root_new ['parrot';'ResizablePMCArray']
+    store_lex "$/", $P1364
+  vivify_1038:
+    set $P1364[0], $P1363
+    find_lex $P1365, "$t"
+    find_lex $P1366, "$/"
+    unless_null $P1366, vivify_1039
+    $P1366 = root_new ['parrot';'ResizablePMCArray']
+    store_lex "$/", $P1366
+  vivify_1039:
+    set $P1366[1], $P1365
+.annotate 'line', 568
+    .return ($P1365)
+  control_1356:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1338, exception, "payload"
-    .return ($P1338)
+    getattribute $P1367, exception, "payload"
+    .return ($P1367)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "_block1339"  :subid("349_1282324002.40722") :outer("11_1282324002.40722")
-.annotate 'line', 567
-    .const 'Sub' $P1396 = "368_1282324002.40722" 
-    capture_lex $P1396
-    .const 'Sub' $P1391 = "366_1282324002.40722" 
-    capture_lex $P1391
-    .const 'Sub' $P1379 = "363_1282324002.40722" 
+.sub "_block1368"  :subid("355_1284728478.15265") :outer("11_1284728478.15265")
+.annotate 'line', 574
+    .const 'Sub' $P1425 = "374_1284728478.15265" 
+    capture_lex $P1425
+    .const 'Sub' $P1420 = "372_1284728478.15265" 
+    capture_lex $P1420
+    .const 'Sub' $P1408 = "369_1284728478.15265" 
+    capture_lex $P1408
+    .const 'Sub' $P1398 = "366_1284728478.15265" 
+    capture_lex $P1398
+    .const 'Sub' $P1393 = "364_1284728478.15265" 
+    capture_lex $P1393
+    .const 'Sub' $P1384 = "361_1284728478.15265" 
+    capture_lex $P1384
+    .const 'Sub' $P1379 = "359_1284728478.15265" 
     capture_lex $P1379
-    .const 'Sub' $P1369 = "360_1282324002.40722" 
-    capture_lex $P1369
-    .const 'Sub' $P1364 = "358_1282324002.40722" 
-    capture_lex $P1364
-    .const 'Sub' $P1355 = "355_1282324002.40722" 
-    capture_lex $P1355
-    .const 'Sub' $P1350 = "353_1282324002.40722" 
-    capture_lex $P1350
-    .const 'Sub' $P1341 = "350_1282324002.40722" 
-    capture_lex $P1341
-    .const 'Sub' $P1396 = "368_1282324002.40722" 
-    capture_lex $P1396
-    .return ($P1396)
+    .const 'Sub' $P1370 = "356_1284728478.15265" 
+    capture_lex $P1370
+    .const 'Sub' $P1425 = "374_1284728478.15265" 
+    capture_lex $P1425
+    .return ($P1425)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "metachar:sym<:my>"  :subid("350_1282324002.40722") :method :outer("349_1282324002.40722")
-.annotate 'line', 567
-    .const 'Sub' $P1347 = "352_1282324002.40722" 
-    capture_lex $P1347
-    .local string rx1342_tgt
-    .local int rx1342_pos
-    .local int rx1342_off
-    .local int rx1342_eos
-    .local int rx1342_rep
-    .local pmc rx1342_cur
-    .local pmc rx1342_debug
-    (rx1342_cur, rx1342_pos, rx1342_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1342_debug, rx1342_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1342_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1342_eos, rx1342_tgt
-    gt rx1342_pos, rx1342_eos, rx1342_done
-    set rx1342_off, 0
-    lt rx1342_pos, 2, rx1342_start
-    sub rx1342_off, rx1342_pos, 1
-    substr rx1342_tgt, rx1342_tgt, rx1342_off
-  rx1342_start:
-    eq $I10, 1, rx1342_restart
-    if_null rx1342_debug, debug_1026
-    rx1342_cur."!cursor_debug"("START", "metachar:sym<:my>")
-  debug_1026:
+.sub "metachar:sym<:my>"  :subid("356_1284728478.15265") :method :outer("355_1284728478.15265")
+.annotate 'line', 574
+    .const 'Sub' $P1376 = "358_1284728478.15265" 
+    capture_lex $P1376
+    .local string rx1371_tgt
+    .local int rx1371_pos
+    .local int rx1371_off
+    .local int rx1371_eos
+    .local int rx1371_rep
+    .local pmc rx1371_cur
+    .local pmc rx1371_debug
+    (rx1371_cur, rx1371_pos, rx1371_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1371_debug, rx1371_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1371_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1371_eos, rx1371_tgt
+    gt rx1371_pos, rx1371_eos, rx1371_done
+    set rx1371_off, 0
+    lt rx1371_pos, 2, rx1371_start
+    sub rx1371_off, rx1371_pos, 1
+    substr rx1371_tgt, rx1371_tgt, rx1371_off
+  rx1371_start:
+    eq $I10, 1, rx1371_restart
+    if_null rx1371_debug, debug_1040
+    rx1371_cur."!cursor_debug"("START", "metachar:sym<:my>")
+  debug_1040:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1345_done
-    goto rxscan1345_scan
-  rxscan1345_loop:
-    ($P10) = rx1342_cur."from"()
-    inc $P10
-    set rx1342_pos, $P10
-    ge rx1342_pos, rx1342_eos, rxscan1345_done
-  rxscan1345_scan:
-    set_addr $I10, rxscan1345_loop
-    rx1342_cur."!mark_push"(0, rx1342_pos, $I10)
-  rxscan1345_done:
-.annotate 'line', 569
+    ne $I10, -1, rxscan1374_done
+    goto rxscan1374_scan
+  rxscan1374_loop:
+    ($P10) = rx1371_cur."from"()
+    inc $P10
+    set rx1371_pos, $P10
+    ge rx1371_pos, rx1371_eos, rxscan1374_done
+  rxscan1374_scan:
+    set_addr $I10, rxscan1374_loop
+    rx1371_cur."!mark_push"(0, rx1371_pos, $I10)
+  rxscan1374_done:
+.annotate 'line', 576
   # rx literal  ":"
-    add $I11, rx1342_pos, 1
-    gt $I11, rx1342_eos, rx1342_fail
-    sub $I11, rx1342_pos, rx1342_off
-    ord $I11, rx1342_tgt, $I11
-    ne $I11, 58, rx1342_fail
-    add rx1342_pos, 1
+    add $I11, rx1371_pos, 1
+    gt $I11, rx1371_eos, rx1371_fail
+    sub $I11, rx1371_pos, rx1371_off
+    ord $I11, rx1371_tgt, $I11
+    ne $I11, 58, rx1371_fail
+    add rx1371_pos, 1
   # rx subrule "before" subtype=zerowidth negate=
-    rx1342_cur."!cursor_pos"(rx1342_pos)
-    .const 'Sub' $P1347 = "352_1282324002.40722" 
-    capture_lex $P1347
-    $P10 = rx1342_cur."before"($P1347)
-    unless $P10, rx1342_fail
+    rx1371_cur."!cursor_pos"(rx1371_pos)
+    .const 'Sub' $P1376 = "358_1284728478.15265" 
+    capture_lex $P1376
+    $P10 = rx1371_cur."before"($P1376)
+    unless $P10, rx1371_fail
   # rx subrule "LANG" subtype=capture negate=
-    rx1342_cur."!cursor_pos"(rx1342_pos)
-    $P10 = rx1342_cur."LANG"("MAIN", "statement")
-    unless $P10, rx1342_fail
-    rx1342_cur."!mark_push"(0, -1, 0, $P10)
+    rx1371_cur."!cursor_pos"(rx1371_pos)
+    $P10 = rx1371_cur."LANG"("MAIN", "statement")
+    unless $P10, rx1371_fail
+    rx1371_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement")
-    rx1342_pos = $P10."pos"()
+    rx1371_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx1342_cur."!cursor_pos"(rx1342_pos)
-    $P10 = rx1342_cur."ws"()
-    unless $P10, rx1342_fail
-    rx1342_pos = $P10."pos"()
+    rx1371_cur."!cursor_pos"(rx1371_pos)
+    $P10 = rx1371_cur."ws"()
+    unless $P10, rx1371_fail
+    rx1371_pos = $P10."pos"()
   # rx literal  ";"
-    add $I11, rx1342_pos, 1
-    gt $I11, rx1342_eos, rx1342_fail
-    sub $I11, rx1342_pos, rx1342_off
-    ord $I11, rx1342_tgt, $I11
-    ne $I11, 59, rx1342_fail
-    add rx1342_pos, 1
-.annotate 'line', 568
+    add $I11, rx1371_pos, 1
+    gt $I11, rx1371_eos, rx1371_fail
+    sub $I11, rx1371_pos, rx1371_off
+    ord $I11, rx1371_tgt, $I11
+    ne $I11, 59, rx1371_fail
+    add rx1371_pos, 1
+.annotate 'line', 575
   # rx pass
-    rx1342_cur."!cursor_pass"(rx1342_pos, "metachar:sym<:my>")
-    if_null rx1342_debug, debug_1031
-    rx1342_cur."!cursor_debug"("PASS", "metachar:sym<:my>", " at pos=", rx1342_pos)
-  debug_1031:
-    .return (rx1342_cur)
-  rx1342_restart:
-.annotate 'line', 567
-    if_null rx1342_debug, debug_1032
-    rx1342_cur."!cursor_debug"("NEXT", "metachar:sym<:my>")
-  debug_1032:
-  rx1342_fail:
-    (rx1342_rep, rx1342_pos, $I10, $P10) = rx1342_cur."!mark_fail"(0)
-    lt rx1342_pos, -1, rx1342_done
-    eq rx1342_pos, -1, rx1342_fail
-    jump $I10
-  rx1342_done:
-    rx1342_cur."!cursor_fail"()
-    if_null rx1342_debug, debug_1033
-    rx1342_cur."!cursor_debug"("FAIL", "metachar:sym<:my>")
-  debug_1033:
-    .return (rx1342_cur)
+    rx1371_cur."!cursor_pass"(rx1371_pos, "metachar:sym<:my>")
+    if_null rx1371_debug, debug_1045
+    rx1371_cur."!cursor_debug"("PASS", "metachar:sym<:my>", " at pos=", rx1371_pos)
+  debug_1045:
+    .return (rx1371_cur)
+  rx1371_restart:
+.annotate 'line', 574
+    if_null rx1371_debug, debug_1046
+    rx1371_cur."!cursor_debug"("NEXT", "metachar:sym<:my>")
+  debug_1046:
+  rx1371_fail:
+    (rx1371_rep, rx1371_pos, $I10, $P10) = rx1371_cur."!mark_fail"(0)
+    lt rx1371_pos, -1, rx1371_done
+    eq rx1371_pos, -1, rx1371_fail
+    jump $I10
+  rx1371_done:
+    rx1371_cur."!cursor_fail"()
+    if_null rx1371_debug, debug_1047
+    rx1371_cur."!cursor_debug"("FAIL", "metachar:sym<:my>")
+  debug_1047:
+    .return (rx1371_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__metachar:sym<:my>"  :subid("351_1282324002.40722") :method
-.annotate 'line', 567
-    new $P1344, "ResizablePMCArray"
-    push $P1344, ":"
-    .return ($P1344)
+.sub "!PREFIX__metachar:sym<:my>"  :subid("357_1284728478.15265") :method
+.annotate 'line', 574
+    new $P1373, "ResizablePMCArray"
+    push $P1373, ":"
+    .return ($P1373)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "_block1346"  :anon :subid("352_1282324002.40722") :method :outer("350_1282324002.40722")
-.annotate 'line', 569
-    .local string rx1348_tgt
-    .local int rx1348_pos
-    .local int rx1348_off
-    .local int rx1348_eos
-    .local int rx1348_rep
-    .local pmc rx1348_cur
-    .local pmc rx1348_debug
-    (rx1348_cur, rx1348_pos, rx1348_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1348_debug, rx1348_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1348_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1348_eos, rx1348_tgt
-    gt rx1348_pos, rx1348_eos, rx1348_done
-    set rx1348_off, 0
-    lt rx1348_pos, 2, rx1348_start
-    sub rx1348_off, rx1348_pos, 1
-    substr rx1348_tgt, rx1348_tgt, rx1348_off
-  rx1348_start:
-    eq $I10, 1, rx1348_restart
-    if_null rx1348_debug, debug_1027
-    rx1348_cur."!cursor_debug"("START", "")
-  debug_1027:
+.sub "_block1375"  :anon :subid("358_1284728478.15265") :method :outer("356_1284728478.15265")
+.annotate 'line', 576
+    .local string rx1377_tgt
+    .local int rx1377_pos
+    .local int rx1377_off
+    .local int rx1377_eos
+    .local int rx1377_rep
+    .local pmc rx1377_cur
+    .local pmc rx1377_debug
+    (rx1377_cur, rx1377_pos, rx1377_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1377_debug, rx1377_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1377_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1377_eos, rx1377_tgt
+    gt rx1377_pos, rx1377_eos, rx1377_done
+    set rx1377_off, 0
+    lt rx1377_pos, 2, rx1377_start
+    sub rx1377_off, rx1377_pos, 1
+    substr rx1377_tgt, rx1377_tgt, rx1377_off
+  rx1377_start:
+    eq $I10, 1, rx1377_restart
+    if_null rx1377_debug, debug_1041
+    rx1377_cur."!cursor_debug"("START", "")
+  debug_1041:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1349_done
-    goto rxscan1349_scan
-  rxscan1349_loop:
-    ($P10) = rx1348_cur."from"()
-    inc $P10
-    set rx1348_pos, $P10
-    ge rx1348_pos, rx1348_eos, rxscan1349_done
-  rxscan1349_scan:
-    set_addr $I10, rxscan1349_loop
-    rx1348_cur."!mark_push"(0, rx1348_pos, $I10)
-  rxscan1349_done:
+    ne $I10, -1, rxscan1378_done
+    goto rxscan1378_scan
+  rxscan1378_loop:
+    ($P10) = rx1377_cur."from"()
+    inc $P10
+    set rx1377_pos, $P10
+    ge rx1377_pos, rx1377_eos, rxscan1378_done
+  rxscan1378_scan:
+    set_addr $I10, rxscan1378_loop
+    rx1377_cur."!mark_push"(0, rx1377_pos, $I10)
+  rxscan1378_done:
   # rx literal  "my"
-    add $I11, rx1348_pos, 2
-    gt $I11, rx1348_eos, rx1348_fail
-    sub $I11, rx1348_pos, rx1348_off
-    substr $S10, rx1348_tgt, $I11, 2
-    ne $S10, "my", rx1348_fail
-    add rx1348_pos, 2
-  # rx pass
-    rx1348_cur."!cursor_pass"(rx1348_pos, "")
-    if_null rx1348_debug, debug_1028
-    rx1348_cur."!cursor_debug"("PASS", "", " at pos=", rx1348_pos)
-  debug_1028:
-    .return (rx1348_cur)
-  rx1348_restart:
-    if_null rx1348_debug, debug_1029
-    rx1348_cur."!cursor_debug"("NEXT", "")
-  debug_1029:
-  rx1348_fail:
-    (rx1348_rep, rx1348_pos, $I10, $P10) = rx1348_cur."!mark_fail"(0)
-    lt rx1348_pos, -1, rx1348_done
-    eq rx1348_pos, -1, rx1348_fail
-    jump $I10
-  rx1348_done:
-    rx1348_cur."!cursor_fail"()
-    if_null rx1348_debug, debug_1030
-    rx1348_cur."!cursor_debug"("FAIL", "")
-  debug_1030:
-    .return (rx1348_cur)
+    add $I11, rx1377_pos, 2
+    gt $I11, rx1377_eos, rx1377_fail
+    sub $I11, rx1377_pos, rx1377_off
+    substr $S10, rx1377_tgt, $I11, 2
+    ne $S10, "my", rx1377_fail
+    add rx1377_pos, 2
+  # rx pass
+    rx1377_cur."!cursor_pass"(rx1377_pos, "")
+    if_null rx1377_debug, debug_1042
+    rx1377_cur."!cursor_debug"("PASS", "", " at pos=", rx1377_pos)
+  debug_1042:
+    .return (rx1377_cur)
+  rx1377_restart:
+    if_null rx1377_debug, debug_1043
+    rx1377_cur."!cursor_debug"("NEXT", "")
+  debug_1043:
+  rx1377_fail:
+    (rx1377_rep, rx1377_pos, $I10, $P10) = rx1377_cur."!mark_fail"(0)
+    lt rx1377_pos, -1, rx1377_done
+    eq rx1377_pos, -1, rx1377_fail
+    jump $I10
+  rx1377_done:
+    rx1377_cur."!cursor_fail"()
+    if_null rx1377_debug, debug_1044
+    rx1377_cur."!cursor_debug"("FAIL", "")
+  debug_1044:
+    .return (rx1377_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "metachar:sym<{ }>"  :subid("353_1282324002.40722") :method :outer("349_1282324002.40722")
-.annotate 'line', 567
-    .local string rx1351_tgt
-    .local int rx1351_pos
-    .local int rx1351_off
-    .local int rx1351_eos
-    .local int rx1351_rep
-    .local pmc rx1351_cur
-    .local pmc rx1351_debug
-    (rx1351_cur, rx1351_pos, rx1351_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1351_debug, rx1351_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1351_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1351_eos, rx1351_tgt
-    gt rx1351_pos, rx1351_eos, rx1351_done
-    set rx1351_off, 0
-    lt rx1351_pos, 2, rx1351_start
-    sub rx1351_off, rx1351_pos, 1
-    substr rx1351_tgt, rx1351_tgt, rx1351_off
-  rx1351_start:
-    eq $I10, 1, rx1351_restart
-    if_null rx1351_debug, debug_1034
-    rx1351_cur."!cursor_debug"("START", "metachar:sym<{ }>")
-  debug_1034:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1354_done
-    goto rxscan1354_scan
-  rxscan1354_loop:
-    ($P10) = rx1351_cur."from"()
-    inc $P10
-    set rx1351_pos, $P10
-    ge rx1351_pos, rx1351_eos, rxscan1354_done
-  rxscan1354_scan:
-    set_addr $I10, rxscan1354_loop
-    rx1351_cur."!mark_push"(0, rx1351_pos, $I10)
-  rxscan1354_done:
-.annotate 'line', 573
+.sub "metachar:sym<{ }>"  :subid("359_1284728478.15265") :method :outer("355_1284728478.15265")
+.annotate 'line', 574
+    .local string rx1380_tgt
+    .local int rx1380_pos
+    .local int rx1380_off
+    .local int rx1380_eos
+    .local int rx1380_rep
+    .local pmc rx1380_cur
+    .local pmc rx1380_debug
+    (rx1380_cur, rx1380_pos, rx1380_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1380_debug, rx1380_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1380_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1380_eos, rx1380_tgt
+    gt rx1380_pos, rx1380_eos, rx1380_done
+    set rx1380_off, 0
+    lt rx1380_pos, 2, rx1380_start
+    sub rx1380_off, rx1380_pos, 1
+    substr rx1380_tgt, rx1380_tgt, rx1380_off
+  rx1380_start:
+    eq $I10, 1, rx1380_restart
+    if_null rx1380_debug, debug_1048
+    rx1380_cur."!cursor_debug"("START", "metachar:sym<{ }>")
+  debug_1048:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1383_done
+    goto rxscan1383_scan
+  rxscan1383_loop:
+    ($P10) = rx1380_cur."from"()
+    inc $P10
+    set rx1380_pos, $P10
+    ge rx1380_pos, rx1380_eos, rxscan1383_done
+  rxscan1383_scan:
+    set_addr $I10, rxscan1383_loop
+    rx1380_cur."!mark_push"(0, rx1380_pos, $I10)
+  rxscan1383_done:
+.annotate 'line', 580
   # rx enumcharlist negate=0 zerowidth
-    ge rx1351_pos, rx1351_eos, rx1351_fail
-    sub $I10, rx1351_pos, rx1351_off
-    substr $S10, rx1351_tgt, $I10, 1
+    sub $I10, rx1380_pos, rx1380_off
+    substr $S10, rx1380_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx1351_fail
+    lt $I11, 0, rx1380_fail
   # rx subrule "codeblock" subtype=capture negate=
-    rx1351_cur."!cursor_pos"(rx1351_pos)
-    $P10 = rx1351_cur."codeblock"()
-    unless $P10, rx1351_fail
-    rx1351_cur."!mark_push"(0, -1, 0, $P10)
+    rx1380_cur."!cursor_pos"(rx1380_pos)
+    $P10 = rx1380_cur."codeblock"()
+    unless $P10, rx1380_fail
+    rx1380_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("codeblock")
-    rx1351_pos = $P10."pos"()
-.annotate 'line', 572
+    rx1380_pos = $P10."pos"()
+.annotate 'line', 579
   # rx pass
-    rx1351_cur."!cursor_pass"(rx1351_pos, "metachar:sym<{ }>")
-    if_null rx1351_debug, debug_1035
-    rx1351_cur."!cursor_debug"("PASS", "metachar:sym<{ }>", " at pos=", rx1351_pos)
-  debug_1035:
-    .return (rx1351_cur)
-  rx1351_restart:
-.annotate 'line', 567
-    if_null rx1351_debug, debug_1036
-    rx1351_cur."!cursor_debug"("NEXT", "metachar:sym<{ }>")
-  debug_1036:
-  rx1351_fail:
-    (rx1351_rep, rx1351_pos, $I10, $P10) = rx1351_cur."!mark_fail"(0)
-    lt rx1351_pos, -1, rx1351_done
-    eq rx1351_pos, -1, rx1351_fail
-    jump $I10
-  rx1351_done:
-    rx1351_cur."!cursor_fail"()
-    if_null rx1351_debug, debug_1037
-    rx1351_cur."!cursor_debug"("FAIL", "metachar:sym<{ }>")
-  debug_1037:
-    .return (rx1351_cur)
+    rx1380_cur."!cursor_pass"(rx1380_pos, "metachar:sym<{ }>")
+    if_null rx1380_debug, debug_1049
+    rx1380_cur."!cursor_debug"("PASS", "metachar:sym<{ }>", " at pos=", rx1380_pos)
+  debug_1049:
+    .return (rx1380_cur)
+  rx1380_restart:
+.annotate 'line', 574
+    if_null rx1380_debug, debug_1050
+    rx1380_cur."!cursor_debug"("NEXT", "metachar:sym<{ }>")
+  debug_1050:
+  rx1380_fail:
+    (rx1380_rep, rx1380_pos, $I10, $P10) = rx1380_cur."!mark_fail"(0)
+    lt rx1380_pos, -1, rx1380_done
+    eq rx1380_pos, -1, rx1380_fail
+    jump $I10
+  rx1380_done:
+    rx1380_cur."!cursor_fail"()
+    if_null rx1380_debug, debug_1051
+    rx1380_cur."!cursor_debug"("FAIL", "metachar:sym<{ }>")
+  debug_1051:
+    .return (rx1380_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__metachar:sym<{ }>"  :subid("354_1282324002.40722") :method
-.annotate 'line', 567
-    new $P1353, "ResizablePMCArray"
-    push $P1353, "{"
-    .return ($P1353)
+.sub "!PREFIX__metachar:sym<{ }>"  :subid("360_1284728478.15265") :method
+.annotate 'line', 574
+    new $P1382, "ResizablePMCArray"
+    push $P1382, "{"
+    .return ($P1382)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "metachar:sym<nqpvar>"  :subid("355_1282324002.40722") :method :outer("349_1282324002.40722")
-.annotate 'line', 567
-    .const 'Sub' $P1361 = "357_1282324002.40722" 
-    capture_lex $P1361
-    .local string rx1356_tgt
-    .local int rx1356_pos
-    .local int rx1356_off
-    .local int rx1356_eos
-    .local int rx1356_rep
-    .local pmc rx1356_cur
-    .local pmc rx1356_debug
-    (rx1356_cur, rx1356_pos, rx1356_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1356_debug, rx1356_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1356_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1356_eos, rx1356_tgt
-    gt rx1356_pos, rx1356_eos, rx1356_done
-    set rx1356_off, 0
-    lt rx1356_pos, 2, rx1356_start
-    sub rx1356_off, rx1356_pos, 1
-    substr rx1356_tgt, rx1356_tgt, rx1356_off
-  rx1356_start:
-    eq $I10, 1, rx1356_restart
-    if_null rx1356_debug, debug_1038
-    rx1356_cur."!cursor_debug"("START", "metachar:sym<nqpvar>")
-  debug_1038:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1359_done
-    goto rxscan1359_scan
-  rxscan1359_loop:
-    ($P10) = rx1356_cur."from"()
-    inc $P10
-    set rx1356_pos, $P10
-    ge rx1356_pos, rx1356_eos, rxscan1359_done
-  rxscan1359_scan:
-    set_addr $I10, rxscan1359_loop
-    rx1356_cur."!mark_push"(0, rx1356_pos, $I10)
-  rxscan1359_done:
-.annotate 'line', 577
+.sub "metachar:sym<nqpvar>"  :subid("361_1284728478.15265") :method :outer("355_1284728478.15265")
+.annotate 'line', 574
+    .const 'Sub' $P1390 = "363_1284728478.15265" 
+    capture_lex $P1390
+    .local string rx1385_tgt
+    .local int rx1385_pos
+    .local int rx1385_off
+    .local int rx1385_eos
+    .local int rx1385_rep
+    .local pmc rx1385_cur
+    .local pmc rx1385_debug
+    (rx1385_cur, rx1385_pos, rx1385_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1385_debug, rx1385_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1385_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1385_eos, rx1385_tgt
+    gt rx1385_pos, rx1385_eos, rx1385_done
+    set rx1385_off, 0
+    lt rx1385_pos, 2, rx1385_start
+    sub rx1385_off, rx1385_pos, 1
+    substr rx1385_tgt, rx1385_tgt, rx1385_off
+  rx1385_start:
+    eq $I10, 1, rx1385_restart
+    if_null rx1385_debug, debug_1052
+    rx1385_cur."!cursor_debug"("START", "metachar:sym<nqpvar>")
+  debug_1052:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1388_done
+    goto rxscan1388_scan
+  rxscan1388_loop:
+    ($P10) = rx1385_cur."from"()
+    inc $P10
+    set rx1385_pos, $P10
+    ge rx1385_pos, rx1385_eos, rxscan1388_done
+  rxscan1388_scan:
+    set_addr $I10, rxscan1388_loop
+    rx1385_cur."!mark_push"(0, rx1385_pos, $I10)
+  rxscan1388_done:
+.annotate 'line', 584
   # rx enumcharlist negate=0 zerowidth
-    ge rx1356_pos, rx1356_eos, rx1356_fail
-    sub $I10, rx1356_pos, rx1356_off
-    substr $S10, rx1356_tgt, $I10, 1
+    sub $I10, rx1385_pos, rx1385_off
+    substr $S10, rx1385_tgt, $I10, 1
     index $I11, "$@", $S10
-    lt $I11, 0, rx1356_fail
+    lt $I11, 0, rx1385_fail
   # rx subrule "before" subtype=zerowidth negate=
-    rx1356_cur."!cursor_pos"(rx1356_pos)
-    .const 'Sub' $P1361 = "357_1282324002.40722" 
-    capture_lex $P1361
-    $P10 = rx1356_cur."before"($P1361)
-    unless $P10, rx1356_fail
+    rx1385_cur."!cursor_pos"(rx1385_pos)
+    .const 'Sub' $P1390 = "363_1284728478.15265" 
+    capture_lex $P1390
+    $P10 = rx1385_cur."before"($P1390)
+    unless $P10, rx1385_fail
   # rx subrule "LANG" subtype=capture negate=
-    rx1356_cur."!cursor_pos"(rx1356_pos)
-    $P10 = rx1356_cur."LANG"("MAIN", "variable")
-    unless $P10, rx1356_fail
-    rx1356_cur."!mark_push"(0, -1, 0, $P10)
+    rx1385_cur."!cursor_pos"(rx1385_pos)
+    $P10 = rx1385_cur."LANG"("MAIN", "variable")
+    unless $P10, rx1385_fail
+    rx1385_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("var")
-    rx1356_pos = $P10."pos"()
-.annotate 'line', 576
+    rx1385_pos = $P10."pos"()
+.annotate 'line', 583
   # rx pass
-    rx1356_cur."!cursor_pass"(rx1356_pos, "metachar:sym<nqpvar>")
-    if_null rx1356_debug, debug_1043
-    rx1356_cur."!cursor_debug"("PASS", "metachar:sym<nqpvar>", " at pos=", rx1356_pos)
-  debug_1043:
-    .return (rx1356_cur)
-  rx1356_restart:
-.annotate 'line', 567
-    if_null rx1356_debug, debug_1044
-    rx1356_cur."!cursor_debug"("NEXT", "metachar:sym<nqpvar>")
-  debug_1044:
-  rx1356_fail:
-    (rx1356_rep, rx1356_pos, $I10, $P10) = rx1356_cur."!mark_fail"(0)
-    lt rx1356_pos, -1, rx1356_done
-    eq rx1356_pos, -1, rx1356_fail
-    jump $I10
-  rx1356_done:
-    rx1356_cur."!cursor_fail"()
-    if_null rx1356_debug, debug_1045
-    rx1356_cur."!cursor_debug"("FAIL", "metachar:sym<nqpvar>")
-  debug_1045:
-    .return (rx1356_cur)
+    rx1385_cur."!cursor_pass"(rx1385_pos, "metachar:sym<nqpvar>")
+    if_null rx1385_debug, debug_1057
+    rx1385_cur."!cursor_debug"("PASS", "metachar:sym<nqpvar>", " at pos=", rx1385_pos)
+  debug_1057:
+    .return (rx1385_cur)
+  rx1385_restart:
+.annotate 'line', 574
+    if_null rx1385_debug, debug_1058
+    rx1385_cur."!cursor_debug"("NEXT", "metachar:sym<nqpvar>")
+  debug_1058:
+  rx1385_fail:
+    (rx1385_rep, rx1385_pos, $I10, $P10) = rx1385_cur."!mark_fail"(0)
+    lt rx1385_pos, -1, rx1385_done
+    eq rx1385_pos, -1, rx1385_fail
+    jump $I10
+  rx1385_done:
+    rx1385_cur."!cursor_fail"()
+    if_null rx1385_debug, debug_1059
+    rx1385_cur."!cursor_debug"("FAIL", "metachar:sym<nqpvar>")
+  debug_1059:
+    .return (rx1385_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__metachar:sym<nqpvar>"  :subid("356_1282324002.40722") :method
-.annotate 'line', 567
-    new $P1358, "ResizablePMCArray"
-    push $P1358, "$"
-    push $P1358, "@"
-    .return ($P1358)
+.sub "!PREFIX__metachar:sym<nqpvar>"  :subid("362_1284728478.15265") :method
+.annotate 'line', 574
+    new $P1387, "ResizablePMCArray"
+    push $P1387, "$"
+    push $P1387, "@"
+    .return ($P1387)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "_block1360"  :anon :subid("357_1282324002.40722") :method :outer("355_1282324002.40722")
-.annotate 'line', 577
-    .local string rx1362_tgt
-    .local int rx1362_pos
-    .local int rx1362_off
-    .local int rx1362_eos
-    .local int rx1362_rep
-    .local pmc rx1362_cur
-    .local pmc rx1362_debug
-    (rx1362_cur, rx1362_pos, rx1362_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1362_debug, rx1362_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1362_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1362_eos, rx1362_tgt
-    gt rx1362_pos, rx1362_eos, rx1362_done
-    set rx1362_off, 0
-    lt rx1362_pos, 2, rx1362_start
-    sub rx1362_off, rx1362_pos, 1
-    substr rx1362_tgt, rx1362_tgt, rx1362_off
-  rx1362_start:
-    eq $I10, 1, rx1362_restart
-    if_null rx1362_debug, debug_1039
-    rx1362_cur."!cursor_debug"("START", "")
-  debug_1039:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1363_done
-    goto rxscan1363_scan
-  rxscan1363_loop:
-    ($P10) = rx1362_cur."from"()
-    inc $P10
-    set rx1362_pos, $P10
-    ge rx1362_pos, rx1362_eos, rxscan1363_done
-  rxscan1363_scan:
-    set_addr $I10, rxscan1363_loop
-    rx1362_cur."!mark_push"(0, rx1362_pos, $I10)
-  rxscan1363_done:
+.sub "_block1389"  :anon :subid("363_1284728478.15265") :method :outer("361_1284728478.15265")
+.annotate 'line', 584
+    .local string rx1391_tgt
+    .local int rx1391_pos
+    .local int rx1391_off
+    .local int rx1391_eos
+    .local int rx1391_rep
+    .local pmc rx1391_cur
+    .local pmc rx1391_debug
+    (rx1391_cur, rx1391_pos, rx1391_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1391_debug, rx1391_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1391_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1391_eos, rx1391_tgt
+    gt rx1391_pos, rx1391_eos, rx1391_done
+    set rx1391_off, 0
+    lt rx1391_pos, 2, rx1391_start
+    sub rx1391_off, rx1391_pos, 1
+    substr rx1391_tgt, rx1391_tgt, rx1391_off
+  rx1391_start:
+    eq $I10, 1, rx1391_restart
+    if_null rx1391_debug, debug_1053
+    rx1391_cur."!cursor_debug"("START", "")
+  debug_1053:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1392_done
+    goto rxscan1392_scan
+  rxscan1392_loop:
+    ($P10) = rx1391_cur."from"()
+    inc $P10
+    set rx1391_pos, $P10
+    ge rx1391_pos, rx1391_eos, rxscan1392_done
+  rxscan1392_scan:
+    set_addr $I10, rxscan1392_loop
+    rx1391_cur."!mark_push"(0, rx1391_pos, $I10)
+  rxscan1392_done:
   # rx charclass .
-    ge rx1362_pos, rx1362_eos, rx1362_fail
-    inc rx1362_pos
+    ge rx1391_pos, rx1391_eos, rx1391_fail
+    inc rx1391_pos
   # rx charclass w
-    ge rx1362_pos, rx1362_eos, rx1362_fail
-    sub $I10, rx1362_pos, rx1362_off
-    is_cclass $I11, 8192, rx1362_tgt, $I10
-    unless $I11, rx1362_fail
-    inc rx1362_pos
-  # rx pass
-    rx1362_cur."!cursor_pass"(rx1362_pos, "")
-    if_null rx1362_debug, debug_1040
-    rx1362_cur."!cursor_debug"("PASS", "", " at pos=", rx1362_pos)
-  debug_1040:
-    .return (rx1362_cur)
-  rx1362_restart:
-    if_null rx1362_debug, debug_1041
-    rx1362_cur."!cursor_debug"("NEXT", "")
-  debug_1041:
-  rx1362_fail:
-    (rx1362_rep, rx1362_pos, $I10, $P10) = rx1362_cur."!mark_fail"(0)
-    lt rx1362_pos, -1, rx1362_done
-    eq rx1362_pos, -1, rx1362_fail
-    jump $I10
-  rx1362_done:
-    rx1362_cur."!cursor_fail"()
-    if_null rx1362_debug, debug_1042
-    rx1362_cur."!cursor_debug"("FAIL", "")
-  debug_1042:
-    .return (rx1362_cur)
+    ge rx1391_pos, rx1391_eos, rx1391_fail
+    sub $I10, rx1391_pos, rx1391_off
+    is_cclass $I11, 8192, rx1391_tgt, $I10
+    unless $I11, rx1391_fail
+    inc rx1391_pos
+  # rx pass
+    rx1391_cur."!cursor_pass"(rx1391_pos, "")
+    if_null rx1391_debug, debug_1054
+    rx1391_cur."!cursor_debug"("PASS", "", " at pos=", rx1391_pos)
+  debug_1054:
+    .return (rx1391_cur)
+  rx1391_restart:
+    if_null rx1391_debug, debug_1055
+    rx1391_cur."!cursor_debug"("NEXT", "")
+  debug_1055:
+  rx1391_fail:
+    (rx1391_rep, rx1391_pos, $I10, $P10) = rx1391_cur."!mark_fail"(0)
+    lt rx1391_pos, -1, rx1391_done
+    eq rx1391_pos, -1, rx1391_fail
+    jump $I10
+  rx1391_done:
+    rx1391_cur."!cursor_fail"()
+    if_null rx1391_debug, debug_1056
+    rx1391_cur."!cursor_debug"("FAIL", "")
+  debug_1056:
+    .return (rx1391_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "assertion:sym<{ }>"  :subid("358_1282324002.40722") :method :outer("349_1282324002.40722")
-.annotate 'line', 567
-    .local string rx1365_tgt
-    .local int rx1365_pos
-    .local int rx1365_off
-    .local int rx1365_eos
-    .local int rx1365_rep
-    .local pmc rx1365_cur
-    .local pmc rx1365_debug
-    (rx1365_cur, rx1365_pos, rx1365_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1365_debug, rx1365_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1365_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1365_eos, rx1365_tgt
-    gt rx1365_pos, rx1365_eos, rx1365_done
-    set rx1365_off, 0
-    lt rx1365_pos, 2, rx1365_start
-    sub rx1365_off, rx1365_pos, 1
-    substr rx1365_tgt, rx1365_tgt, rx1365_off
-  rx1365_start:
-    eq $I10, 1, rx1365_restart
-    if_null rx1365_debug, debug_1046
-    rx1365_cur."!cursor_debug"("START", "assertion:sym<{ }>")
-  debug_1046:
+.sub "assertion:sym<{ }>"  :subid("364_1284728478.15265") :method :outer("355_1284728478.15265")
+.annotate 'line', 574
+    .local string rx1394_tgt
+    .local int rx1394_pos
+    .local int rx1394_off
+    .local int rx1394_eos
+    .local int rx1394_rep
+    .local pmc rx1394_cur
+    .local pmc rx1394_debug
+    (rx1394_cur, rx1394_pos, rx1394_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1394_debug, rx1394_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1394_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1394_eos, rx1394_tgt
+    gt rx1394_pos, rx1394_eos, rx1394_done
+    set rx1394_off, 0
+    lt rx1394_pos, 2, rx1394_start
+    sub rx1394_off, rx1394_pos, 1
+    substr rx1394_tgt, rx1394_tgt, rx1394_off
+  rx1394_start:
+    eq $I10, 1, rx1394_restart
+    if_null rx1394_debug, debug_1060
+    rx1394_cur."!cursor_debug"("START", "assertion:sym<{ }>")
+  debug_1060:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1368_done
-    goto rxscan1368_scan
-  rxscan1368_loop:
-    ($P10) = rx1365_cur."from"()
-    inc $P10
-    set rx1365_pos, $P10
-    ge rx1365_pos, rx1365_eos, rxscan1368_done
-  rxscan1368_scan:
-    set_addr $I10, rxscan1368_loop
-    rx1365_cur."!mark_push"(0, rx1365_pos, $I10)
-  rxscan1368_done:
-.annotate 'line', 581
+    ne $I10, -1, rxscan1397_done
+    goto rxscan1397_scan
+  rxscan1397_loop:
+    ($P10) = rx1394_cur."from"()
+    inc $P10
+    set rx1394_pos, $P10
+    ge rx1394_pos, rx1394_eos, rxscan1397_done
+  rxscan1397_scan:
+    set_addr $I10, rxscan1397_loop
+    rx1394_cur."!mark_push"(0, rx1394_pos, $I10)
+  rxscan1397_done:
+.annotate 'line', 588
   # rx enumcharlist negate=0 zerowidth
-    ge rx1365_pos, rx1365_eos, rx1365_fail
-    sub $I10, rx1365_pos, rx1365_off
-    substr $S10, rx1365_tgt, $I10, 1
+    sub $I10, rx1394_pos, rx1394_off
+    substr $S10, rx1394_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx1365_fail
+    lt $I11, 0, rx1394_fail
   # rx subrule "codeblock" subtype=capture negate=
-    rx1365_cur."!cursor_pos"(rx1365_pos)
-    $P10 = rx1365_cur."codeblock"()
-    unless $P10, rx1365_fail
-    rx1365_cur."!mark_push"(0, -1, 0, $P10)
+    rx1394_cur."!cursor_pos"(rx1394_pos)
+    $P10 = rx1394_cur."codeblock"()
+    unless $P10, rx1394_fail
+    rx1394_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("codeblock")
-    rx1365_pos = $P10."pos"()
-.annotate 'line', 580
+    rx1394_pos = $P10."pos"()
+.annotate 'line', 587
   # rx pass
-    rx1365_cur."!cursor_pass"(rx1365_pos, "assertion:sym<{ }>")
-    if_null rx1365_debug, debug_1047
-    rx1365_cur."!cursor_debug"("PASS", "assertion:sym<{ }>", " at pos=", rx1365_pos)
-  debug_1047:
-    .return (rx1365_cur)
-  rx1365_restart:
-.annotate 'line', 567
-    if_null rx1365_debug, debug_1048
-    rx1365_cur."!cursor_debug"("NEXT", "assertion:sym<{ }>")
-  debug_1048:
-  rx1365_fail:
-    (rx1365_rep, rx1365_pos, $I10, $P10) = rx1365_cur."!mark_fail"(0)
-    lt rx1365_pos, -1, rx1365_done
-    eq rx1365_pos, -1, rx1365_fail
-    jump $I10
-  rx1365_done:
-    rx1365_cur."!cursor_fail"()
-    if_null rx1365_debug, debug_1049
-    rx1365_cur."!cursor_debug"("FAIL", "assertion:sym<{ }>")
-  debug_1049:
-    .return (rx1365_cur)
+    rx1394_cur."!cursor_pass"(rx1394_pos, "assertion:sym<{ }>")
+    if_null rx1394_debug, debug_1061
+    rx1394_cur."!cursor_debug"("PASS", "assertion:sym<{ }>", " at pos=", rx1394_pos)
+  debug_1061:
+    .return (rx1394_cur)
+  rx1394_restart:
+.annotate 'line', 574
+    if_null rx1394_debug, debug_1062
+    rx1394_cur."!cursor_debug"("NEXT", "assertion:sym<{ }>")
+  debug_1062:
+  rx1394_fail:
+    (rx1394_rep, rx1394_pos, $I10, $P10) = rx1394_cur."!mark_fail"(0)
+    lt rx1394_pos, -1, rx1394_done
+    eq rx1394_pos, -1, rx1394_fail
+    jump $I10
+  rx1394_done:
+    rx1394_cur."!cursor_fail"()
+    if_null rx1394_debug, debug_1063
+    rx1394_cur."!cursor_debug"("FAIL", "assertion:sym<{ }>")
+  debug_1063:
+    .return (rx1394_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__assertion:sym<{ }>"  :subid("359_1282324002.40722") :method
-.annotate 'line', 567
-    new $P1367, "ResizablePMCArray"
-    push $P1367, "{"
-    .return ($P1367)
+.sub "!PREFIX__assertion:sym<{ }>"  :subid("365_1284728478.15265") :method
+.annotate 'line', 574
+    new $P1396, "ResizablePMCArray"
+    push $P1396, "{"
+    .return ($P1396)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "assertion:sym<?{ }>"  :subid("360_1282324002.40722") :method :outer("349_1282324002.40722")
-.annotate 'line', 567
-    .const 'Sub' $P1375 = "362_1282324002.40722" 
-    capture_lex $P1375
-    .local string rx1370_tgt
-    .local int rx1370_pos
-    .local int rx1370_off
-    .local int rx1370_eos
-    .local int rx1370_rep
-    .local pmc rx1370_cur
-    .local pmc rx1370_debug
-    (rx1370_cur, rx1370_pos, rx1370_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1370_debug, rx1370_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1370_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1370_eos, rx1370_tgt
-    gt rx1370_pos, rx1370_eos, rx1370_done
-    set rx1370_off, 0
-    lt rx1370_pos, 2, rx1370_start
-    sub rx1370_off, rx1370_pos, 1
-    substr rx1370_tgt, rx1370_tgt, rx1370_off
-  rx1370_start:
-    eq $I10, 1, rx1370_restart
-    if_null rx1370_debug, debug_1050
-    rx1370_cur."!cursor_debug"("START", "assertion:sym<?{ }>")
-  debug_1050:
+.sub "assertion:sym<?{ }>"  :subid("366_1284728478.15265") :method :outer("355_1284728478.15265")
+.annotate 'line', 574
+    .const 'Sub' $P1404 = "368_1284728478.15265" 
+    capture_lex $P1404
+    .local string rx1399_tgt
+    .local int rx1399_pos
+    .local int rx1399_off
+    .local int rx1399_eos
+    .local int rx1399_rep
+    .local pmc rx1399_cur
+    .local pmc rx1399_debug
+    (rx1399_cur, rx1399_pos, rx1399_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1399_debug, rx1399_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1399_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1399_eos, rx1399_tgt
+    gt rx1399_pos, rx1399_eos, rx1399_done
+    set rx1399_off, 0
+    lt rx1399_pos, 2, rx1399_start
+    sub rx1399_off, rx1399_pos, 1
+    substr rx1399_tgt, rx1399_tgt, rx1399_off
+  rx1399_start:
+    eq $I10, 1, rx1399_restart
+    if_null rx1399_debug, debug_1064
+    rx1399_cur."!cursor_debug"("START", "assertion:sym<?{ }>")
+  debug_1064:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1373_done
-    goto rxscan1373_scan
-  rxscan1373_loop:
-    ($P10) = rx1370_cur."from"()
-    inc $P10
-    set rx1370_pos, $P10
-    ge rx1370_pos, rx1370_eos, rxscan1373_done
-  rxscan1373_scan:
-    set_addr $I10, rxscan1373_loop
-    rx1370_cur."!mark_push"(0, rx1370_pos, $I10)
-  rxscan1373_done:
-.annotate 'line', 585
+    ne $I10, -1, rxscan1402_done
+    goto rxscan1402_scan
+  rxscan1402_loop:
+    ($P10) = rx1399_cur."from"()
+    inc $P10
+    set rx1399_pos, $P10
+    ge rx1399_pos, rx1399_eos, rxscan1402_done
+  rxscan1402_scan:
+    set_addr $I10, rxscan1402_loop
+    rx1399_cur."!mark_push"(0, rx1399_pos, $I10)
+  rxscan1402_done:
+.annotate 'line', 592
   # rx subcapture "zw"
-    set_addr $I10, rxcap_1378_fail
-    rx1370_cur."!mark_push"(0, rx1370_pos, $I10)
+    set_addr $I10, rxcap_1407_fail
+    rx1399_cur."!mark_push"(0, rx1399_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx1370_pos, rx1370_eos, rx1370_fail
-    sub $I10, rx1370_pos, rx1370_off
-    substr $S10, rx1370_tgt, $I10, 1
+    ge rx1399_pos, rx1399_eos, rx1399_fail
+    sub $I10, rx1399_pos, rx1399_off
+    substr $S10, rx1399_tgt, $I10, 1
     index $I11, "?!", $S10
-    lt $I11, 0, rx1370_fail
-    inc rx1370_pos
+    lt $I11, 0, rx1399_fail
+    inc rx1399_pos
   # rx subrule "before" subtype=zerowidth negate=
-    rx1370_cur."!cursor_pos"(rx1370_pos)
-    .const 'Sub' $P1375 = "362_1282324002.40722" 
-    capture_lex $P1375
-    $P10 = rx1370_cur."before"($P1375)
-    unless $P10, rx1370_fail
-    set_addr $I10, rxcap_1378_fail
-    ($I12, $I11) = rx1370_cur."!mark_peek"($I10)
-    rx1370_cur."!cursor_pos"($I11)
-    ($P10) = rx1370_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1370_pos, "")
-    rx1370_cur."!mark_push"(0, -1, 0, $P10)
+    rx1399_cur."!cursor_pos"(rx1399_pos)
+    .const 'Sub' $P1404 = "368_1284728478.15265" 
+    capture_lex $P1404
+    $P10 = rx1399_cur."before"($P1404)
+    unless $P10, rx1399_fail
+    set_addr $I10, rxcap_1407_fail
+    ($I12, $I11) = rx1399_cur."!mark_peek"($I10)
+    rx1399_cur."!cursor_pos"($I11)
+    ($P10) = rx1399_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1399_pos, "")
+    rx1399_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("zw")
-    goto rxcap_1378_done
-  rxcap_1378_fail:
-    goto rx1370_fail
-  rxcap_1378_done:
+    goto rxcap_1407_done
+  rxcap_1407_fail:
+    goto rx1399_fail
+  rxcap_1407_done:
   # rx subrule "codeblock" subtype=capture negate=
-    rx1370_cur."!cursor_pos"(rx1370_pos)
-    $P10 = rx1370_cur."codeblock"()
-    unless $P10, rx1370_fail
-    rx1370_cur."!mark_push"(0, -1, 0, $P10)
+    rx1399_cur."!cursor_pos"(rx1399_pos)
+    $P10 = rx1399_cur."codeblock"()
+    unless $P10, rx1399_fail
+    rx1399_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("codeblock")
-    rx1370_pos = $P10."pos"()
-.annotate 'line', 584
+    rx1399_pos = $P10."pos"()
+.annotate 'line', 591
   # rx pass
-    rx1370_cur."!cursor_pass"(rx1370_pos, "assertion:sym<?{ }>")
-    if_null rx1370_debug, debug_1055
-    rx1370_cur."!cursor_debug"("PASS", "assertion:sym<?{ }>", " at pos=", rx1370_pos)
-  debug_1055:
-    .return (rx1370_cur)
-  rx1370_restart:
-.annotate 'line', 567
-    if_null rx1370_debug, debug_1056
-    rx1370_cur."!cursor_debug"("NEXT", "assertion:sym<?{ }>")
-  debug_1056:
-  rx1370_fail:
-    (rx1370_rep, rx1370_pos, $I10, $P10) = rx1370_cur."!mark_fail"(0)
-    lt rx1370_pos, -1, rx1370_done
-    eq rx1370_pos, -1, rx1370_fail
-    jump $I10
-  rx1370_done:
-    rx1370_cur."!cursor_fail"()
-    if_null rx1370_debug, debug_1057
-    rx1370_cur."!cursor_debug"("FAIL", "assertion:sym<?{ }>")
-  debug_1057:
-    .return (rx1370_cur)
+    rx1399_cur."!cursor_pass"(rx1399_pos, "assertion:sym<?{ }>")
+    if_null rx1399_debug, debug_1069
+    rx1399_cur."!cursor_debug"("PASS", "assertion:sym<?{ }>", " at pos=", rx1399_pos)
+  debug_1069:
+    .return (rx1399_cur)
+  rx1399_restart:
+.annotate 'line', 574
+    if_null rx1399_debug, debug_1070
+    rx1399_cur."!cursor_debug"("NEXT", "assertion:sym<?{ }>")
+  debug_1070:
+  rx1399_fail:
+    (rx1399_rep, rx1399_pos, $I10, $P10) = rx1399_cur."!mark_fail"(0)
+    lt rx1399_pos, -1, rx1399_done
+    eq rx1399_pos, -1, rx1399_fail
+    jump $I10
+  rx1399_done:
+    rx1399_cur."!cursor_fail"()
+    if_null rx1399_debug, debug_1071
+    rx1399_cur."!cursor_debug"("FAIL", "assertion:sym<?{ }>")
+  debug_1071:
+    .return (rx1399_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__assertion:sym<?{ }>"  :subid("361_1282324002.40722") :method
-.annotate 'line', 567
-    new $P1372, "ResizablePMCArray"
-    push $P1372, "!"
-    push $P1372, "?"
-    .return ($P1372)
+.sub "!PREFIX__assertion:sym<?{ }>"  :subid("367_1284728478.15265") :method
+.annotate 'line', 574
+    new $P1401, "ResizablePMCArray"
+    push $P1401, "!"
+    push $P1401, "?"
+    .return ($P1401)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "_block1374"  :anon :subid("362_1282324002.40722") :method :outer("360_1282324002.40722")
-.annotate 'line', 585
-    .local string rx1376_tgt
-    .local int rx1376_pos
-    .local int rx1376_off
-    .local int rx1376_eos
-    .local int rx1376_rep
-    .local pmc rx1376_cur
-    .local pmc rx1376_debug
-    (rx1376_cur, rx1376_pos, rx1376_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1376_debug, rx1376_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1376_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1376_eos, rx1376_tgt
-    gt rx1376_pos, rx1376_eos, rx1376_done
-    set rx1376_off, 0
-    lt rx1376_pos, 2, rx1376_start
-    sub rx1376_off, rx1376_pos, 1
-    substr rx1376_tgt, rx1376_tgt, rx1376_off
-  rx1376_start:
-    eq $I10, 1, rx1376_restart
-    if_null rx1376_debug, debug_1051
-    rx1376_cur."!cursor_debug"("START", "")
-  debug_1051:
+.sub "_block1403"  :anon :subid("368_1284728478.15265") :method :outer("366_1284728478.15265")
+.annotate 'line', 592
+    .local string rx1405_tgt
+    .local int rx1405_pos
+    .local int rx1405_off
+    .local int rx1405_eos
+    .local int rx1405_rep
+    .local pmc rx1405_cur
+    .local pmc rx1405_debug
+    (rx1405_cur, rx1405_pos, rx1405_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1405_debug, rx1405_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1405_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1405_eos, rx1405_tgt
+    gt rx1405_pos, rx1405_eos, rx1405_done
+    set rx1405_off, 0
+    lt rx1405_pos, 2, rx1405_start
+    sub rx1405_off, rx1405_pos, 1
+    substr rx1405_tgt, rx1405_tgt, rx1405_off
+  rx1405_start:
+    eq $I10, 1, rx1405_restart
+    if_null rx1405_debug, debug_1065
+    rx1405_cur."!cursor_debug"("START", "")
+  debug_1065:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1377_done
-    goto rxscan1377_scan
-  rxscan1377_loop:
-    ($P10) = rx1376_cur."from"()
-    inc $P10
-    set rx1376_pos, $P10
-    ge rx1376_pos, rx1376_eos, rxscan1377_done
-  rxscan1377_scan:
-    set_addr $I10, rxscan1377_loop
-    rx1376_cur."!mark_push"(0, rx1376_pos, $I10)
-  rxscan1377_done:
+    ne $I10, -1, rxscan1406_done
+    goto rxscan1406_scan
+  rxscan1406_loop:
+    ($P10) = rx1405_cur."from"()
+    inc $P10
+    set rx1405_pos, $P10
+    ge rx1405_pos, rx1405_eos, rxscan1406_done
+  rxscan1406_scan:
+    set_addr $I10, rxscan1406_loop
+    rx1405_cur."!mark_push"(0, rx1405_pos, $I10)
+  rxscan1406_done:
   # rx literal  "{"
-    add $I11, rx1376_pos, 1
-    gt $I11, rx1376_eos, rx1376_fail
-    sub $I11, rx1376_pos, rx1376_off
-    ord $I11, rx1376_tgt, $I11
-    ne $I11, 123, rx1376_fail
-    add rx1376_pos, 1
-  # rx pass
-    rx1376_cur."!cursor_pass"(rx1376_pos, "")
-    if_null rx1376_debug, debug_1052
-    rx1376_cur."!cursor_debug"("PASS", "", " at pos=", rx1376_pos)
-  debug_1052:
-    .return (rx1376_cur)
-  rx1376_restart:
-    if_null rx1376_debug, debug_1053
-    rx1376_cur."!cursor_debug"("NEXT", "")
-  debug_1053:
-  rx1376_fail:
-    (rx1376_rep, rx1376_pos, $I10, $P10) = rx1376_cur."!mark_fail"(0)
-    lt rx1376_pos, -1, rx1376_done
-    eq rx1376_pos, -1, rx1376_fail
-    jump $I10
-  rx1376_done:
-    rx1376_cur."!cursor_fail"()
-    if_null rx1376_debug, debug_1054
-    rx1376_cur."!cursor_debug"("FAIL", "")
-  debug_1054:
-    .return (rx1376_cur)
+    add $I11, rx1405_pos, 1
+    gt $I11, rx1405_eos, rx1405_fail
+    sub $I11, rx1405_pos, rx1405_off
+    ord $I11, rx1405_tgt, $I11
+    ne $I11, 123, rx1405_fail
+    add rx1405_pos, 1
+  # rx pass
+    rx1405_cur."!cursor_pass"(rx1405_pos, "")
+    if_null rx1405_debug, debug_1066
+    rx1405_cur."!cursor_debug"("PASS", "", " at pos=", rx1405_pos)
+  debug_1066:
+    .return (rx1405_cur)
+  rx1405_restart:
+    if_null rx1405_debug, debug_1067
+    rx1405_cur."!cursor_debug"("NEXT", "")
+  debug_1067:
+  rx1405_fail:
+    (rx1405_rep, rx1405_pos, $I10, $P10) = rx1405_cur."!mark_fail"(0)
+    lt rx1405_pos, -1, rx1405_done
+    eq rx1405_pos, -1, rx1405_fail
+    jump $I10
+  rx1405_done:
+    rx1405_cur."!cursor_fail"()
+    if_null rx1405_debug, debug_1068
+    rx1405_cur."!cursor_debug"("FAIL", "")
+  debug_1068:
+    .return (rx1405_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "assertion:sym<name>"  :subid("363_1282324002.40722") :method :outer("349_1282324002.40722")
-.annotate 'line', 567
-    .const 'Sub' $P1388 = "365_1282324002.40722" 
-    capture_lex $P1388
-    .local string rx1380_tgt
-    .local int rx1380_pos
-    .local int rx1380_off
-    .local int rx1380_eos
-    .local int rx1380_rep
-    .local pmc rx1380_cur
-    .local pmc rx1380_debug
-    (rx1380_cur, rx1380_pos, rx1380_tgt, $I10) = self."!cursor_start"()
-    rx1380_cur."!cursor_caparray"("nibbler", "arglist", "assertion")
-    getattribute rx1380_debug, rx1380_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1380_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1380_eos, rx1380_tgt
-    gt rx1380_pos, rx1380_eos, rx1380_done
-    set rx1380_off, 0
-    lt rx1380_pos, 2, rx1380_start
-    sub rx1380_off, rx1380_pos, 1
-    substr rx1380_tgt, rx1380_tgt, rx1380_off
-  rx1380_start:
-    eq $I10, 1, rx1380_restart
-    if_null rx1380_debug, debug_1058
-    rx1380_cur."!cursor_debug"("START", "assertion:sym<name>")
-  debug_1058:
+.sub "assertion:sym<name>"  :subid("369_1284728478.15265") :method :outer("355_1284728478.15265")
+.annotate 'line', 574
+    .const 'Sub' $P1417 = "371_1284728478.15265" 
+    capture_lex $P1417
+    .local string rx1409_tgt
+    .local int rx1409_pos
+    .local int rx1409_off
+    .local int rx1409_eos
+    .local int rx1409_rep
+    .local pmc rx1409_cur
+    .local pmc rx1409_debug
+    (rx1409_cur, rx1409_pos, rx1409_tgt, $I10) = self."!cursor_start"()
+    rx1409_cur."!cursor_caparray"("nibbler", "arglist", "assertion")
+    getattribute rx1409_debug, rx1409_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1409_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1409_eos, rx1409_tgt
+    gt rx1409_pos, rx1409_eos, rx1409_done
+    set rx1409_off, 0
+    lt rx1409_pos, 2, rx1409_start
+    sub rx1409_off, rx1409_pos, 1
+    substr rx1409_tgt, rx1409_tgt, rx1409_off
+  rx1409_start:
+    eq $I10, 1, rx1409_restart
+    if_null rx1409_debug, debug_1072
+    rx1409_cur."!cursor_debug"("START", "assertion:sym<name>")
+  debug_1072:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1384_done
-    goto rxscan1384_scan
-  rxscan1384_loop:
-    ($P10) = rx1380_cur."from"()
-    inc $P10
-    set rx1380_pos, $P10
-    ge rx1380_pos, rx1380_eos, rxscan1384_done
-  rxscan1384_scan:
-    set_addr $I10, rxscan1384_loop
-    rx1380_cur."!mark_push"(0, rx1380_pos, $I10)
-  rxscan1384_done:
-.annotate 'line', 589
+    ne $I10, -1, rxscan1413_done
+    goto rxscan1413_scan
+  rxscan1413_loop:
+    ($P10) = rx1409_cur."from"()
+    inc $P10
+    set rx1409_pos, $P10
+    ge rx1409_pos, rx1409_eos, rxscan1413_done
+  rxscan1413_scan:
+    set_addr $I10, rxscan1413_loop
+    rx1409_cur."!mark_push"(0, rx1409_pos, $I10)
+  rxscan1413_done:
+.annotate 'line', 596
   # rx subrule "identifier" subtype=capture negate=
-    rx1380_cur."!cursor_pos"(rx1380_pos)
-    $P10 = rx1380_cur."identifier"()
-    unless $P10, rx1380_fail
-    rx1380_cur."!mark_push"(0, -1, 0, $P10)
+    rx1409_cur."!cursor_pos"(rx1409_pos)
+    $P10 = rx1409_cur."identifier"()
+    unless $P10, rx1409_fail
+    rx1409_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("longname")
-    rx1380_pos = $P10."pos"()
-.annotate 'line', 596
-  # rx rxquantr1385 ** 0..1
-    set_addr $I10, rxquantr1385_done
-    rx1380_cur."!mark_push"(0, rx1380_pos, $I10)
-  rxquantr1385_loop:
-  alt1386_0:
-.annotate 'line', 590
-    set_addr $I10, alt1386_1
-    rx1380_cur."!mark_push"(0, rx1380_pos, $I10)
-.annotate 'line', 591
+    rx1409_pos = $P10."pos"()
+.annotate 'line', 603
+  # rx rxquantr1414 ** 0..1
+    set_addr $I10, rxquantr1414_done
+    rx1409_cur."!mark_push"(0, rx1409_pos, $I10)
+  rxquantr1414_loop:
+  alt1415_0:
+.annotate 'line', 597
+    set_addr $I10, alt1415_1
+    rx1409_cur."!mark_push"(0, rx1409_pos, $I10)
+.annotate 'line', 598
   # rx subrule "before" subtype=zerowidth negate=
-    rx1380_cur."!cursor_pos"(rx1380_pos)
-    .const 'Sub' $P1388 = "365_1282324002.40722" 
-    capture_lex $P1388
-    $P10 = rx1380_cur."before"($P1388)
-    unless $P10, rx1380_fail
-    goto alt1386_end
-  alt1386_1:
-    set_addr $I10, alt1386_2
-    rx1380_cur."!mark_push"(0, rx1380_pos, $I10)
-.annotate 'line', 592
+    rx1409_cur."!cursor_pos"(rx1409_pos)
+    .const 'Sub' $P1417 = "371_1284728478.15265" 
+    capture_lex $P1417
+    $P10 = rx1409_cur."before"($P1417)
+    unless $P10, rx1409_fail
+    goto alt1415_end
+  alt1415_1:
+    set_addr $I10, alt1415_2
+    rx1409_cur."!mark_push"(0, rx1409_pos, $I10)
+.annotate 'line', 599
   # rx literal  "="
-    add $I11, rx1380_pos, 1
-    gt $I11, rx1380_eos, rx1380_fail
-    sub $I11, rx1380_pos, rx1380_off
-    ord $I11, rx1380_tgt, $I11
-    ne $I11, 61, rx1380_fail
-    add rx1380_pos, 1
+    add $I11, rx1409_pos, 1
+    gt $I11, rx1409_eos, rx1409_fail
+    sub $I11, rx1409_pos, rx1409_off
+    ord $I11, rx1409_tgt, $I11
+    ne $I11, 61, rx1409_fail
+    add rx1409_pos, 1
   # rx subrule "assertion" subtype=capture negate=
-    rx1380_cur."!cursor_pos"(rx1380_pos)
-    $P10 = rx1380_cur."assertion"()
-    unless $P10, rx1380_fail
-    rx1380_cur."!mark_push"(0, -1, 0, $P10)
+    rx1409_cur."!cursor_pos"(rx1409_pos)
+    $P10 = rx1409_cur."assertion"()
+    unless $P10, rx1409_fail
+    rx1409_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("assertion")
-    rx1380_pos = $P10."pos"()
-    goto alt1386_end
-  alt1386_2:
-    set_addr $I10, alt1386_3
-    rx1380_cur."!mark_push"(0, rx1380_pos, $I10)
-.annotate 'line', 593
+    rx1409_pos = $P10."pos"()
+    goto alt1415_end
+  alt1415_2:
+    set_addr $I10, alt1415_3
+    rx1409_cur."!mark_push"(0, rx1409_pos, $I10)
+.annotate 'line', 600
   # rx literal  ":"
-    add $I11, rx1380_pos, 1
-    gt $I11, rx1380_eos, rx1380_fail
-    sub $I11, rx1380_pos, rx1380_off
-    ord $I11, rx1380_tgt, $I11
-    ne $I11, 58, rx1380_fail
-    add rx1380_pos, 1
+    add $I11, rx1409_pos, 1
+    gt $I11, rx1409_eos, rx1409_fail
+    sub $I11, rx1409_pos, rx1409_off
+    ord $I11, rx1409_tgt, $I11
+    ne $I11, 58, rx1409_fail
+    add rx1409_pos, 1
   # rx subrule "arglist" subtype=capture negate=
-    rx1380_cur."!cursor_pos"(rx1380_pos)
-    $P10 = rx1380_cur."arglist"()
-    unless $P10, rx1380_fail
-    rx1380_cur."!mark_push"(0, -1, 0, $P10)
+    rx1409_cur."!cursor_pos"(rx1409_pos)
+    $P10 = rx1409_cur."arglist"()
+    unless $P10, rx1409_fail
+    rx1409_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("arglist")
-    rx1380_pos = $P10."pos"()
-    goto alt1386_end
-  alt1386_3:
-    set_addr $I10, alt1386_4
-    rx1380_cur."!mark_push"(0, rx1380_pos, $I10)
-.annotate 'line', 594
+    rx1409_pos = $P10."pos"()
+    goto alt1415_end
+  alt1415_3:
+    set_addr $I10, alt1415_4
+    rx1409_cur."!mark_push"(0, rx1409_pos, $I10)
+.annotate 'line', 601
   # rx literal  "("
-    add $I11, rx1380_pos, 1
-    gt $I11, rx1380_eos, rx1380_fail
-    sub $I11, rx1380_pos, rx1380_off
-    ord $I11, rx1380_tgt, $I11
-    ne $I11, 40, rx1380_fail
-    add rx1380_pos, 1
+    add $I11, rx1409_pos, 1
+    gt $I11, rx1409_eos, rx1409_fail
+    sub $I11, rx1409_pos, rx1409_off
+    ord $I11, rx1409_tgt, $I11
+    ne $I11, 40, rx1409_fail
+    add rx1409_pos, 1
   # rx subrule "LANG" subtype=capture negate=
-    rx1380_cur."!cursor_pos"(rx1380_pos)
-    $P10 = rx1380_cur."LANG"("MAIN", "arglist")
-    unless $P10, rx1380_fail
-    rx1380_cur."!mark_push"(0, -1, 0, $P10)
+    rx1409_cur."!cursor_pos"(rx1409_pos)
+    $P10 = rx1409_cur."LANG"("MAIN", "arglist")
+    unless $P10, rx1409_fail
+    rx1409_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("arglist")
-    rx1380_pos = $P10."pos"()
+    rx1409_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx1380_pos, 1
-    gt $I11, rx1380_eos, rx1380_fail
-    sub $I11, rx1380_pos, rx1380_off
-    ord $I11, rx1380_tgt, $I11
-    ne $I11, 41, rx1380_fail
-    add rx1380_pos, 1
-    goto alt1386_end
-  alt1386_4:
-.annotate 'line', 595
+    add $I11, rx1409_pos, 1
+    gt $I11, rx1409_eos, rx1409_fail
+    sub $I11, rx1409_pos, rx1409_off
+    ord $I11, rx1409_tgt, $I11
+    ne $I11, 41, rx1409_fail
+    add rx1409_pos, 1
+    goto alt1415_end
+  alt1415_4:
+.annotate 'line', 602
   # rx subrule "normspace" subtype=method negate=
-    rx1380_cur."!cursor_pos"(rx1380_pos)
-    $P10 = rx1380_cur."normspace"()
-    unless $P10, rx1380_fail
-    rx1380_pos = $P10."pos"()
+    rx1409_cur."!cursor_pos"(rx1409_pos)
+    $P10 = rx1409_cur."normspace"()
+    unless $P10, rx1409_fail
+    rx1409_pos = $P10."pos"()
   # rx subrule "nibbler" subtype=capture negate=
-    rx1380_cur."!cursor_pos"(rx1380_pos)
-    $P10 = rx1380_cur."nibbler"()
-    unless $P10, rx1380_fail
-    rx1380_cur."!mark_push"(0, -1, 0, $P10)
+    rx1409_cur."!cursor_pos"(rx1409_pos)
+    $P10 = rx1409_cur."nibbler"()
+    unless $P10, rx1409_fail
+    rx1409_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("nibbler")
-    rx1380_pos = $P10."pos"()
-  alt1386_end:
-.annotate 'line', 596
-    set_addr $I10, rxquantr1385_done
-    (rx1380_rep) = rx1380_cur."!mark_commit"($I10)
-  rxquantr1385_done:
-.annotate 'line', 588
+    rx1409_pos = $P10."pos"()
+  alt1415_end:
+.annotate 'line', 603
+    set_addr $I10, rxquantr1414_done
+    (rx1409_rep) = rx1409_cur."!mark_commit"($I10)
+  rxquantr1414_done:
+.annotate 'line', 595
   # rx pass
-    rx1380_cur."!cursor_pass"(rx1380_pos, "assertion:sym<name>")
-    if_null rx1380_debug, debug_1063
-    rx1380_cur."!cursor_debug"("PASS", "assertion:sym<name>", " at pos=", rx1380_pos)
-  debug_1063:
-    .return (rx1380_cur)
-  rx1380_restart:
-.annotate 'line', 567
-    if_null rx1380_debug, debug_1064
-    rx1380_cur."!cursor_debug"("NEXT", "assertion:sym<name>")
-  debug_1064:
-  rx1380_fail:
-    (rx1380_rep, rx1380_pos, $I10, $P10) = rx1380_cur."!mark_fail"(0)
-    lt rx1380_pos, -1, rx1380_done
-    eq rx1380_pos, -1, rx1380_fail
-    jump $I10
-  rx1380_done:
-    rx1380_cur."!cursor_fail"()
-    if_null rx1380_debug, debug_1065
-    rx1380_cur."!cursor_debug"("FAIL", "assertion:sym<name>")
-  debug_1065:
-    .return (rx1380_cur)
+    rx1409_cur."!cursor_pass"(rx1409_pos, "assertion:sym<name>")
+    if_null rx1409_debug, debug_1077
+    rx1409_cur."!cursor_debug"("PASS", "assertion:sym<name>", " at pos=", rx1409_pos)
+  debug_1077:
+    .return (rx1409_cur)
+  rx1409_restart:
+.annotate 'line', 574
+    if_null rx1409_debug, debug_1078
+    rx1409_cur."!cursor_debug"("NEXT", "assertion:sym<name>")
+  debug_1078:
+  rx1409_fail:
+    (rx1409_rep, rx1409_pos, $I10, $P10) = rx1409_cur."!mark_fail"(0)
+    lt rx1409_pos, -1, rx1409_done
+    eq rx1409_pos, -1, rx1409_fail
+    jump $I10
+  rx1409_done:
+    rx1409_cur."!cursor_fail"()
+    if_null rx1409_debug, debug_1079
+    rx1409_cur."!cursor_debug"("FAIL", "assertion:sym<name>")
+  debug_1079:
+    .return (rx1409_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__assertion:sym<name>"  :subid("364_1282324002.40722") :method
-.annotate 'line', 567
-    $P1382 = self."!PREFIX__!subrule"("identifier", "")
-    new $P1383, "ResizablePMCArray"
-    push $P1383, $P1382
-    .return ($P1383)
+.sub "!PREFIX__assertion:sym<name>"  :subid("370_1284728478.15265") :method
+.annotate 'line', 574
+    $P1411 = self."!PREFIX__!subrule"("identifier", "")
+    new $P1412, "ResizablePMCArray"
+    push $P1412, $P1411
+    .return ($P1412)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "_block1387"  :anon :subid("365_1282324002.40722") :method :outer("363_1282324002.40722")
-.annotate 'line', 591
-    .local string rx1389_tgt
-    .local int rx1389_pos
-    .local int rx1389_off
-    .local int rx1389_eos
-    .local int rx1389_rep
-    .local pmc rx1389_cur
-    .local pmc rx1389_debug
-    (rx1389_cur, rx1389_pos, rx1389_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1389_debug, rx1389_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1389_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1389_eos, rx1389_tgt
-    gt rx1389_pos, rx1389_eos, rx1389_done
-    set rx1389_off, 0
-    lt rx1389_pos, 2, rx1389_start
-    sub rx1389_off, rx1389_pos, 1
-    substr rx1389_tgt, rx1389_tgt, rx1389_off
-  rx1389_start:
-    eq $I10, 1, rx1389_restart
-    if_null rx1389_debug, debug_1059
-    rx1389_cur."!cursor_debug"("START", "")
-  debug_1059:
+.sub "_block1416"  :anon :subid("371_1284728478.15265") :method :outer("369_1284728478.15265")
+.annotate 'line', 598
+    .local string rx1418_tgt
+    .local int rx1418_pos
+    .local int rx1418_off
+    .local int rx1418_eos
+    .local int rx1418_rep
+    .local pmc rx1418_cur
+    .local pmc rx1418_debug
+    (rx1418_cur, rx1418_pos, rx1418_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1418_debug, rx1418_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1418_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1418_eos, rx1418_tgt
+    gt rx1418_pos, rx1418_eos, rx1418_done
+    set rx1418_off, 0
+    lt rx1418_pos, 2, rx1418_start
+    sub rx1418_off, rx1418_pos, 1
+    substr rx1418_tgt, rx1418_tgt, rx1418_off
+  rx1418_start:
+    eq $I10, 1, rx1418_restart
+    if_null rx1418_debug, debug_1073
+    rx1418_cur."!cursor_debug"("START", "")
+  debug_1073:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1390_done
-    goto rxscan1390_scan
-  rxscan1390_loop:
-    ($P10) = rx1389_cur."from"()
-    inc $P10
-    set rx1389_pos, $P10
-    ge rx1389_pos, rx1389_eos, rxscan1390_done
-  rxscan1390_scan:
-    set_addr $I10, rxscan1390_loop
-    rx1389_cur."!mark_push"(0, rx1389_pos, $I10)
-  rxscan1390_done:
+    ne $I10, -1, rxscan1419_done
+    goto rxscan1419_scan
+  rxscan1419_loop:
+    ($P10) = rx1418_cur."from"()
+    inc $P10
+    set rx1418_pos, $P10
+    ge rx1418_pos, rx1418_eos, rxscan1419_done
+  rxscan1419_scan:
+    set_addr $I10, rxscan1419_loop
+    rx1418_cur."!mark_push"(0, rx1418_pos, $I10)
+  rxscan1419_done:
   # rx literal  ">"
-    add $I11, rx1389_pos, 1
-    gt $I11, rx1389_eos, rx1389_fail
-    sub $I11, rx1389_pos, rx1389_off
-    ord $I11, rx1389_tgt, $I11
-    ne $I11, 62, rx1389_fail
-    add rx1389_pos, 1
-  # rx pass
-    rx1389_cur."!cursor_pass"(rx1389_pos, "")
-    if_null rx1389_debug, debug_1060
-    rx1389_cur."!cursor_debug"("PASS", "", " at pos=", rx1389_pos)
-  debug_1060:
-    .return (rx1389_cur)
-  rx1389_restart:
-    if_null rx1389_debug, debug_1061
-    rx1389_cur."!cursor_debug"("NEXT", "")
-  debug_1061:
-  rx1389_fail:
-    (rx1389_rep, rx1389_pos, $I10, $P10) = rx1389_cur."!mark_fail"(0)
-    lt rx1389_pos, -1, rx1389_done
-    eq rx1389_pos, -1, rx1389_fail
-    jump $I10
-  rx1389_done:
-    rx1389_cur."!cursor_fail"()
-    if_null rx1389_debug, debug_1062
-    rx1389_cur."!cursor_debug"("FAIL", "")
-  debug_1062:
-    .return (rx1389_cur)
+    add $I11, rx1418_pos, 1
+    gt $I11, rx1418_eos, rx1418_fail
+    sub $I11, rx1418_pos, rx1418_off
+    ord $I11, rx1418_tgt, $I11
+    ne $I11, 62, rx1418_fail
+    add rx1418_pos, 1
+  # rx pass
+    rx1418_cur."!cursor_pass"(rx1418_pos, "")
+    if_null rx1418_debug, debug_1074
+    rx1418_cur."!cursor_debug"("PASS", "", " at pos=", rx1418_pos)
+  debug_1074:
+    .return (rx1418_cur)
+  rx1418_restart:
+    if_null rx1418_debug, debug_1075
+    rx1418_cur."!cursor_debug"("NEXT", "")
+  debug_1075:
+  rx1418_fail:
+    (rx1418_rep, rx1418_pos, $I10, $P10) = rx1418_cur."!mark_fail"(0)
+    lt rx1418_pos, -1, rx1418_done
+    eq rx1418_pos, -1, rx1418_fail
+    jump $I10
+  rx1418_done:
+    rx1418_cur."!cursor_fail"()
+    if_null rx1418_debug, debug_1076
+    rx1418_cur."!cursor_debug"("FAIL", "")
+  debug_1076:
+    .return (rx1418_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "assertion:sym<var>"  :subid("366_1282324002.40722") :method :outer("349_1282324002.40722")
-.annotate 'line', 567
-    .local string rx1392_tgt
-    .local int rx1392_pos
-    .local int rx1392_off
-    .local int rx1392_eos
-    .local int rx1392_rep
-    .local pmc rx1392_cur
-    .local pmc rx1392_debug
-    (rx1392_cur, rx1392_pos, rx1392_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1392_debug, rx1392_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1392_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1392_eos, rx1392_tgt
-    gt rx1392_pos, rx1392_eos, rx1392_done
-    set rx1392_off, 0
-    lt rx1392_pos, 2, rx1392_start
-    sub rx1392_off, rx1392_pos, 1
-    substr rx1392_tgt, rx1392_tgt, rx1392_off
-  rx1392_start:
-    eq $I10, 1, rx1392_restart
-    if_null rx1392_debug, debug_1066
-    rx1392_cur."!cursor_debug"("START", "assertion:sym<var>")
-  debug_1066:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1395_done
-    goto rxscan1395_scan
-  rxscan1395_loop:
-    ($P10) = rx1392_cur."from"()
-    inc $P10
-    set rx1392_pos, $P10
-    ge rx1392_pos, rx1392_eos, rxscan1395_done
-  rxscan1395_scan:
-    set_addr $I10, rxscan1395_loop
-    rx1392_cur."!mark_push"(0, rx1392_pos, $I10)
-  rxscan1395_done:
-.annotate 'line', 600
+.sub "assertion:sym<var>"  :subid("372_1284728478.15265") :method :outer("355_1284728478.15265")
+.annotate 'line', 574
+    .local string rx1421_tgt
+    .local int rx1421_pos
+    .local int rx1421_off
+    .local int rx1421_eos
+    .local int rx1421_rep
+    .local pmc rx1421_cur
+    .local pmc rx1421_debug
+    (rx1421_cur, rx1421_pos, rx1421_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1421_debug, rx1421_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1421_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1421_eos, rx1421_tgt
+    gt rx1421_pos, rx1421_eos, rx1421_done
+    set rx1421_off, 0
+    lt rx1421_pos, 2, rx1421_start
+    sub rx1421_off, rx1421_pos, 1
+    substr rx1421_tgt, rx1421_tgt, rx1421_off
+  rx1421_start:
+    eq $I10, 1, rx1421_restart
+    if_null rx1421_debug, debug_1080
+    rx1421_cur."!cursor_debug"("START", "assertion:sym<var>")
+  debug_1080:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1424_done
+    goto rxscan1424_scan
+  rxscan1424_loop:
+    ($P10) = rx1421_cur."from"()
+    inc $P10
+    set rx1421_pos, $P10
+    ge rx1421_pos, rx1421_eos, rxscan1424_done
+  rxscan1424_scan:
+    set_addr $I10, rxscan1424_loop
+    rx1421_cur."!mark_push"(0, rx1421_pos, $I10)
+  rxscan1424_done:
+.annotate 'line', 607
   # rx enumcharlist negate=0 zerowidth
-    ge rx1392_pos, rx1392_eos, rx1392_fail
-    sub $I10, rx1392_pos, rx1392_off
-    substr $S10, rx1392_tgt, $I10, 1
+    sub $I10, rx1421_pos, rx1421_off
+    substr $S10, rx1421_tgt, $I10, 1
     index $I11, "$@", $S10
-    lt $I11, 0, rx1392_fail
+    lt $I11, 0, rx1421_fail
   # rx subrule "LANG" subtype=capture negate=
-    rx1392_cur."!cursor_pos"(rx1392_pos)
-    $P10 = rx1392_cur."LANG"("MAIN", "variable")
-    unless $P10, rx1392_fail
-    rx1392_cur."!mark_push"(0, -1, 0, $P10)
+    rx1421_cur."!cursor_pos"(rx1421_pos)
+    $P10 = rx1421_cur."LANG"("MAIN", "variable")
+    unless $P10, rx1421_fail
+    rx1421_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("var")
-    rx1392_pos = $P10."pos"()
-.annotate 'line', 599
+    rx1421_pos = $P10."pos"()
+.annotate 'line', 606
   # rx pass
-    rx1392_cur."!cursor_pass"(rx1392_pos, "assertion:sym<var>")
-    if_null rx1392_debug, debug_1067
-    rx1392_cur."!cursor_debug"("PASS", "assertion:sym<var>", " at pos=", rx1392_pos)
-  debug_1067:
-    .return (rx1392_cur)
-  rx1392_restart:
-.annotate 'line', 567
-    if_null rx1392_debug, debug_1068
-    rx1392_cur."!cursor_debug"("NEXT", "assertion:sym<var>")
-  debug_1068:
-  rx1392_fail:
-    (rx1392_rep, rx1392_pos, $I10, $P10) = rx1392_cur."!mark_fail"(0)
-    lt rx1392_pos, -1, rx1392_done
-    eq rx1392_pos, -1, rx1392_fail
-    jump $I10
-  rx1392_done:
-    rx1392_cur."!cursor_fail"()
-    if_null rx1392_debug, debug_1069
-    rx1392_cur."!cursor_debug"("FAIL", "assertion:sym<var>")
-  debug_1069:
-    .return (rx1392_cur)
+    rx1421_cur."!cursor_pass"(rx1421_pos, "assertion:sym<var>")
+    if_null rx1421_debug, debug_1081
+    rx1421_cur."!cursor_debug"("PASS", "assertion:sym<var>", " at pos=", rx1421_pos)
+  debug_1081:
+    .return (rx1421_cur)
+  rx1421_restart:
+.annotate 'line', 574
+    if_null rx1421_debug, debug_1082
+    rx1421_cur."!cursor_debug"("NEXT", "assertion:sym<var>")
+  debug_1082:
+  rx1421_fail:
+    (rx1421_rep, rx1421_pos, $I10, $P10) = rx1421_cur."!mark_fail"(0)
+    lt rx1421_pos, -1, rx1421_done
+    eq rx1421_pos, -1, rx1421_fail
+    jump $I10
+  rx1421_done:
+    rx1421_cur."!cursor_fail"()
+    if_null rx1421_debug, debug_1083
+    rx1421_cur."!cursor_debug"("FAIL", "assertion:sym<var>")
+  debug_1083:
+    .return (rx1421_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__assertion:sym<var>"  :subid("367_1282324002.40722") :method
-.annotate 'line', 567
-    new $P1394, "ResizablePMCArray"
-    push $P1394, "$"
-    push $P1394, "@"
-    .return ($P1394)
+.sub "!PREFIX__assertion:sym<var>"  :subid("373_1284728478.15265") :method
+.annotate 'line', 574
+    new $P1423, "ResizablePMCArray"
+    push $P1423, "$"
+    push $P1423, "@"
+    .return ($P1423)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "codeblock"  :subid("368_1282324002.40722") :method :outer("349_1282324002.40722")
-.annotate 'line', 567
-    .local string rx1397_tgt
-    .local int rx1397_pos
-    .local int rx1397_off
-    .local int rx1397_eos
-    .local int rx1397_rep
-    .local pmc rx1397_cur
-    .local pmc rx1397_debug
-    (rx1397_cur, rx1397_pos, rx1397_tgt, $I10) = self."!cursor_start"()
-    getattribute rx1397_debug, rx1397_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx1397_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1397_eos, rx1397_tgt
-    gt rx1397_pos, rx1397_eos, rx1397_done
-    set rx1397_off, 0
-    lt rx1397_pos, 2, rx1397_start
-    sub rx1397_off, rx1397_pos, 1
-    substr rx1397_tgt, rx1397_tgt, rx1397_off
-  rx1397_start:
-    eq $I10, 1, rx1397_restart
-    if_null rx1397_debug, debug_1070
-    rx1397_cur."!cursor_debug"("START", "codeblock")
-  debug_1070:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1401_done
-    goto rxscan1401_scan
-  rxscan1401_loop:
-    ($P10) = rx1397_cur."from"()
-    inc $P10
-    set rx1397_pos, $P10
-    ge rx1397_pos, rx1397_eos, rxscan1401_done
-  rxscan1401_scan:
-    set_addr $I10, rxscan1401_loop
-    rx1397_cur."!mark_push"(0, rx1397_pos, $I10)
-  rxscan1401_done:
-.annotate 'line', 604
+.sub "codeblock"  :subid("374_1284728478.15265") :method :outer("355_1284728478.15265")
+.annotate 'line', 574
+    .local string rx1426_tgt
+    .local int rx1426_pos
+    .local int rx1426_off
+    .local int rx1426_eos
+    .local int rx1426_rep
+    .local pmc rx1426_cur
+    .local pmc rx1426_debug
+    (rx1426_cur, rx1426_pos, rx1426_tgt, $I10) = self."!cursor_start"()
+    getattribute rx1426_debug, rx1426_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx1426_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1426_eos, rx1426_tgt
+    gt rx1426_pos, rx1426_eos, rx1426_done
+    set rx1426_off, 0
+    lt rx1426_pos, 2, rx1426_start
+    sub rx1426_off, rx1426_pos, 1
+    substr rx1426_tgt, rx1426_tgt, rx1426_off
+  rx1426_start:
+    eq $I10, 1, rx1426_restart
+    if_null rx1426_debug, debug_1084
+    rx1426_cur."!cursor_debug"("START", "codeblock")
+  debug_1084:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1430_done
+    goto rxscan1430_scan
+  rxscan1430_loop:
+    ($P10) = rx1426_cur."from"()
+    inc $P10
+    set rx1426_pos, $P10
+    ge rx1426_pos, rx1426_eos, rxscan1430_done
+  rxscan1430_scan:
+    set_addr $I10, rxscan1430_loop
+    rx1426_cur."!mark_push"(0, rx1426_pos, $I10)
+  rxscan1430_done:
+.annotate 'line', 611
   # rx subrule "LANG" subtype=capture negate=
-    rx1397_cur."!cursor_pos"(rx1397_pos)
-    $P10 = rx1397_cur."LANG"("MAIN", "pblock")
-    unless $P10, rx1397_fail
-    rx1397_cur."!mark_push"(0, -1, 0, $P10)
+    rx1426_cur."!cursor_pos"(rx1426_pos)
+    $P10 = rx1426_cur."LANG"("MAIN", "pblock")
+    unless $P10, rx1426_fail
+    rx1426_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx1397_pos = $P10."pos"()
-.annotate 'line', 603
+    rx1426_pos = $P10."pos"()
+.annotate 'line', 610
   # rx pass
-    rx1397_cur."!cursor_pass"(rx1397_pos, "codeblock")
-    if_null rx1397_debug, debug_1071
-    rx1397_cur."!cursor_debug"("PASS", "codeblock", " at pos=", rx1397_pos)
-  debug_1071:
-    .return (rx1397_cur)
-  rx1397_restart:
-.annotate 'line', 567
-    if_null rx1397_debug, debug_1072
-    rx1397_cur."!cursor_debug"("NEXT", "codeblock")
-  debug_1072:
-  rx1397_fail:
-    (rx1397_rep, rx1397_pos, $I10, $P10) = rx1397_cur."!mark_fail"(0)
-    lt rx1397_pos, -1, rx1397_done
-    eq rx1397_pos, -1, rx1397_fail
-    jump $I10
-  rx1397_done:
-    rx1397_cur."!cursor_fail"()
-    if_null rx1397_debug, debug_1073
-    rx1397_cur."!cursor_debug"("FAIL", "codeblock")
-  debug_1073:
-    .return (rx1397_cur)
+    rx1426_cur."!cursor_pass"(rx1426_pos, "codeblock")
+    if_null rx1426_debug, debug_1085
+    rx1426_cur."!cursor_debug"("PASS", "codeblock", " at pos=", rx1426_pos)
+  debug_1085:
+    .return (rx1426_cur)
+  rx1426_restart:
+.annotate 'line', 574
+    if_null rx1426_debug, debug_1086
+    rx1426_cur."!cursor_debug"("NEXT", "codeblock")
+  debug_1086:
+  rx1426_fail:
+    (rx1426_rep, rx1426_pos, $I10, $P10) = rx1426_cur."!mark_fail"(0)
+    lt rx1426_pos, -1, rx1426_done
+    eq rx1426_pos, -1, rx1426_fail
+    jump $I10
+  rx1426_done:
+    rx1426_cur."!cursor_fail"()
+    if_null rx1426_debug, debug_1087
+    rx1426_cur."!cursor_debug"("FAIL", "codeblock")
+  debug_1087:
+    .return (rx1426_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__codeblock"  :subid("369_1282324002.40722") :method
-.annotate 'line', 567
-    $P1399 = self."!PREFIX__!subrule"("LANG", "")
-    new $P1400, "ResizablePMCArray"
-    push $P1400, $P1399
-    .return ($P1400)
+.sub "!PREFIX__codeblock"  :subid("375_1284728478.15265") :method
+.annotate 'line', 574
+    $P1428 = self."!PREFIX__!subrule"("LANG", "")
+    new $P1429, "ResizablePMCArray"
+    push $P1429, $P1428
+    .return ($P1429)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block1403" :load :anon :subid("370_1282324002.40722")
+.sub "_block1432" :load :anon :subid("376_1284728478.15265")
 .annotate 'line', 4
-    .const 'Sub' $P1405 = "11_1282324002.40722" 
-    $P1406 = $P1405()
-    .return ($P1406)
+    .const 'Sub' $P1434 = "11_1284728478.15265" 
+    $P1435 = $P1434()
+    .return ($P1435)
 .end
 
 
 .namespace []
-.sub "_block1424" :load :anon :subid("371_1282324002.40722")
+.sub "_block1453" :load :anon :subid("377_1284728478.15265")
 .annotate 'line', 1
-    .const 'Sub' $P1426 = "10_1282324002.40722" 
-    $P1427 = $P1426()
-    .return ($P1427)
+    .const 'Sub' $P1455 = "10_1284728478.15265" 
+    $P1456 = $P1455()
+    .return ($P1456)
 .end
 
 ### .include 'gen/nqp-actions.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1282324007.53935")
+.sub "_block11"  :anon :subid("10_1284728484.24945")
 .annotate 'line', 0
     get_hll_global $P14, ["NQP";"Actions"], "_block13" 
     capture_lex $P14
@@ -20192,265 +20469,269 @@
 .annotate 'line', 3
     get_hll_global $P14, ["NQP";"Actions"], "_block13" 
     capture_lex $P14
-    $P2452 = $P14()
+    $P2558 = $P14()
 .annotate 'line', 1
-    .return ($P2452)
-    .const 'Sub' $P2454 = "143_1282324007.53935" 
-    .return ($P2454)
+    .return ($P2558)
+    .const 'Sub' $P2560 = "148_1284728484.24945" 
+    .return ($P2560)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post144") :outer("10_1282324007.53935")
+.sub "" :load :init :subid("post149") :outer("10_1284728484.24945")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1282324007.53935" 
+    .const 'Sub' $P12 = "10_1284728484.24945" 
     .local pmc block
     set block, $P12
-    $P2457 = get_root_global ["parrot"], "P6metaclass"
-    $P2457."new_class"("NQP::Actions", "HLL::Actions" :named("parent"))
+    $P2563 = get_root_global ["parrot"], "P6metaclass"
+    $P2563."new_class"("NQP::Actions", "HLL::Actions" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block13"  :subid("11_1282324007.53935") :outer("10_1282324007.53935")
+.sub "_block13"  :subid("11_1284728484.24945") :outer("10_1284728484.24945")
 .annotate 'line', 3
-    .const 'Sub' $P2448 = "142_1282324007.53935" 
-    capture_lex $P2448
-    get_hll_global $P2331, ["NQP";"RegexActions"], "_block2330" 
+    .const 'Sub' $P2554 = "147_1284728484.24945" 
+    capture_lex $P2554
+    get_hll_global $P2437, ["NQP";"RegexActions"], "_block2436" 
+    capture_lex $P2437
+    .const 'Sub' $P2426 = "137_1284728484.24945" 
+    capture_lex $P2426
+    .const 'Sub' $P2419 = "136_1284728484.24945" 
+    capture_lex $P2419
+    .const 'Sub' $P2412 = "135_1284728484.24945" 
+    capture_lex $P2412
+    .const 'Sub' $P2405 = "134_1284728484.24945" 
+    capture_lex $P2405
+    .const 'Sub' $P2392 = "133_1284728484.24945" 
+    capture_lex $P2392
+    .const 'Sub' $P2382 = "132_1284728484.24945" 
+    capture_lex $P2382
+    .const 'Sub' $P2372 = "131_1284728484.24945" 
+    capture_lex $P2372
+    .const 'Sub' $P2362 = "130_1284728484.24945" 
+    capture_lex $P2362
+    .const 'Sub' $P2355 = "129_1284728484.24945" 
+    capture_lex $P2355
+    .const 'Sub' $P2341 = "128_1284728484.24945" 
+    capture_lex $P2341
+    .const 'Sub' $P2331 = "127_1284728484.24945" 
     capture_lex $P2331
-    .const 'Sub' $P2320 = "132_1282324007.53935" 
-    capture_lex $P2320
-    .const 'Sub' $P2313 = "131_1282324007.53935" 
-    capture_lex $P2313
-    .const 'Sub' $P2306 = "130_1282324007.53935" 
-    capture_lex $P2306
-    .const 'Sub' $P2299 = "129_1282324007.53935" 
-    capture_lex $P2299
-    .const 'Sub' $P2286 = "128_1282324007.53935" 
-    capture_lex $P2286
-    .const 'Sub' $P2276 = "127_1282324007.53935" 
-    capture_lex $P2276
-    .const 'Sub' $P2266 = "126_1282324007.53935" 
-    capture_lex $P2266
-    .const 'Sub' $P2256 = "125_1282324007.53935" 
-    capture_lex $P2256
-    .const 'Sub' $P2249 = "124_1282324007.53935" 
-    capture_lex $P2249
-    .const 'Sub' $P2235 = "123_1282324007.53935" 
-    capture_lex $P2235
-    .const 'Sub' $P2225 = "122_1282324007.53935" 
-    capture_lex $P2225
-    .const 'Sub' $P2188 = "121_1282324007.53935" 
-    capture_lex $P2188
-    .const 'Sub' $P2174 = "120_1282324007.53935" 
-    capture_lex $P2174
-    .const 'Sub' $P2164 = "119_1282324007.53935" 
-    capture_lex $P2164
-    .const 'Sub' $P2154 = "118_1282324007.53935" 
-    capture_lex $P2154
-    .const 'Sub' $P2144 = "117_1282324007.53935" 
-    capture_lex $P2144
-    .const 'Sub' $P2134 = "116_1282324007.53935" 
-    capture_lex $P2134
-    .const 'Sub' $P2124 = "115_1282324007.53935" 
-    capture_lex $P2124
-    .const 'Sub' $P2096 = "114_1282324007.53935" 
-    capture_lex $P2096
-    .const 'Sub' $P2079 = "113_1282324007.53935" 
-    capture_lex $P2079
-    .const 'Sub' $P2069 = "112_1282324007.53935" 
-    capture_lex $P2069
-    .const 'Sub' $P2056 = "111_1282324007.53935" 
-    capture_lex $P2056
-    .const 'Sub' $P2043 = "110_1282324007.53935" 
-    capture_lex $P2043
-    .const 'Sub' $P2030 = "109_1282324007.53935" 
-    capture_lex $P2030
-    .const 'Sub' $P2020 = "108_1282324007.53935" 
-    capture_lex $P2020
-    .const 'Sub' $P1991 = "107_1282324007.53935" 
-    capture_lex $P1991
-    .const 'Sub' $P1967 = "106_1282324007.53935" 
-    capture_lex $P1967
-    .const 'Sub' $P1957 = "105_1282324007.53935" 
-    capture_lex $P1957
-    .const 'Sub' $P1947 = "104_1282324007.53935" 
-    capture_lex $P1947
-    .const 'Sub' $P1920 = "103_1282324007.53935" 
-    capture_lex $P1920
-    .const 'Sub' $P1902 = "102_1282324007.53935" 
-    capture_lex $P1902
-    .const 'Sub' $P1892 = "101_1282324007.53935" 
-    capture_lex $P1892
-    .const 'Sub' $P1788 = "98_1282324007.53935" 
+    .const 'Sub' $P2294 = "126_1284728484.24945" 
+    capture_lex $P2294
+    .const 'Sub' $P2280 = "125_1284728484.24945" 
+    capture_lex $P2280
+    .const 'Sub' $P2270 = "124_1284728484.24945" 
+    capture_lex $P2270
+    .const 'Sub' $P2260 = "123_1284728484.24945" 
+    capture_lex $P2260
+    .const 'Sub' $P2250 = "122_1284728484.24945" 
+    capture_lex $P2250
+    .const 'Sub' $P2240 = "121_1284728484.24945" 
+    capture_lex $P2240
+    .const 'Sub' $P2230 = "120_1284728484.24945" 
+    capture_lex $P2230
+    .const 'Sub' $P2202 = "119_1284728484.24945" 
+    capture_lex $P2202
+    .const 'Sub' $P2185 = "118_1284728484.24945" 
+    capture_lex $P2185
+    .const 'Sub' $P2175 = "117_1284728484.24945" 
+    capture_lex $P2175
+    .const 'Sub' $P2162 = "116_1284728484.24945" 
+    capture_lex $P2162
+    .const 'Sub' $P2149 = "115_1284728484.24945" 
+    capture_lex $P2149
+    .const 'Sub' $P2136 = "114_1284728484.24945" 
+    capture_lex $P2136
+    .const 'Sub' $P2126 = "113_1284728484.24945" 
+    capture_lex $P2126
+    .const 'Sub' $P2097 = "112_1284728484.24945" 
+    capture_lex $P2097
+    .const 'Sub' $P2073 = "111_1284728484.24945" 
+    capture_lex $P2073
+    .const 'Sub' $P2063 = "110_1284728484.24945" 
+    capture_lex $P2063
+    .const 'Sub' $P2053 = "109_1284728484.24945" 
+    capture_lex $P2053
+    .const 'Sub' $P2026 = "108_1284728484.24945" 
+    capture_lex $P2026
+    .const 'Sub' $P2008 = "107_1284728484.24945" 
+    capture_lex $P2008
+    .const 'Sub' $P1998 = "106_1284728484.24945" 
+    capture_lex $P1998
+    .const 'Sub' $P1894 = "103_1284728484.24945" 
+    capture_lex $P1894
+    .const 'Sub' $P1884 = "102_1284728484.24945" 
+    capture_lex $P1884
+    .const 'Sub' $P1855 = "101_1284728484.24945" 
+    capture_lex $P1855
+    .const 'Sub' $P1813 = "100_1284728484.24945" 
+    capture_lex $P1813
+    .const 'Sub' $P1797 = "99_1284728484.24945" 
+    capture_lex $P1797
+    .const 'Sub' $P1788 = "98_1284728484.24945" 
     capture_lex $P1788
-    .const 'Sub' $P1778 = "97_1282324007.53935" 
-    capture_lex $P1778
-    .const 'Sub' $P1749 = "96_1282324007.53935" 
-    capture_lex $P1749
-    .const 'Sub' $P1707 = "95_1282324007.53935" 
-    capture_lex $P1707
-    .const 'Sub' $P1691 = "94_1282324007.53935" 
-    capture_lex $P1691
-    .const 'Sub' $P1682 = "93_1282324007.53935" 
-    capture_lex $P1682
-    .const 'Sub' $P1650 = "92_1282324007.53935" 
-    capture_lex $P1650
-    .const 'Sub' $P1551 = "89_1282324007.53935" 
-    capture_lex $P1551
-    .const 'Sub' $P1534 = "88_1282324007.53935" 
-    capture_lex $P1534
-    .const 'Sub' $P1514 = "87_1282324007.53935" 
-    capture_lex $P1514
-    .const 'Sub' $P1402 = "84_1282324007.53935" 
-    capture_lex $P1402
-    .const 'Sub' $P1345 = "80_1282324007.53935" 
-    capture_lex $P1345
-    .const 'Sub' $P1300 = "78_1282324007.53935" 
-    capture_lex $P1300
-    .const 'Sub' $P1250 = "76_1282324007.53935" 
+    .const 'Sub' $P1756 = "97_1284728484.24945" 
+    capture_lex $P1756
+    .const 'Sub' $P1657 = "94_1284728484.24945" 
+    capture_lex $P1657
+    .const 'Sub' $P1615 = "92_1284728484.24945" 
+    capture_lex $P1615
+    .const 'Sub' $P1605 = "91_1284728484.24945" 
+    capture_lex $P1605
+    .const 'Sub' $P1588 = "90_1284728484.24945" 
+    capture_lex $P1588
+    .const 'Sub' $P1568 = "89_1284728484.24945" 
+    capture_lex $P1568
+    .const 'Sub' $P1456 = "86_1284728484.24945" 
+    capture_lex $P1456
+    .const 'Sub' $P1387 = "82_1284728484.24945" 
+    capture_lex $P1387
+    .const 'Sub' $P1322 = "79_1284728484.24945" 
+    capture_lex $P1322
+    .const 'Sub' $P1250 = "76_1284728484.24945" 
     capture_lex $P1250
-    .const 'Sub' $P1240 = "75_1282324007.53935" 
+    .const 'Sub' $P1240 = "75_1284728484.24945" 
     capture_lex $P1240
-    .const 'Sub' $P1230 = "74_1282324007.53935" 
+    .const 'Sub' $P1230 = "74_1284728484.24945" 
     capture_lex $P1230
-    .const 'Sub' $P1159 = "72_1282324007.53935" 
+    .const 'Sub' $P1159 = "72_1284728484.24945" 
     capture_lex $P1159
-    .const 'Sub' $P1149 = "71_1282324007.53935" 
+    .const 'Sub' $P1149 = "71_1284728484.24945" 
     capture_lex $P1149
-    .const 'Sub' $P1132 = "70_1282324007.53935" 
+    .const 'Sub' $P1132 = "70_1284728484.24945" 
     capture_lex $P1132
-    .const 'Sub' $P1115 = "69_1282324007.53935" 
+    .const 'Sub' $P1115 = "69_1284728484.24945" 
     capture_lex $P1115
-    .const 'Sub' $P1098 = "68_1282324007.53935" 
+    .const 'Sub' $P1098 = "68_1284728484.24945" 
     capture_lex $P1098
-    .const 'Sub' $P1088 = "67_1282324007.53935" 
+    .const 'Sub' $P1088 = "67_1284728484.24945" 
     capture_lex $P1088
-    .const 'Sub' $P1078 = "66_1282324007.53935" 
+    .const 'Sub' $P1078 = "66_1284728484.24945" 
     capture_lex $P1078
-    .const 'Sub' $P1068 = "65_1282324007.53935" 
+    .const 'Sub' $P1068 = "65_1284728484.24945" 
     capture_lex $P1068
-    .const 'Sub' $P1044 = "64_1282324007.53935" 
+    .const 'Sub' $P1044 = "64_1284728484.24945" 
     capture_lex $P1044
-    .const 'Sub' $P991 = "63_1282324007.53935" 
+    .const 'Sub' $P991 = "63_1284728484.24945" 
     capture_lex $P991
-    .const 'Sub' $P981 = "62_1282324007.53935" 
+    .const 'Sub' $P981 = "62_1284728484.24945" 
     capture_lex $P981
-    .const 'Sub' $P892 = "60_1282324007.53935" 
+    .const 'Sub' $P892 = "60_1284728484.24945" 
     capture_lex $P892
-    .const 'Sub' $P866 = "59_1282324007.53935" 
+    .const 'Sub' $P866 = "59_1284728484.24945" 
     capture_lex $P866
-    .const 'Sub' $P850 = "58_1282324007.53935" 
+    .const 'Sub' $P850 = "58_1284728484.24945" 
     capture_lex $P850
-    .const 'Sub' $P840 = "57_1282324007.53935" 
+    .const 'Sub' $P840 = "57_1284728484.24945" 
     capture_lex $P840
-    .const 'Sub' $P830 = "56_1282324007.53935" 
+    .const 'Sub' $P830 = "56_1284728484.24945" 
     capture_lex $P830
-    .const 'Sub' $P820 = "55_1282324007.53935" 
+    .const 'Sub' $P820 = "55_1284728484.24945" 
     capture_lex $P820
-    .const 'Sub' $P810 = "54_1282324007.53935" 
+    .const 'Sub' $P810 = "54_1284728484.24945" 
     capture_lex $P810
-    .const 'Sub' $P800 = "53_1282324007.53935" 
+    .const 'Sub' $P800 = "53_1284728484.24945" 
     capture_lex $P800
-    .const 'Sub' $P790 = "52_1282324007.53935" 
+    .const 'Sub' $P790 = "52_1284728484.24945" 
     capture_lex $P790
-    .const 'Sub' $P780 = "51_1282324007.53935" 
+    .const 'Sub' $P780 = "51_1284728484.24945" 
     capture_lex $P780
-    .const 'Sub' $P770 = "50_1282324007.53935" 
+    .const 'Sub' $P770 = "50_1284728484.24945" 
     capture_lex $P770
-    .const 'Sub' $P760 = "49_1282324007.53935" 
+    .const 'Sub' $P760 = "49_1284728484.24945" 
     capture_lex $P760
-    .const 'Sub' $P750 = "48_1282324007.53935" 
+    .const 'Sub' $P750 = "48_1284728484.24945" 
     capture_lex $P750
-    .const 'Sub' $P740 = "47_1282324007.53935" 
+    .const 'Sub' $P740 = "47_1284728484.24945" 
     capture_lex $P740
-    .const 'Sub' $P730 = "46_1282324007.53935" 
+    .const 'Sub' $P730 = "46_1284728484.24945" 
     capture_lex $P730
-    .const 'Sub' $P720 = "45_1282324007.53935" 
+    .const 'Sub' $P720 = "45_1284728484.24945" 
     capture_lex $P720
-    .const 'Sub' $P702 = "44_1282324007.53935" 
+    .const 'Sub' $P702 = "44_1284728484.24945" 
     capture_lex $P702
-    .const 'Sub' $P667 = "43_1282324007.53935" 
+    .const 'Sub' $P667 = "43_1284728484.24945" 
     capture_lex $P667
-    .const 'Sub' $P651 = "42_1282324007.53935" 
+    .const 'Sub' $P651 = "42_1284728484.24945" 
     capture_lex $P651
-    .const 'Sub' $P630 = "41_1282324007.53935" 
+    .const 'Sub' $P630 = "41_1284728484.24945" 
     capture_lex $P630
-    .const 'Sub' $P610 = "40_1282324007.53935" 
+    .const 'Sub' $P610 = "40_1284728484.24945" 
     capture_lex $P610
-    .const 'Sub' $P597 = "39_1282324007.53935" 
+    .const 'Sub' $P597 = "39_1284728484.24945" 
     capture_lex $P597
-    .const 'Sub' $P571 = "38_1282324007.53935" 
+    .const 'Sub' $P571 = "38_1284728484.24945" 
     capture_lex $P571
-    .const 'Sub' $P535 = "37_1282324007.53935" 
+    .const 'Sub' $P535 = "37_1284728484.24945" 
     capture_lex $P535
-    .const 'Sub' $P518 = "36_1282324007.53935" 
+    .const 'Sub' $P518 = "36_1284728484.24945" 
     capture_lex $P518
-    .const 'Sub' $P504 = "35_1282324007.53935" 
+    .const 'Sub' $P504 = "35_1284728484.24945" 
     capture_lex $P504
-    .const 'Sub' $P451 = "33_1282324007.53935" 
+    .const 'Sub' $P451 = "33_1284728484.24945" 
     capture_lex $P451
-    .const 'Sub' $P440 = "32_1282324007.53935" 
+    .const 'Sub' $P440 = "32_1284728484.24945" 
     capture_lex $P440
-    .const 'Sub' $P427 = "31_1282324007.53935" 
+    .const 'Sub' $P427 = "31_1284728484.24945" 
     capture_lex $P427
-    .const 'Sub' $P407 = "30_1282324007.53935" 
+    .const 'Sub' $P407 = "30_1284728484.24945" 
     capture_lex $P407
-    .const 'Sub' $P397 = "29_1282324007.53935" 
+    .const 'Sub' $P397 = "29_1284728484.24945" 
     capture_lex $P397
-    .const 'Sub' $P387 = "28_1282324007.53935" 
+    .const 'Sub' $P387 = "28_1284728484.24945" 
     capture_lex $P387
-    .const 'Sub' $P371 = "27_1282324007.53935" 
+    .const 'Sub' $P371 = "27_1284728484.24945" 
     capture_lex $P371
-    .const 'Sub' $P288 = "25_1282324007.53935" 
+    .const 'Sub' $P288 = "25_1284728484.24945" 
     capture_lex $P288
-    .const 'Sub' $P245 = "23_1282324007.53935" 
+    .const 'Sub' $P245 = "23_1284728484.24945" 
     capture_lex $P245
-    .const 'Sub' $P213 = "22_1282324007.53935" 
+    .const 'Sub' $P213 = "22_1284728484.24945" 
     capture_lex $P213
-    .const 'Sub' $P180 = "21_1282324007.53935" 
+    .const 'Sub' $P180 = "21_1284728484.24945" 
     capture_lex $P180
-    .const 'Sub' $P170 = "20_1282324007.53935" 
+    .const 'Sub' $P170 = "20_1284728484.24945" 
     capture_lex $P170
-    .const 'Sub' $P151 = "19_1282324007.53935" 
+    .const 'Sub' $P151 = "19_1284728484.24945" 
     capture_lex $P151
-    .const 'Sub' $P100 = "18_1282324007.53935" 
+    .const 'Sub' $P100 = "18_1284728484.24945" 
     capture_lex $P100
-    .const 'Sub' $P84 = "17_1282324007.53935" 
+    .const 'Sub' $P84 = "17_1284728484.24945" 
     capture_lex $P84
-    .const 'Sub' $P63 = "16_1282324007.53935" 
+    .const 'Sub' $P63 = "16_1284728484.24945" 
     capture_lex $P63
-    .const 'Sub' $P27 = "13_1282324007.53935" 
+    .const 'Sub' $P27 = "13_1284728484.24945" 
     capture_lex $P27
-    .const 'Sub' $P16 = "12_1282324007.53935" 
+    .const 'Sub' $P16 = "12_1284728484.24945" 
     capture_lex $P16
     get_global $P15, "@BLOCK"
-    unless_null $P15, vivify_147
+    unless_null $P15, vivify_152
     $P15 = root_new ['parrot';'ResizablePMCArray']
     set_global "@BLOCK", $P15
-  vivify_147:
+  vivify_152:
 .annotate 'line', 9
-    .const 'Sub' $P16 = "12_1282324007.53935" 
+    .const 'Sub' $P16 = "12_1284728484.24945" 
     newclosure $P26, $P16
     .lex "xblock_immediate", $P26
 .annotate 'line', 14
-    .const 'Sub' $P27 = "13_1282324007.53935" 
+    .const 'Sub' $P27 = "13_1284728484.24945" 
     newclosure $P62, $P27
     .lex "block_immediate", $P62
 .annotate 'line', 24
-    .const 'Sub' $P63 = "16_1282324007.53935" 
+    .const 'Sub' $P63 = "16_1284728484.24945" 
     newclosure $P83, $P63
     .lex "vivitype", $P83
 .annotate 'line', 43
-    .const 'Sub' $P84 = "17_1282324007.53935" 
+    .const 'Sub' $P84 = "17_1284728484.24945" 
     newclosure $P99, $P84
     .lex "colonpair_str", $P99
 .annotate 'line', 223
-    .const 'Sub' $P100 = "18_1282324007.53935" 
+    .const 'Sub' $P100 = "18_1284728484.24945" 
     newclosure $P150, $P100
     .lex "push_block_handler", $P150
-.annotate 'line', 835
-    .const 'Sub' $P151 = "19_1282324007.53935" 
+.annotate 'line', 861
+    .const 'Sub' $P151 = "19_1284728484.24945" 
     newclosure $P165, $P151
     .lex "control", $P165
 .annotate 'line', 3
@@ -20469,52 +20750,52 @@
     find_lex $P212, "colonpair_str"
 .annotate 'line', 216
     find_lex $P650, "push_block_handler"
-.annotate 'line', 826
-    find_lex $P2298, "control"
-.annotate 'line', 853
-    get_hll_global $P2331, ["NQP";"RegexActions"], "_block2330" 
-    capture_lex $P2331
-    $P2442 = $P2331()
+.annotate 'line', 852
+    find_lex $P2404, "control"
+.annotate 'line', 879
+    get_hll_global $P2437, ["NQP";"RegexActions"], "_block2436" 
+    capture_lex $P2437
+    $P2548 = $P2437()
 .annotate 'line', 3
-    .return ($P2442)
-    .const 'Sub' $P2444 = "141_1282324007.53935" 
-    .return ($P2444)
+    .return ($P2548)
+    .const 'Sub' $P2550 = "146_1284728484.24945" 
+    .return ($P2550)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "" :load :init :subid("post145") :outer("11_1282324007.53935")
+.sub "" :load :init :subid("post150") :outer("11_1284728484.24945")
 .annotate 'line', 3
     get_hll_global $P14, ["NQP";"Actions"], "_block13" 
     .local pmc block
     set block, $P14
 .annotate 'line', 5
-    .const 'Sub' $P2448 = "142_1282324007.53935" 
-    capture_lex $P2448
-    $P2448()
-    $P2451 = get_root_global ["parrot"], "P6metaclass"
-    $P2451."new_class"("NQP::RegexActions", "Regex::P6Regex::Actions" :named("parent"))
+    .const 'Sub' $P2554 = "147_1284728484.24945" 
+    capture_lex $P2554
+    $P2554()
+    $P2557 = get_root_global ["parrot"], "P6metaclass"
+    $P2557."new_class"("NQP::RegexActions", "Regex::P6Regex::Actions" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block2447"  :anon :subid("142_1282324007.53935") :outer("11_1282324007.53935")
+.sub "_block2553"  :anon :subid("147_1284728484.24945") :outer("11_1284728484.24945")
 .annotate 'line', 6
-    get_global $P2449, "@BLOCK"
-    unless_null $P2449, vivify_146
-    $P2449 = root_new ['parrot';'ResizablePMCArray']
-    set_global "@BLOCK", $P2449
-  vivify_146:
- $P2450 = new ['ResizablePMCArray'] 
-    set_global "@BLOCK", $P2450
+    get_global $P2555, "@BLOCK"
+    unless_null $P2555, vivify_151
+    $P2555 = root_new ['parrot';'ResizablePMCArray']
+    set_global "@BLOCK", $P2555
+  vivify_151:
+ $P2556 = new ['ResizablePMCArray'] 
+    set_global "@BLOCK", $P2556
 .annotate 'line', 5
-    .return ($P2450)
+    .return ($P2556)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "xblock_immediate"  :subid("12_1282324007.53935") :outer("11_1282324007.53935")
+.sub "xblock_immediate"  :subid("12_1284728484.24945") :outer("11_1284728484.24945")
     .param pmc param_19
 .annotate 'line', 9
     new $P18, 'ExceptionHandler'
@@ -20524,19 +20805,19 @@
     .lex "$xblock", param_19
 .annotate 'line', 10
     find_lex $P20, "$xblock"
-    unless_null $P20, vivify_148
+    unless_null $P20, vivify_153
     $P20 = root_new ['parrot';'ResizablePMCArray']
-  vivify_148:
+  vivify_153:
     set $P21, $P20[1]
-    unless_null $P21, vivify_149
+    unless_null $P21, vivify_154
     new $P21, "Undef"
-  vivify_149:
+  vivify_154:
     $P22 = "block_immediate"($P21)
     find_lex $P23, "$xblock"
-    unless_null $P23, vivify_150
+    unless_null $P23, vivify_155
     $P23 = root_new ['parrot';'ResizablePMCArray']
     store_lex "$xblock", $P23
-  vivify_150:
+  vivify_155:
     set $P23[1], $P22
     find_lex $P24, "$xblock"
 .annotate 'line', 9
@@ -20551,10 +20832,10 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "block_immediate"  :subid("13_1282324007.53935") :outer("11_1282324007.53935")
+.sub "block_immediate"  :subid("13_1284728484.24945") :outer("11_1284728484.24945")
     .param pmc param_30
 .annotate 'line', 14
-    .const 'Sub' $P40 = "14_1282324007.53935" 
+    .const 'Sub' $P40 = "14_1284728484.24945" 
     capture_lex $P40
     new $P29, 'ExceptionHandler'
     set_addr $P29, control_28
@@ -20576,7 +20857,7 @@
     set $P33, $P38
   unless_34_end:
     if $P33, unless_32_end
-    .const 'Sub' $P40 = "14_1282324007.53935" 
+    .const 'Sub' $P40 = "14_1284728484.24945" 
     capture_lex $P40
     $P40()
   unless_32_end:
@@ -20593,9 +20874,9 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "_block39"  :anon :subid("14_1282324007.53935") :outer("13_1282324007.53935")
+.sub "_block39"  :anon :subid("14_1284728484.24945") :outer("13_1284728484.24945")
 .annotate 'line', 16
-    .const 'Sub' $P51 = "15_1282324007.53935" 
+    .const 'Sub' $P51 = "15_1284728484.24945" 
     capture_lex $P51
 .annotate 'line', 17
     new $P41, "Undef"
@@ -20608,7 +20889,7 @@
     find_lex $P46, "$block"
     $P47 = $P46."list"()
     defined $I48, $P47
-    unless $I48, for_undef_151
+    unless $I48, for_undef_156
     iter $P45, $P47
     new $P57, 'ExceptionHandler'
     set_addr $P57, loop56_handler
@@ -20618,7 +20899,7 @@
     unless $P45, loop56_done
     shift $P49, $P45
   loop56_redo:
-    .const 'Sub' $P51 = "15_1282324007.53935" 
+    .const 'Sub' $P51 = "15_1284728484.24945" 
     capture_lex $P51
     $P51($P49)
   loop56_next:
@@ -20631,7 +20912,7 @@
     eq $P58, .CONTROL_LOOP_REDO, loop56_redo
   loop56_done:
     pop_eh 
-  for_undef_151:
+  for_undef_156:
 .annotate 'line', 19
     find_lex $P59, "$stmts"
     store_lex "$block", $P59
@@ -20641,7 +20922,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block50"  :anon :subid("15_1282324007.53935") :outer("14_1282324007.53935")
+.sub "_block50"  :anon :subid("15_1284728484.24945") :outer("14_1284728484.24945")
     .param pmc param_52
 .annotate 'line', 18
     .lex "$_", param_52
@@ -20654,7 +20935,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "vivitype"  :subid("16_1282324007.53935") :outer("11_1282324007.53935")
+.sub "vivitype"  :subid("16_1284728484.24945") :outer("11_1284728484.24945")
     .param pmc param_66
 .annotate 'line', 24
     new $P65, 'ExceptionHandler'
@@ -20703,7 +20984,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "colonpair_str"  :subid("17_1282324007.53935") :outer("11_1282324007.53935")
+.sub "colonpair_str"  :subid("17_1284728484.24945") :outer("11_1284728484.24945")
     .param pmc param_87
 .annotate 'line', 43
     new $P86, 'ExceptionHandler'
@@ -20742,7 +21023,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "push_block_handler"  :subid("18_1282324007.53935") :outer("11_1282324007.53935")
+.sub "push_block_handler"  :subid("18_1284728484.24945") :outer("11_1284728484.24945")
     .param pmc param_103
     .param pmc param_104
 .annotate 'line', 223
@@ -20754,24 +21035,24 @@
     .lex "$block", param_104
 .annotate 'line', 224
     get_global $P106, "@BLOCK"
-    unless_null $P106, vivify_152
+    unless_null $P106, vivify_157
     $P106 = root_new ['parrot';'ResizablePMCArray']
-  vivify_152:
+  vivify_157:
     set $P107, $P106[0]
-    unless_null $P107, vivify_153
+    unless_null $P107, vivify_158
     new $P107, "Undef"
-  vivify_153:
+  vivify_158:
     $P108 = $P107."handlers"()
     if $P108, unless_105_end
 .annotate 'line', 225
     get_global $P109, "@BLOCK"
-    unless_null $P109, vivify_154
+    unless_null $P109, vivify_159
     $P109 = root_new ['parrot';'ResizablePMCArray']
-  vivify_154:
+  vivify_159:
     set $P110, $P109[0]
-    unless_null $P110, vivify_155
+    unless_null $P110, vivify_160
     new $P110, "Undef"
-  vivify_155:
+  vivify_160:
     new $P111, "ResizablePMCArray"
     $P110."handlers"($P111)
   unless_105_end:
@@ -20812,13 +21093,13 @@
     $P128."blocktype"("declaration")
 .annotate 'line', 240
     get_global $P129, "@BLOCK"
-    unless_null $P129, vivify_156
+    unless_null $P129, vivify_161
     $P129 = root_new ['parrot';'ResizablePMCArray']
-  vivify_156:
+  vivify_161:
     set $P130, $P129[0]
-    unless_null $P130, vivify_157
+    unless_null $P130, vivify_162
     new $P130, "Undef"
-  vivify_157:
+  vivify_162:
     $P131 = $P130."handlers"()
 .annotate 'line', 241
     get_hll_global $P132, ["PAST"], "Control"
@@ -20860,28 +21141,28 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "control"  :subid("19_1282324007.53935") :outer("11_1282324007.53935")
+.sub "control"  :subid("19_1284728484.24945") :outer("11_1284728484.24945")
     .param pmc param_154
     .param pmc param_155
-.annotate 'line', 835
+.annotate 'line', 861
     new $P153, 'ExceptionHandler'
     set_addr $P153, control_152
     $P153."handle_types"(.CONTROL_RETURN)
     push_eh $P153
     .lex "$/", param_154
     .lex "$type", param_155
-.annotate 'line', 836
+.annotate 'line', 862
     find_lex $P156, "$/"
     get_hll_global $P157, ["PAST"], "Op"
     find_lex $P158, "$/"
-.annotate 'line', 840
+.annotate 'line', 866
     get_hll_global $P159, ["PAST"], "Val"
     find_lex $P160, "$type"
     $P161 = $P159."new"($P160 :named("value"), "!except_types" :named("returns"))
     $P162 = $P157."new"(0, $P161, $P158 :named("node"), "die__vii" :named("pirop"))
-.annotate 'line', 836
+.annotate 'line', 862
     $P163 = $P156."!make"($P162)
-.annotate 'line', 835
+.annotate 'line', 861
     .return ($P163)
   control_152:
     .local pmc exception 
@@ -20893,7 +21174,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "TOP"  :subid("20_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "TOP"  :subid("20_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_173
 .annotate 'line', 33
     new $P172, 'ExceptionHandler'
@@ -20904,13 +21185,13 @@
     .lex "$/", param_173
     find_lex $P174, "$/"
     find_lex $P175, "$/"
-    unless_null $P175, vivify_158
+    unless_null $P175, vivify_163
     $P175 = root_new ['parrot';'Hash']
-  vivify_158:
+  vivify_163:
     set $P176, $P175["comp_unit"]
-    unless_null $P176, vivify_159
+    unless_null $P176, vivify_164
     new $P176, "Undef"
-  vivify_159:
+  vivify_164:
     $P177 = $P176."ast"()
     $P178 = $P174."!make"($P177)
     .return ($P178)
@@ -20924,7 +21205,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "deflongname"  :subid("21_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "deflongname"  :subid("21_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_183
 .annotate 'line', 35
     new $P182, 'ExceptionHandler'
@@ -20937,13 +21218,13 @@
     find_lex $P184, "$/"
 .annotate 'line', 37
     find_lex $P187, "$/"
-    unless_null $P187, vivify_160
+    unless_null $P187, vivify_165
     $P187 = root_new ['parrot';'Hash']
-  vivify_160:
+  vivify_165:
     set $P188, $P187["colonpair"]
-    unless_null $P188, vivify_161
+    unless_null $P188, vivify_166
     new $P188, "Undef"
-  vivify_161:
+  vivify_166:
     if $P188, if_186
 .annotate 'line', 39
     find_lex $P208, "$/"
@@ -20954,46 +21235,46 @@
     goto if_186_end
   if_186:
     find_lex $P189, "$/"
-    unless_null $P189, vivify_162
+    unless_null $P189, vivify_167
     $P189 = root_new ['parrot';'Hash']
-  vivify_162:
+  vivify_167:
     set $P190, $P189["identifier"]
-    unless_null $P190, vivify_163
+    unless_null $P190, vivify_168
     new $P190, "Undef"
-  vivify_163:
+  vivify_168:
     set $S191, $P190
     new $P192, 'String'
     set $P192, $S191
     concat $P193, $P192, ":"
     find_lex $P194, "$/"
-    unless_null $P194, vivify_164
+    unless_null $P194, vivify_169
     $P194 = root_new ['parrot';'Hash']
-  vivify_164:
+  vivify_169:
     set $P195, $P194["colonpair"]
-    unless_null $P195, vivify_165
+    unless_null $P195, vivify_170
     $P195 = root_new ['parrot';'ResizablePMCArray']
-  vivify_165:
+  vivify_170:
     set $P196, $P195[0]
-    unless_null $P196, vivify_166
+    unless_null $P196, vivify_171
     new $P196, "Undef"
-  vivify_166:
+  vivify_171:
     $P197 = $P196."ast"()
     $S198 = $P197."named"()
     concat $P199, $P193, $S198
     concat $P200, $P199, "<"
 .annotate 'line', 38
     find_lex $P201, "$/"
-    unless_null $P201, vivify_167
+    unless_null $P201, vivify_172
     $P201 = root_new ['parrot';'Hash']
-  vivify_167:
+  vivify_172:
     set $P202, $P201["colonpair"]
-    unless_null $P202, vivify_168
+    unless_null $P202, vivify_173
     $P202 = root_new ['parrot';'ResizablePMCArray']
-  vivify_168:
+  vivify_173:
     set $P203, $P202[0]
-    unless_null $P203, vivify_169
+    unless_null $P203, vivify_174
     new $P203, "Undef"
-  vivify_169:
+  vivify_174:
     $P204 = $P203."ast"()
     $S205 = "colonpair_str"($P204)
     concat $P206, $P200, $S205
@@ -21014,7 +21295,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "comp_unit"  :subid("22_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "comp_unit"  :subid("22_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_216
 .annotate 'line', 49
     new $P215, 'ExceptionHandler'
@@ -21031,13 +21312,13 @@
     .lex "$unit", $P218
 .annotate 'line', 50
     find_lex $P219, "$/"
-    unless_null $P219, vivify_170
+    unless_null $P219, vivify_175
     $P219 = root_new ['parrot';'Hash']
-  vivify_170:
+  vivify_175:
     set $P220, $P219["statementlist"]
-    unless_null $P220, vivify_171
+    unless_null $P220, vivify_176
     new $P220, "Undef"
-  vivify_171:
+  vivify_176:
     $P221 = $P220."ast"()
     store_lex "$mainline", $P221
 .annotate 'line', 51
@@ -21089,10 +21370,10 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statementlist"  :subid("23_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "statementlist"  :subid("23_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_248
 .annotate 'line', 76
-    .const 'Sub' $P262 = "24_1282324007.53935" 
+    .const 'Sub' $P262 = "24_1284728484.24945" 
     capture_lex $P262
     new $P247, 'ExceptionHandler'
     set_addr $P247, control_246
@@ -21109,25 +21390,25 @@
     store_lex "$past", $P252
 .annotate 'line', 78
     find_lex $P254, "$/"
-    unless_null $P254, vivify_172
+    unless_null $P254, vivify_177
     $P254 = root_new ['parrot';'Hash']
-  vivify_172:
+  vivify_177:
     set $P255, $P254["statement"]
-    unless_null $P255, vivify_173
+    unless_null $P255, vivify_178
     new $P255, "Undef"
-  vivify_173:
+  vivify_178:
     unless $P255, if_253_end
 .annotate 'line', 79
     find_lex $P257, "$/"
-    unless_null $P257, vivify_174
+    unless_null $P257, vivify_179
     $P257 = root_new ['parrot';'Hash']
-  vivify_174:
+  vivify_179:
     set $P258, $P257["statement"]
-    unless_null $P258, vivify_175
+    unless_null $P258, vivify_180
     new $P258, "Undef"
-  vivify_175:
+  vivify_180:
     defined $I259, $P258
-    unless $I259, for_undef_176
+    unless $I259, for_undef_181
     iter $P256, $P258
     new $P282, 'ExceptionHandler'
     set_addr $P282, loop281_handler
@@ -21137,7 +21418,7 @@
     unless $P256, loop281_done
     shift $P260, $P256
   loop281_redo:
-    .const 'Sub' $P262 = "24_1282324007.53935" 
+    .const 'Sub' $P262 = "24_1284728484.24945" 
     capture_lex $P262
     $P262($P260)
   loop281_next:
@@ -21150,7 +21431,7 @@
     eq $P283, .CONTROL_LOOP_REDO, loop281_redo
   loop281_done:
     pop_eh 
-  for_undef_176:
+  for_undef_181:
   if_253_end:
 .annotate 'line', 86
     find_lex $P284, "$/"
@@ -21167,7 +21448,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block261"  :anon :subid("24_1282324007.53935") :outer("23_1282324007.53935")
+.sub "_block261"  :anon :subid("24_1284728484.24945") :outer("23_1284728484.24945")
     .param pmc param_264
 .annotate 'line', 80
     new $P263, "Undef"
@@ -21178,34 +21459,34 @@
     store_lex "$ast", $P266
 .annotate 'line', 81
     find_lex $P268, "$ast"
-    unless_null $P268, vivify_177
+    unless_null $P268, vivify_182
     $P268 = root_new ['parrot';'Hash']
-  vivify_177:
+  vivify_182:
     set $P269, $P268["sink"]
-    unless_null $P269, vivify_178
+    unless_null $P269, vivify_183
     new $P269, "Undef"
-  vivify_178:
+  vivify_183:
     defined $I270, $P269
     unless $I270, if_267_end
     find_lex $P271, "$ast"
-    unless_null $P271, vivify_179
+    unless_null $P271, vivify_184
     $P271 = root_new ['parrot';'Hash']
-  vivify_179:
+  vivify_184:
     set $P272, $P271["sink"]
-    unless_null $P272, vivify_180
+    unless_null $P272, vivify_185
     new $P272, "Undef"
-  vivify_180:
+  vivify_185:
     store_lex "$ast", $P272
   if_267_end:
 .annotate 'line', 82
     find_lex $P274, "$ast"
-    unless_null $P274, vivify_181
+    unless_null $P274, vivify_186
     $P274 = root_new ['parrot';'Hash']
-  vivify_181:
+  vivify_186:
     set $P275, $P274["bareblock"]
-    unless_null $P275, vivify_182
+    unless_null $P275, vivify_187
     new $P275, "Undef"
-  vivify_182:
+  vivify_187:
     unless $P275, if_273_end
     find_lex $P276, "$ast"
     $P277 = "block_immediate"($P276)
@@ -21222,12 +21503,12 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement"  :subid("25_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "statement"  :subid("25_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_291
     .param pmc param_292 :optional
     .param int has_param_292 :opt_flag
 .annotate 'line', 89
-    .const 'Sub' $P300 = "26_1282324007.53935" 
+    .const 'Sub' $P300 = "26_1284728484.24945" 
     capture_lex $P300
     new $P290, 'ExceptionHandler'
     set_addr $P290, control_289
@@ -21235,10 +21516,10 @@
     push_eh $P290
     .lex "self", self
     .lex "$/", param_291
-    if has_param_292, optparam_183
+    if has_param_292, optparam_188
     new $P293, "Undef"
     set param_292, $P293
-  optparam_183:
+  optparam_188:
     .lex "$key", param_292
 .annotate 'line', 90
     new $P294, "Undef"
@@ -21247,23 +21528,23 @@
     find_lex $P295, "$past"
 .annotate 'line', 91
     find_lex $P297, "$/"
-    unless_null $P297, vivify_184
+    unless_null $P297, vivify_189
     $P297 = root_new ['parrot';'Hash']
-  vivify_184:
+  vivify_189:
     set $P298, $P297["EXPR"]
-    unless_null $P298, vivify_185
+    unless_null $P298, vivify_190
     new $P298, "Undef"
-  vivify_185:
+  vivify_190:
     if $P298, if_296
 .annotate 'line', 112
     find_lex $P361, "$/"
-    unless_null $P361, vivify_186
+    unless_null $P361, vivify_191
     $P361 = root_new ['parrot';'Hash']
-  vivify_186:
+  vivify_191:
     set $P362, $P361["statement_control"]
-    unless_null $P362, vivify_187
+    unless_null $P362, vivify_192
     new $P362, "Undef"
-  vivify_187:
+  vivify_192:
     if $P362, if_360
 .annotate 'line', 113
     new $P366, "Integer"
@@ -21273,20 +21554,20 @@
   if_360:
 .annotate 'line', 112
     find_lex $P363, "$/"
-    unless_null $P363, vivify_188
+    unless_null $P363, vivify_193
     $P363 = root_new ['parrot';'Hash']
-  vivify_188:
+  vivify_193:
     set $P364, $P363["statement_control"]
-    unless_null $P364, vivify_189
+    unless_null $P364, vivify_194
     new $P364, "Undef"
-  vivify_189:
+  vivify_194:
     $P365 = $P364."ast"()
     store_lex "$past", $P365
   if_360_end:
     goto if_296_end
   if_296:
 .annotate 'line', 91
-    .const 'Sub' $P300 = "26_1282324007.53935" 
+    .const 'Sub' $P300 = "26_1284728484.24945" 
     capture_lex $P300
     $P300()
   if_296_end:
@@ -21305,7 +21586,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block299"  :anon :subid("26_1282324007.53935") :outer("25_1282324007.53935")
+.sub "_block299"  :anon :subid("26_1284728484.24945") :outer("25_1284728484.24945")
 .annotate 'line', 92
     new $P301, "Undef"
     .lex "$mc", $P301
@@ -21314,41 +21595,41 @@
     .lex "$ml", $P302
 .annotate 'line', 92
     find_lex $P303, "$/"
-    unless_null $P303, vivify_190
+    unless_null $P303, vivify_195
     $P303 = root_new ['parrot';'Hash']
-  vivify_190:
+  vivify_195:
     set $P304, $P303["statement_mod_cond"]
-    unless_null $P304, vivify_191
+    unless_null $P304, vivify_196
     $P304 = root_new ['parrot';'ResizablePMCArray']
-  vivify_191:
+  vivify_196:
     set $P305, $P304[0]
-    unless_null $P305, vivify_192
+    unless_null $P305, vivify_197
     new $P305, "Undef"
-  vivify_192:
+  vivify_197:
     store_lex "$mc", $P305
 .annotate 'line', 93
     find_lex $P306, "$/"
-    unless_null $P306, vivify_193
+    unless_null $P306, vivify_198
     $P306 = root_new ['parrot';'Hash']
-  vivify_193:
+  vivify_198:
     set $P307, $P306["statement_mod_loop"]
-    unless_null $P307, vivify_194
+    unless_null $P307, vivify_199
     $P307 = root_new ['parrot';'ResizablePMCArray']
-  vivify_194:
+  vivify_199:
     set $P308, $P307[0]
-    unless_null $P308, vivify_195
+    unless_null $P308, vivify_200
     new $P308, "Undef"
-  vivify_195:
+  vivify_200:
     store_lex "$ml", $P308
 .annotate 'line', 94
     find_lex $P309, "$/"
-    unless_null $P309, vivify_196
+    unless_null $P309, vivify_201
     $P309 = root_new ['parrot';'Hash']
-  vivify_196:
+  vivify_201:
     set $P310, $P309["EXPR"]
-    unless_null $P310, vivify_197
+    unless_null $P310, vivify_202
     new $P310, "Undef"
-  vivify_197:
+  vivify_202:
     $P311 = $P310."ast"()
     store_lex "$past", $P311
 .annotate 'line', 95
@@ -21357,23 +21638,23 @@
 .annotate 'line', 96
     get_hll_global $P314, ["PAST"], "Op"
     find_lex $P315, "$mc"
-    unless_null $P315, vivify_198
+    unless_null $P315, vivify_203
     $P315 = root_new ['parrot';'Hash']
-  vivify_198:
+  vivify_203:
     set $P316, $P315["cond"]
-    unless_null $P316, vivify_199
+    unless_null $P316, vivify_204
     new $P316, "Undef"
-  vivify_199:
+  vivify_204:
     $P317 = $P316."ast"()
     find_lex $P318, "$past"
     find_lex $P319, "$mc"
-    unless_null $P319, vivify_200
+    unless_null $P319, vivify_205
     $P319 = root_new ['parrot';'Hash']
-  vivify_200:
+  vivify_205:
     set $P320, $P319["sym"]
-    unless_null $P320, vivify_201
+    unless_null $P320, vivify_206
     new $P320, "Undef"
-  vivify_201:
+  vivify_206:
     set $S321, $P320
     find_lex $P322, "$/"
     $P323 = $P314."new"($P317, $P318, $S321 :named("pasttype"), $P322 :named("node"))
@@ -21387,36 +21668,36 @@
   if_325:
 .annotate 'line', 99
     find_lex $P329, "$ml"
-    unless_null $P329, vivify_202
+    unless_null $P329, vivify_207
     $P329 = root_new ['parrot';'Hash']
-  vivify_202:
+  vivify_207:
     set $P330, $P329["sym"]
-    unless_null $P330, vivify_203
+    unless_null $P330, vivify_208
     new $P330, "Undef"
-  vivify_203:
+  vivify_208:
     set $S331, $P330
     iseq $I332, $S331, "for"
     if $I332, if_328
 .annotate 'line', 108
     get_hll_global $P350, ["PAST"], "Op"
     find_lex $P351, "$ml"
-    unless_null $P351, vivify_204
+    unless_null $P351, vivify_209
     $P351 = root_new ['parrot';'Hash']
-  vivify_204:
+  vivify_209:
     set $P352, $P351["cond"]
-    unless_null $P352, vivify_205
+    unless_null $P352, vivify_210
     new $P352, "Undef"
-  vivify_205:
+  vivify_210:
     $P353 = $P352."ast"()
     find_lex $P354, "$past"
     find_lex $P355, "$ml"
-    unless_null $P355, vivify_206
+    unless_null $P355, vivify_211
     $P355 = root_new ['parrot';'Hash']
-  vivify_206:
+  vivify_211:
     set $P356, $P355["sym"]
-    unless_null $P356, vivify_207
+    unless_null $P356, vivify_212
     new $P356, "Undef"
-  vivify_207:
+  vivify_212:
     set $S357, $P356
     find_lex $P358, "$/"
     $P359 = $P350."new"($P353, $P354, $S357 :named("pasttype"), $P358 :named("node"))
@@ -21444,23 +21725,23 @@
 .annotate 'line', 105
     get_hll_global $P340, ["PAST"], "Op"
     find_lex $P341, "$ml"
-    unless_null $P341, vivify_208
+    unless_null $P341, vivify_213
     $P341 = root_new ['parrot';'Hash']
-  vivify_208:
+  vivify_213:
     set $P342, $P341["cond"]
-    unless_null $P342, vivify_209
+    unless_null $P342, vivify_214
     new $P342, "Undef"
-  vivify_209:
+  vivify_214:
     $P343 = $P342."ast"()
     find_lex $P344, "$past"
     find_lex $P345, "$ml"
-    unless_null $P345, vivify_210
+    unless_null $P345, vivify_215
     $P345 = root_new ['parrot';'Hash']
-  vivify_210:
+  vivify_215:
     set $P346, $P345["sym"]
-    unless_null $P346, vivify_211
+    unless_null $P346, vivify_216
     new $P346, "Undef"
-  vivify_211:
+  vivify_216:
     set $S347, $P346
     find_lex $P348, "$/"
     $P349 = $P340."new"($P343, $P344, $S347 :named("pasttype"), $P348 :named("node"))
@@ -21478,7 +21759,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "xblock"  :subid("27_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "xblock"  :subid("27_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_374
 .annotate 'line', 117
     new $P373, 'ExceptionHandler'
@@ -21491,22 +21772,22 @@
     find_lex $P375, "$/"
     get_hll_global $P376, ["PAST"], "Op"
     find_lex $P377, "$/"
-    unless_null $P377, vivify_212
+    unless_null $P377, vivify_217
     $P377 = root_new ['parrot';'Hash']
-  vivify_212:
+  vivify_217:
     set $P378, $P377["EXPR"]
-    unless_null $P378, vivify_213
+    unless_null $P378, vivify_218
     new $P378, "Undef"
-  vivify_213:
+  vivify_218:
     $P379 = $P378."ast"()
     find_lex $P380, "$/"
-    unless_null $P380, vivify_214
+    unless_null $P380, vivify_219
     $P380 = root_new ['parrot';'Hash']
-  vivify_214:
+  vivify_219:
     set $P381, $P380["pblock"]
-    unless_null $P381, vivify_215
+    unless_null $P381, vivify_220
     new $P381, "Undef"
-  vivify_215:
+  vivify_220:
     $P382 = $P381."ast"()
     find_lex $P383, "$/"
     $P384 = $P376."new"($P379, $P382, "if" :named("pasttype"), $P383 :named("node"))
@@ -21523,7 +21804,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "pblock"  :subid("28_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "pblock"  :subid("28_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_390
 .annotate 'line', 121
     new $P389, 'ExceptionHandler'
@@ -21535,13 +21816,13 @@
 .annotate 'line', 122
     find_lex $P391, "$/"
     find_lex $P392, "$/"
-    unless_null $P392, vivify_216
+    unless_null $P392, vivify_221
     $P392 = root_new ['parrot';'Hash']
-  vivify_216:
+  vivify_221:
     set $P393, $P392["blockoid"]
-    unless_null $P393, vivify_217
+    unless_null $P393, vivify_222
     new $P393, "Undef"
-  vivify_217:
+  vivify_222:
     $P394 = $P393."ast"()
     $P395 = $P391."!make"($P394)
 .annotate 'line', 121
@@ -21556,7 +21837,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "block"  :subid("29_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "block"  :subid("29_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_400
 .annotate 'line', 125
     new $P399, 'ExceptionHandler'
@@ -21568,13 +21849,13 @@
 .annotate 'line', 126
     find_lex $P401, "$/"
     find_lex $P402, "$/"
-    unless_null $P402, vivify_218
+    unless_null $P402, vivify_223
     $P402 = root_new ['parrot';'Hash']
-  vivify_218:
+  vivify_223:
     set $P403, $P402["blockoid"]
-    unless_null $P403, vivify_219
+    unless_null $P403, vivify_224
     new $P403, "Undef"
-  vivify_219:
+  vivify_224:
     $P404 = $P403."ast"()
     $P405 = $P401."!make"($P404)
 .annotate 'line', 125
@@ -21589,7 +21870,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "blockoid"  :subid("30_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "blockoid"  :subid("30_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_410
 .annotate 'line', 129
     new $P409, 'ExceptionHandler'
@@ -21606,13 +21887,13 @@
     .lex "$BLOCK", $P412
 .annotate 'line', 130
     find_lex $P413, "$/"
-    unless_null $P413, vivify_220
+    unless_null $P413, vivify_225
     $P413 = root_new ['parrot';'Hash']
-  vivify_220:
+  vivify_225:
     set $P414, $P413["statementlist"]
-    unless_null $P414, vivify_221
+    unless_null $P414, vivify_226
     new $P414, "Undef"
-  vivify_221:
+  vivify_226:
     $P415 = $P414."ast"()
     store_lex "$past", $P415
 .annotate 'line', 131
@@ -21646,7 +21927,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "newpad"  :subid("31_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "newpad"  :subid("31_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_430
 .annotate 'line', 138
     new $P429, 'ExceptionHandler'
@@ -21657,10 +21938,10 @@
     .lex "$/", param_430
 .annotate 'line', 139
     get_global $P431, "@BLOCK"
-    unless_null $P431, vivify_222
+    unless_null $P431, vivify_227
     $P431 = root_new ['parrot';'ResizablePMCArray']
     set_global "@BLOCK", $P431
-  vivify_222:
+  vivify_227:
 .annotate 'line', 138
     get_global $P432, "@BLOCK"
 .annotate 'line', 140
@@ -21682,7 +21963,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "outerctx"  :subid("32_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "outerctx"  :subid("32_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_443
 .annotate 'line', 143
     new $P442, 'ExceptionHandler'
@@ -21693,22 +21974,22 @@
     .lex "$/", param_443
 .annotate 'line', 144
     get_global $P444, "@BLOCK"
-    unless_null $P444, vivify_223
+    unless_null $P444, vivify_228
     $P444 = root_new ['parrot';'ResizablePMCArray']
     set_global "@BLOCK", $P444
-  vivify_223:
+  vivify_228:
 .annotate 'line', 143
     get_global $P445, "@BLOCK"
 .annotate 'line', 145
     find_lex $P446, "self"
     get_global $P447, "@BLOCK"
-    unless_null $P447, vivify_224
+    unless_null $P447, vivify_229
     $P447 = root_new ['parrot';'ResizablePMCArray']
-  vivify_224:
+  vivify_229:
     set $P448, $P447[0]
-    unless_null $P448, vivify_225
+    unless_null $P448, vivify_230
     new $P448, "Undef"
-  vivify_225:
+  vivify_230:
     $P449 = $P446."SET_BLOCK_OUTER_CTX"($P448)
 .annotate 'line', 143
     .return ($P449)
@@ -21722,10 +22003,10 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_control:sym<if>"  :subid("33_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "statement_control:sym<if>"  :subid("33_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_454
 .annotate 'line', 150
-    .const 'Sub' $P482 = "34_1282324007.53935" 
+    .const 'Sub' $P482 = "34_1284728484.24945" 
     capture_lex $P482
     new $P453, 'ExceptionHandler'
     set_addr $P453, control_452
@@ -21741,13 +22022,13 @@
     .lex "$past", $P456
 .annotate 'line', 151
     find_lex $P457, "$/"
-    unless_null $P457, vivify_226
+    unless_null $P457, vivify_231
     $P457 = root_new ['parrot';'Hash']
-  vivify_226:
+  vivify_231:
     set $P458, $P457["xblock"]
-    unless_null $P458, vivify_227
+    unless_null $P458, vivify_232
     new $P458, "Undef"
-  vivify_227:
+  vivify_232:
     set $N459, $P458
     new $P460, 'Float'
     set $P460, $N459
@@ -21757,44 +22038,44 @@
     find_lex $P462, "$count"
     set $I463, $P462
     find_lex $P464, "$/"
-    unless_null $P464, vivify_228
+    unless_null $P464, vivify_233
     $P464 = root_new ['parrot';'Hash']
-  vivify_228:
+  vivify_233:
     set $P465, $P464["xblock"]
-    unless_null $P465, vivify_229
+    unless_null $P465, vivify_234
     $P465 = root_new ['parrot';'ResizablePMCArray']
-  vivify_229:
+  vivify_234:
     set $P466, $P465[$I463]
-    unless_null $P466, vivify_230
+    unless_null $P466, vivify_235
     new $P466, "Undef"
-  vivify_230:
+  vivify_235:
     $P467 = $P466."ast"()
     $P468 = "xblock_immediate"($P467)
     store_lex "$past", $P468
 .annotate 'line', 153
     find_lex $P470, "$/"
-    unless_null $P470, vivify_231
+    unless_null $P470, vivify_236
     $P470 = root_new ['parrot';'Hash']
-  vivify_231:
+  vivify_236:
     set $P471, $P470["else"]
-    unless_null $P471, vivify_232
+    unless_null $P471, vivify_237
     new $P471, "Undef"
-  vivify_232:
+  vivify_237:
     unless $P471, if_469_end
 .annotate 'line', 154
     find_lex $P472, "$past"
     find_lex $P473, "$/"
-    unless_null $P473, vivify_233
+    unless_null $P473, vivify_238
     $P473 = root_new ['parrot';'Hash']
-  vivify_233:
+  vivify_238:
     set $P474, $P473["else"]
-    unless_null $P474, vivify_234
+    unless_null $P474, vivify_239
     $P474 = root_new ['parrot';'ResizablePMCArray']
-  vivify_234:
+  vivify_239:
     set $P475, $P474[0]
-    unless_null $P475, vivify_235
+    unless_null $P475, vivify_240
     new $P475, "Undef"
-  vivify_235:
+  vivify_240:
     $P476 = $P475."ast"()
     $P477 = "block_immediate"($P476)
     $P472."push"($P477)
@@ -21810,7 +22091,7 @@
     isgt $I480, $N479, 0.0
     unless $I480, loop497_done
   loop497_redo:
-    .const 'Sub' $P482 = "34_1282324007.53935" 
+    .const 'Sub' $P482 = "34_1284728484.24945" 
     capture_lex $P482
     $P482()
   loop497_next:
@@ -21838,7 +22119,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block481"  :anon :subid("34_1282324007.53935") :outer("33_1282324007.53935")
+.sub "_block481"  :anon :subid("34_1284728484.24945") :outer("33_1284728484.24945")
 .annotate 'line', 159
     new $P483, "Undef"
     .lex "$else", $P483
@@ -21853,17 +22134,17 @@
     find_lex $P487, "$count"
     set $I488, $P487
     find_lex $P489, "$/"
-    unless_null $P489, vivify_236
+    unless_null $P489, vivify_241
     $P489 = root_new ['parrot';'Hash']
-  vivify_236:
+  vivify_241:
     set $P490, $P489["xblock"]
-    unless_null $P490, vivify_237
+    unless_null $P490, vivify_242
     $P490 = root_new ['parrot';'ResizablePMCArray']
-  vivify_237:
+  vivify_242:
     set $P491, $P490[$I488]
-    unless_null $P491, vivify_238
+    unless_null $P491, vivify_243
     new $P491, "Undef"
-  vivify_238:
+  vivify_243:
     $P492 = $P491."ast"()
     $P493 = "xblock_immediate"($P492)
     store_lex "$past", $P493
@@ -21878,7 +22159,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_control:sym<unless>"  :subid("35_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "statement_control:sym<unless>"  :subid("35_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_507
 .annotate 'line', 166
     new $P506, 'ExceptionHandler'
@@ -21891,13 +22172,13 @@
     new $P508, "Undef"
     .lex "$past", $P508
     find_lex $P509, "$/"
-    unless_null $P509, vivify_239
+    unless_null $P509, vivify_244
     $P509 = root_new ['parrot';'Hash']
-  vivify_239:
+  vivify_244:
     set $P510, $P509["xblock"]
-    unless_null $P510, vivify_240
+    unless_null $P510, vivify_245
     new $P510, "Undef"
-  vivify_240:
+  vivify_245:
     $P511 = $P510."ast"()
     $P512 = "xblock_immediate"($P511)
     store_lex "$past", $P512
@@ -21920,7 +22201,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_control:sym<while>"  :subid("36_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "statement_control:sym<while>"  :subid("36_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_521
 .annotate 'line', 172
     new $P520, 'ExceptionHandler'
@@ -21933,26 +22214,26 @@
     new $P522, "Undef"
     .lex "$past", $P522
     find_lex $P523, "$/"
-    unless_null $P523, vivify_241
+    unless_null $P523, vivify_246
     $P523 = root_new ['parrot';'Hash']
-  vivify_241:
+  vivify_246:
     set $P524, $P523["xblock"]
-    unless_null $P524, vivify_242
+    unless_null $P524, vivify_247
     new $P524, "Undef"
-  vivify_242:
+  vivify_247:
     $P525 = $P524."ast"()
     $P526 = "xblock_immediate"($P525)
     store_lex "$past", $P526
 .annotate 'line', 174
     find_lex $P527, "$past"
     find_lex $P528, "$/"
-    unless_null $P528, vivify_243
+    unless_null $P528, vivify_248
     $P528 = root_new ['parrot';'Hash']
-  vivify_243:
+  vivify_248:
     set $P529, $P528["sym"]
-    unless_null $P529, vivify_244
+    unless_null $P529, vivify_249
     new $P529, "Undef"
-  vivify_244:
+  vivify_249:
     set $S530, $P529
     $P527."pasttype"($S530)
 .annotate 'line', 175
@@ -21971,7 +22252,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_control:sym<repeat>"  :subid("37_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "statement_control:sym<repeat>"  :subid("37_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_538
 .annotate 'line', 178
     new $P537, 'ExceptionHandler'
@@ -21990,46 +22271,46 @@
     new $P541, "String"
     assign $P541, "repeat_"
     find_lex $P542, "$/"
-    unless_null $P542, vivify_245
+    unless_null $P542, vivify_250
     $P542 = root_new ['parrot';'Hash']
-  vivify_245:
+  vivify_250:
     set $P543, $P542["wu"]
-    unless_null $P543, vivify_246
+    unless_null $P543, vivify_251
     new $P543, "Undef"
-  vivify_246:
+  vivify_251:
     set $S544, $P543
     concat $P545, $P541, $S544
     store_lex "$pasttype", $P545
     find_lex $P546, "$past"
 .annotate 'line', 181
     find_lex $P548, "$/"
-    unless_null $P548, vivify_247
+    unless_null $P548, vivify_252
     $P548 = root_new ['parrot';'Hash']
-  vivify_247:
+  vivify_252:
     set $P549, $P548["xblock"]
-    unless_null $P549, vivify_248
+    unless_null $P549, vivify_253
     new $P549, "Undef"
-  vivify_248:
+  vivify_253:
     if $P549, if_547
 .annotate 'line', 186
     get_hll_global $P556, ["PAST"], "Op"
     find_lex $P557, "$/"
-    unless_null $P557, vivify_249
+    unless_null $P557, vivify_254
     $P557 = root_new ['parrot';'Hash']
-  vivify_249:
+  vivify_254:
     set $P558, $P557["EXPR"]
-    unless_null $P558, vivify_250
+    unless_null $P558, vivify_255
     new $P558, "Undef"
-  vivify_250:
+  vivify_255:
     $P559 = $P558."ast"()
     find_lex $P560, "$/"
-    unless_null $P560, vivify_251
+    unless_null $P560, vivify_256
     $P560 = root_new ['parrot';'Hash']
-  vivify_251:
+  vivify_256:
     set $P561, $P560["pblock"]
-    unless_null $P561, vivify_252
+    unless_null $P561, vivify_257
     new $P561, "Undef"
-  vivify_252:
+  vivify_257:
     $P562 = $P561."ast"()
     $P563 = "block_immediate"($P562)
     find_lex $P564, "$pasttype"
@@ -22041,13 +22322,13 @@
   if_547:
 .annotate 'line', 182
     find_lex $P550, "$/"
-    unless_null $P550, vivify_253
+    unless_null $P550, vivify_258
     $P550 = root_new ['parrot';'Hash']
-  vivify_253:
+  vivify_258:
     set $P551, $P550["xblock"]
-    unless_null $P551, vivify_254
+    unless_null $P551, vivify_259
     new $P551, "Undef"
-  vivify_254:
+  vivify_259:
     $P552 = $P551."ast"()
     $P553 = "xblock_immediate"($P552)
     store_lex "$past", $P553
@@ -22072,7 +22353,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_control:sym<for>"  :subid("38_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "statement_control:sym<for>"  :subid("38_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_574
 .annotate 'line', 192
     new $P573, 'ExceptionHandler'
@@ -22089,13 +22370,13 @@
     .lex "$block", $P576
 .annotate 'line', 193
     find_lex $P577, "$/"
-    unless_null $P577, vivify_255
+    unless_null $P577, vivify_260
     $P577 = root_new ['parrot';'Hash']
-  vivify_255:
+  vivify_260:
     set $P578, $P577["xblock"]
-    unless_null $P578, vivify_256
+    unless_null $P578, vivify_261
     new $P578, "Undef"
-  vivify_256:
+  vivify_261:
     $P579 = $P578."ast"()
     store_lex "$past", $P579
 .annotate 'line', 194
@@ -22103,13 +22384,13 @@
     $P580."pasttype"("for")
 .annotate 'line', 195
     find_lex $P581, "$past"
-    unless_null $P581, vivify_257
+    unless_null $P581, vivify_262
     $P581 = root_new ['parrot';'ResizablePMCArray']
-  vivify_257:
+  vivify_262:
     set $P582, $P581[1]
-    unless_null $P582, vivify_258
+    unless_null $P582, vivify_263
     new $P582, "Undef"
-  vivify_258:
+  vivify_263:
     store_lex "$block", $P582
 .annotate 'line', 196
     find_lex $P584, "$block"
@@ -22117,13 +22398,13 @@
     if $P585, unless_583_end
 .annotate 'line', 197
     find_lex $P586, "$block"
-    unless_null $P586, vivify_259
+    unless_null $P586, vivify_264
     $P586 = root_new ['parrot';'ResizablePMCArray']
-  vivify_259:
+  vivify_264:
     set $P587, $P586[0]
-    unless_null $P587, vivify_260
+    unless_null $P587, vivify_265
     new $P587, "Undef"
-  vivify_260:
+  vivify_265:
     get_hll_global $P588, ["PAST"], "Var"
     $P589 = $P588."new"("$_" :named("name"), "parameter" :named("scope"))
     $P587."push"($P589)
@@ -22153,7 +22434,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_control:sym<return>"  :subid("39_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "statement_control:sym<return>"  :subid("39_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_600
 .annotate 'line', 205
     new $P599, 'ExceptionHandler'
@@ -22166,13 +22447,13 @@
     find_lex $P601, "$/"
     get_hll_global $P602, ["PAST"], "Op"
     find_lex $P603, "$/"
-    unless_null $P603, vivify_261
+    unless_null $P603, vivify_266
     $P603 = root_new ['parrot';'Hash']
-  vivify_261:
+  vivify_266:
     set $P604, $P603["EXPR"]
-    unless_null $P604, vivify_262
+    unless_null $P604, vivify_267
     new $P604, "Undef"
-  vivify_262:
+  vivify_267:
     $P605 = $P604."ast"()
     find_lex $P606, "$/"
     $P607 = $P602."new"($P605, "return" :named("pasttype"), $P606 :named("node"))
@@ -22189,7 +22470,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_control:sym<CATCH>"  :subid("40_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "statement_control:sym<CATCH>"  :subid("40_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_613
 .annotate 'line', 209
     new $P612, 'ExceptionHandler'
@@ -22202,13 +22483,13 @@
     new $P614, "Undef"
     .lex "$block", $P614
     find_lex $P615, "$/"
-    unless_null $P615, vivify_263
+    unless_null $P615, vivify_268
     $P615 = root_new ['parrot';'Hash']
-  vivify_263:
+  vivify_268:
     set $P616, $P615["block"]
-    unless_null $P616, vivify_264
+    unless_null $P616, vivify_269
     new $P616, "Undef"
-  vivify_264:
+  vivify_269:
     $P617 = $P616."ast"()
     store_lex "$block", $P617
 .annotate 'line', 211
@@ -22217,18 +22498,18 @@
     "push_block_handler"($P618, $P619)
 .annotate 'line', 212
     get_global $P620, "@BLOCK"
-    unless_null $P620, vivify_265
+    unless_null $P620, vivify_270
     $P620 = root_new ['parrot';'ResizablePMCArray']
-  vivify_265:
+  vivify_270:
     set $P621, $P620[0]
-    unless_null $P621, vivify_266
+    unless_null $P621, vivify_271
     new $P621, "Undef"
-  vivify_266:
+  vivify_271:
     $P622 = $P621."handlers"()
     set $P623, $P622[0]
-    unless_null $P623, vivify_267
+    unless_null $P623, vivify_272
     new $P623, "Undef"
-  vivify_267:
+  vivify_272:
     $P623."handle_types_except"("CONTROL")
 .annotate 'line', 213
     find_lex $P624, "$/"
@@ -22248,7 +22529,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_control:sym<CONTROL>"  :subid("41_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "statement_control:sym<CONTROL>"  :subid("41_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_633
 .annotate 'line', 216
     new $P632, 'ExceptionHandler'
@@ -22261,13 +22542,13 @@
     new $P634, "Undef"
     .lex "$block", $P634
     find_lex $P635, "$/"
-    unless_null $P635, vivify_268
+    unless_null $P635, vivify_273
     $P635 = root_new ['parrot';'Hash']
-  vivify_268:
+  vivify_273:
     set $P636, $P635["block"]
-    unless_null $P636, vivify_269
+    unless_null $P636, vivify_274
     new $P636, "Undef"
-  vivify_269:
+  vivify_274:
     $P637 = $P636."ast"()
     store_lex "$block", $P637
 .annotate 'line', 218
@@ -22276,18 +22557,18 @@
     "push_block_handler"($P638, $P639)
 .annotate 'line', 219
     get_global $P640, "@BLOCK"
-    unless_null $P640, vivify_270
+    unless_null $P640, vivify_275
     $P640 = root_new ['parrot';'ResizablePMCArray']
-  vivify_270:
+  vivify_275:
     set $P641, $P640[0]
-    unless_null $P641, vivify_271
+    unless_null $P641, vivify_276
     new $P641, "Undef"
-  vivify_271:
+  vivify_276:
     $P642 = $P641."handlers"()
     set $P643, $P642[0]
-    unless_null $P643, vivify_272
+    unless_null $P643, vivify_277
     new $P643, "Undef"
-  vivify_272:
+  vivify_277:
     $P643."handle_types"("CONTROL")
 .annotate 'line', 220
     find_lex $P644, "$/"
@@ -22307,7 +22588,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_prefix:sym<INIT>"  :subid("42_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "statement_prefix:sym<INIT>"  :subid("42_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_654
 .annotate 'line', 260
     new $P653, 'ExceptionHandler'
@@ -22318,22 +22599,22 @@
     .lex "$/", param_654
 .annotate 'line', 261
     get_global $P655, "@BLOCK"
-    unless_null $P655, vivify_273
+    unless_null $P655, vivify_278
     $P655 = root_new ['parrot';'ResizablePMCArray']
-  vivify_273:
+  vivify_278:
     set $P656, $P655[0]
-    unless_null $P656, vivify_274
+    unless_null $P656, vivify_279
     new $P656, "Undef"
-  vivify_274:
+  vivify_279:
     $P657 = $P656."loadinit"()
     find_lex $P658, "$/"
-    unless_null $P658, vivify_275
+    unless_null $P658, vivify_280
     $P658 = root_new ['parrot';'Hash']
-  vivify_275:
+  vivify_280:
     set $P659, $P658["blorst"]
-    unless_null $P659, vivify_276
+    unless_null $P659, vivify_281
     new $P659, "Undef"
-  vivify_276:
+  vivify_281:
     $P660 = $P659."ast"()
     $P657."push"($P660)
 .annotate 'line', 262
@@ -22354,7 +22635,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_prefix:sym<try>"  :subid("43_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "statement_prefix:sym<try>"  :subid("43_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_670
 .annotate 'line', 265
     new $P669, 'ExceptionHandler'
@@ -22367,13 +22648,13 @@
     new $P671, "Undef"
     .lex "$past", $P671
     find_lex $P672, "$/"
-    unless_null $P672, vivify_277
+    unless_null $P672, vivify_282
     $P672 = root_new ['parrot';'Hash']
-  vivify_277:
+  vivify_282:
     set $P673, $P672["blorst"]
-    unless_null $P673, vivify_278
+    unless_null $P673, vivify_283
     new $P673, "Undef"
-  vivify_278:
+  vivify_283:
     $P674 = $P673."ast"()
     store_lex "$past", $P674
 .annotate 'line', 267
@@ -22432,7 +22713,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "blorst"  :subid("44_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "blorst"  :subid("44_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_705
 .annotate 'line', 288
     new $P704, 'ExceptionHandler'
@@ -22445,36 +22726,36 @@
     find_lex $P706, "$/"
 .annotate 'line', 290
     find_lex $P709, "$/"
-    unless_null $P709, vivify_279
+    unless_null $P709, vivify_284
     $P709 = root_new ['parrot';'Hash']
-  vivify_279:
+  vivify_284:
     set $P710, $P709["block"]
-    unless_null $P710, vivify_280
+    unless_null $P710, vivify_285
     new $P710, "Undef"
-  vivify_280:
+  vivify_285:
     if $P710, if_708
 .annotate 'line', 291
     find_lex $P715, "$/"
-    unless_null $P715, vivify_281
+    unless_null $P715, vivify_286
     $P715 = root_new ['parrot';'Hash']
-  vivify_281:
+  vivify_286:
     set $P716, $P715["statement"]
-    unless_null $P716, vivify_282
+    unless_null $P716, vivify_287
     new $P716, "Undef"
-  vivify_282:
+  vivify_287:
     $P717 = $P716."ast"()
     set $P707, $P717
 .annotate 'line', 290
     goto if_708_end
   if_708:
     find_lex $P711, "$/"
-    unless_null $P711, vivify_283
+    unless_null $P711, vivify_288
     $P711 = root_new ['parrot';'Hash']
-  vivify_283:
+  vivify_288:
     set $P712, $P711["block"]
-    unless_null $P712, vivify_284
+    unless_null $P712, vivify_289
     new $P712, "Undef"
-  vivify_284:
+  vivify_289:
     $P713 = $P712."ast"()
     $P714 = "block_immediate"($P713)
     set $P707, $P714
@@ -22492,7 +22773,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_mod_cond:sym<if>"  :subid("45_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "statement_mod_cond:sym<if>"  :subid("45_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_723
 .annotate 'line', 296
     new $P722, 'ExceptionHandler'
@@ -22503,13 +22784,13 @@
     .lex "$/", param_723
     find_lex $P724, "$/"
     find_lex $P725, "$/"
-    unless_null $P725, vivify_285
+    unless_null $P725, vivify_290
     $P725 = root_new ['parrot';'Hash']
-  vivify_285:
+  vivify_290:
     set $P726, $P725["cond"]
-    unless_null $P726, vivify_286
+    unless_null $P726, vivify_291
     new $P726, "Undef"
-  vivify_286:
+  vivify_291:
     $P727 = $P726."ast"()
     $P728 = $P724."!make"($P727)
     .return ($P728)
@@ -22523,7 +22804,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_mod_cond:sym<unless>"  :subid("46_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "statement_mod_cond:sym<unless>"  :subid("46_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_733
 .annotate 'line', 297
     new $P732, 'ExceptionHandler'
@@ -22534,13 +22815,13 @@
     .lex "$/", param_733
     find_lex $P734, "$/"
     find_lex $P735, "$/"
-    unless_null $P735, vivify_287
+    unless_null $P735, vivify_292
     $P735 = root_new ['parrot';'Hash']
-  vivify_287:
+  vivify_292:
     set $P736, $P735["cond"]
-    unless_null $P736, vivify_288
+    unless_null $P736, vivify_293
     new $P736, "Undef"
-  vivify_288:
+  vivify_293:
     $P737 = $P736."ast"()
     $P738 = $P734."!make"($P737)
     .return ($P738)
@@ -22554,7 +22835,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_mod_loop:sym<while>"  :subid("47_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "statement_mod_loop:sym<while>"  :subid("47_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_743
 .annotate 'line', 299
     new $P742, 'ExceptionHandler'
@@ -22565,13 +22846,13 @@
     .lex "$/", param_743
     find_lex $P744, "$/"
     find_lex $P745, "$/"
-    unless_null $P745, vivify_289
+    unless_null $P745, vivify_294
     $P745 = root_new ['parrot';'Hash']
-  vivify_289:
+  vivify_294:
     set $P746, $P745["cond"]
-    unless_null $P746, vivify_290
+    unless_null $P746, vivify_295
     new $P746, "Undef"
-  vivify_290:
+  vivify_295:
     $P747 = $P746."ast"()
     $P748 = $P744."!make"($P747)
     .return ($P748)
@@ -22585,7 +22866,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "statement_mod_loop:sym<until>"  :subid("48_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "statement_mod_loop:sym<until>"  :subid("48_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_753
 .annotate 'line', 300
     new $P752, 'ExceptionHandler'
@@ -22596,13 +22877,13 @@
     .lex "$/", param_753
     find_lex $P754, "$/"
     find_lex $P755, "$/"
-    unless_null $P755, vivify_291
+    unless_null $P755, vivify_296
     $P755 = root_new ['parrot';'Hash']
-  vivify_291:
+  vivify_296:
     set $P756, $P755["cond"]
-    unless_null $P756, vivify_292
+    unless_null $P756, vivify_297
     new $P756, "Undef"
-  vivify_292:
+  vivify_297:
     $P757 = $P756."ast"()
     $P758 = $P754."!make"($P757)
     .return ($P758)
@@ -22616,7 +22897,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<fatarrow>"  :subid("49_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "term:sym<fatarrow>"  :subid("49_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_763
 .annotate 'line', 304
     new $P762, 'ExceptionHandler'
@@ -22627,13 +22908,13 @@
     .lex "$/", param_763
     find_lex $P764, "$/"
     find_lex $P765, "$/"
-    unless_null $P765, vivify_293
+    unless_null $P765, vivify_298
     $P765 = root_new ['parrot';'Hash']
-  vivify_293:
+  vivify_298:
     set $P766, $P765["fatarrow"]
-    unless_null $P766, vivify_294
+    unless_null $P766, vivify_299
     new $P766, "Undef"
-  vivify_294:
+  vivify_299:
     $P767 = $P766."ast"()
     $P768 = $P764."!make"($P767)
     .return ($P768)
@@ -22647,7 +22928,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<colonpair>"  :subid("50_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "term:sym<colonpair>"  :subid("50_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_773
 .annotate 'line', 305
     new $P772, 'ExceptionHandler'
@@ -22658,13 +22939,13 @@
     .lex "$/", param_773
     find_lex $P774, "$/"
     find_lex $P775, "$/"
-    unless_null $P775, vivify_295
+    unless_null $P775, vivify_300
     $P775 = root_new ['parrot';'Hash']
-  vivify_295:
+  vivify_300:
     set $P776, $P775["colonpair"]
-    unless_null $P776, vivify_296
+    unless_null $P776, vivify_301
     new $P776, "Undef"
-  vivify_296:
+  vivify_301:
     $P777 = $P776."ast"()
     $P778 = $P774."!make"($P777)
     .return ($P778)
@@ -22678,7 +22959,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<variable>"  :subid("51_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "term:sym<variable>"  :subid("51_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_783
 .annotate 'line', 306
     new $P782, 'ExceptionHandler'
@@ -22689,13 +22970,13 @@
     .lex "$/", param_783
     find_lex $P784, "$/"
     find_lex $P785, "$/"
-    unless_null $P785, vivify_297
+    unless_null $P785, vivify_302
     $P785 = root_new ['parrot';'Hash']
-  vivify_297:
+  vivify_302:
     set $P786, $P785["variable"]
-    unless_null $P786, vivify_298
+    unless_null $P786, vivify_303
     new $P786, "Undef"
-  vivify_298:
+  vivify_303:
     $P787 = $P786."ast"()
     $P788 = $P784."!make"($P787)
     .return ($P788)
@@ -22709,7 +22990,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<package_declarator>"  :subid("52_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "term:sym<package_declarator>"  :subid("52_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_793
 .annotate 'line', 307
     new $P792, 'ExceptionHandler'
@@ -22720,13 +23001,13 @@
     .lex "$/", param_793
     find_lex $P794, "$/"
     find_lex $P795, "$/"
-    unless_null $P795, vivify_299
+    unless_null $P795, vivify_304
     $P795 = root_new ['parrot';'Hash']
-  vivify_299:
+  vivify_304:
     set $P796, $P795["package_declarator"]
-    unless_null $P796, vivify_300
+    unless_null $P796, vivify_305
     new $P796, "Undef"
-  vivify_300:
+  vivify_305:
     $P797 = $P796."ast"()
     $P798 = $P794."!make"($P797)
     .return ($P798)
@@ -22740,7 +23021,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<scope_declarator>"  :subid("53_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "term:sym<scope_declarator>"  :subid("53_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_803
 .annotate 'line', 308
     new $P802, 'ExceptionHandler'
@@ -22751,13 +23032,13 @@
     .lex "$/", param_803
     find_lex $P804, "$/"
     find_lex $P805, "$/"
-    unless_null $P805, vivify_301
+    unless_null $P805, vivify_306
     $P805 = root_new ['parrot';'Hash']
-  vivify_301:
+  vivify_306:
     set $P806, $P805["scope_declarator"]
-    unless_null $P806, vivify_302
+    unless_null $P806, vivify_307
     new $P806, "Undef"
-  vivify_302:
+  vivify_307:
     $P807 = $P806."ast"()
     $P808 = $P804."!make"($P807)
     .return ($P808)
@@ -22771,7 +23052,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<routine_declarator>"  :subid("54_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "term:sym<routine_declarator>"  :subid("54_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_813
 .annotate 'line', 309
     new $P812, 'ExceptionHandler'
@@ -22782,13 +23063,13 @@
     .lex "$/", param_813
     find_lex $P814, "$/"
     find_lex $P815, "$/"
-    unless_null $P815, vivify_303
+    unless_null $P815, vivify_308
     $P815 = root_new ['parrot';'Hash']
-  vivify_303:
+  vivify_308:
     set $P816, $P815["routine_declarator"]
-    unless_null $P816, vivify_304
+    unless_null $P816, vivify_309
     new $P816, "Undef"
-  vivify_304:
+  vivify_309:
     $P817 = $P816."ast"()
     $P818 = $P814."!make"($P817)
     .return ($P818)
@@ -22802,7 +23083,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<regex_declarator>"  :subid("55_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "term:sym<regex_declarator>"  :subid("55_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_823
 .annotate 'line', 310
     new $P822, 'ExceptionHandler'
@@ -22813,13 +23094,13 @@
     .lex "$/", param_823
     find_lex $P824, "$/"
     find_lex $P825, "$/"
-    unless_null $P825, vivify_305
+    unless_null $P825, vivify_310
     $P825 = root_new ['parrot';'Hash']
-  vivify_305:
+  vivify_310:
     set $P826, $P825["regex_declarator"]
-    unless_null $P826, vivify_306
+    unless_null $P826, vivify_311
     new $P826, "Undef"
-  vivify_306:
+  vivify_311:
     $P827 = $P826."ast"()
     $P828 = $P824."!make"($P827)
     .return ($P828)
@@ -22833,7 +23114,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<statement_prefix>"  :subid("56_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "term:sym<statement_prefix>"  :subid("56_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_833
 .annotate 'line', 311
     new $P832, 'ExceptionHandler'
@@ -22844,13 +23125,13 @@
     .lex "$/", param_833
     find_lex $P834, "$/"
     find_lex $P835, "$/"
-    unless_null $P835, vivify_307
+    unless_null $P835, vivify_312
     $P835 = root_new ['parrot';'Hash']
-  vivify_307:
+  vivify_312:
     set $P836, $P835["statement_prefix"]
-    unless_null $P836, vivify_308
+    unless_null $P836, vivify_313
     new $P836, "Undef"
-  vivify_308:
+  vivify_313:
     $P837 = $P836."ast"()
     $P838 = $P834."!make"($P837)
     .return ($P838)
@@ -22864,7 +23145,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<lambda>"  :subid("57_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "term:sym<lambda>"  :subid("57_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_843
 .annotate 'line', 312
     new $P842, 'ExceptionHandler'
@@ -22875,13 +23156,13 @@
     .lex "$/", param_843
     find_lex $P844, "$/"
     find_lex $P845, "$/"
-    unless_null $P845, vivify_309
+    unless_null $P845, vivify_314
     $P845 = root_new ['parrot';'Hash']
-  vivify_309:
+  vivify_314:
     set $P846, $P845["pblock"]
-    unless_null $P846, vivify_310
+    unless_null $P846, vivify_315
     new $P846, "Undef"
-  vivify_310:
+  vivify_315:
     $P847 = $P846."ast"()
     $P848 = $P844."!make"($P847)
     .return ($P848)
@@ -22895,7 +23176,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "fatarrow"  :subid("58_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "fatarrow"  :subid("58_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_853
 .annotate 'line', 314
     new $P852, 'ExceptionHandler'
@@ -22908,25 +23189,25 @@
     new $P854, "Undef"
     .lex "$past", $P854
     find_lex $P855, "$/"
-    unless_null $P855, vivify_311
+    unless_null $P855, vivify_316
     $P855 = root_new ['parrot';'Hash']
-  vivify_311:
+  vivify_316:
     set $P856, $P855["val"]
-    unless_null $P856, vivify_312
+    unless_null $P856, vivify_317
     new $P856, "Undef"
-  vivify_312:
+  vivify_317:
     $P857 = $P856."ast"()
     store_lex "$past", $P857
 .annotate 'line', 316
     find_lex $P858, "$past"
     find_lex $P859, "$/"
-    unless_null $P859, vivify_313
+    unless_null $P859, vivify_318
     $P859 = root_new ['parrot';'Hash']
-  vivify_313:
+  vivify_318:
     set $P860, $P859["key"]
-    unless_null $P860, vivify_314
+    unless_null $P860, vivify_319
     new $P860, "Undef"
-  vivify_314:
+  vivify_319:
     $P861 = $P860."Str"()
     $P858."named"($P861)
 .annotate 'line', 317
@@ -22945,7 +23226,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "colonpair"  :subid("59_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "colonpair"  :subid("59_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_869
 .annotate 'line', 320
     new $P868, 'ExceptionHandler'
@@ -22959,24 +23240,24 @@
     .lex "$past", $P870
 .annotate 'line', 322
     find_lex $P873, "$/"
-    unless_null $P873, vivify_315
+    unless_null $P873, vivify_320
     $P873 = root_new ['parrot';'Hash']
-  vivify_315:
+  vivify_320:
     set $P874, $P873["circumfix"]
-    unless_null $P874, vivify_316
+    unless_null $P874, vivify_321
     new $P874, "Undef"
-  vivify_316:
+  vivify_321:
     if $P874, if_872
 .annotate 'line', 323
     get_hll_global $P879, ["PAST"], "Val"
     find_lex $P880, "$/"
-    unless_null $P880, vivify_317
+    unless_null $P880, vivify_322
     $P880 = root_new ['parrot';'Hash']
-  vivify_317:
+  vivify_322:
     set $P881, $P880["not"]
-    unless_null $P881, vivify_318
+    unless_null $P881, vivify_323
     new $P881, "Undef"
-  vivify_318:
+  vivify_323:
     isfalse $I882, $P881
     $P883 = $P879."new"($I882 :named("value"))
     set $P871, $P883
@@ -22984,17 +23265,17 @@
     goto if_872_end
   if_872:
     find_lex $P875, "$/"
-    unless_null $P875, vivify_319
+    unless_null $P875, vivify_324
     $P875 = root_new ['parrot';'Hash']
-  vivify_319:
+  vivify_324:
     set $P876, $P875["circumfix"]
-    unless_null $P876, vivify_320
+    unless_null $P876, vivify_325
     $P876 = root_new ['parrot';'ResizablePMCArray']
-  vivify_320:
+  vivify_325:
     set $P877, $P876[0]
-    unless_null $P877, vivify_321
+    unless_null $P877, vivify_326
     new $P877, "Undef"
-  vivify_321:
+  vivify_326:
     $P878 = $P877."ast"()
     set $P871, $P878
   if_872_end:
@@ -23002,13 +23283,13 @@
 .annotate 'line', 324
     find_lex $P884, "$past"
     find_lex $P885, "$/"
-    unless_null $P885, vivify_322
+    unless_null $P885, vivify_327
     $P885 = root_new ['parrot';'Hash']
-  vivify_322:
+  vivify_327:
     set $P886, $P885["identifier"]
-    unless_null $P886, vivify_323
+    unless_null $P886, vivify_328
     new $P886, "Undef"
-  vivify_323:
+  vivify_328:
     set $S887, $P886
     $P884."named"($S887)
 .annotate 'line', 325
@@ -23027,10 +23308,10 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "variable"  :subid("60_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "variable"  :subid("60_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_895
 .annotate 'line', 328
-    .const 'Sub' $P908 = "61_1282324007.53935" 
+    .const 'Sub' $P908 = "61_1284728484.24945" 
     capture_lex $P908
     new $P894, 'ExceptionHandler'
     set_addr $P894, control_893
@@ -23045,29 +23326,29 @@
     find_lex $P897, "$past"
 .annotate 'line', 330
     find_lex $P899, "$/"
-    unless_null $P899, vivify_324
+    unless_null $P899, vivify_329
     $P899 = root_new ['parrot';'Hash']
-  vivify_324:
+  vivify_329:
     set $P900, $P899["postcircumfix"]
-    unless_null $P900, vivify_325
+    unless_null $P900, vivify_330
     new $P900, "Undef"
-  vivify_325:
+  vivify_330:
     if $P900, if_898
 .annotate 'line', 334
-    .const 'Sub' $P908 = "61_1282324007.53935" 
+    .const 'Sub' $P908 = "61_1284728484.24945" 
     capture_lex $P908
     $P908()
     goto if_898_end
   if_898:
 .annotate 'line', 331
     find_lex $P901, "$/"
-    unless_null $P901, vivify_342
+    unless_null $P901, vivify_347
     $P901 = root_new ['parrot';'Hash']
-  vivify_342:
+  vivify_347:
     set $P902, $P901["postcircumfix"]
-    unless_null $P902, vivify_343
+    unless_null $P902, vivify_348
     new $P902, "Undef"
-  vivify_343:
+  vivify_348:
     $P903 = $P902."ast"()
     store_lex "$past", $P903
 .annotate 'line', 332
@@ -23091,7 +23372,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block907"  :anon :subid("61_1282324007.53935") :outer("60_1282324007.53935")
+.sub "_block907"  :anon :subid("61_1284728484.24945") :outer("60_1284728484.24945")
 .annotate 'line', 335
     $P909 = root_new ['parrot';'ResizablePMCArray']
     .lex "@name", $P909
@@ -23112,13 +23393,13 @@
     unless $P920, if_919_end
 .annotate 'line', 338
     find_lex $P922, "@name"
-    unless_null $P922, vivify_326
+    unless_null $P922, vivify_331
     $P922 = root_new ['parrot';'ResizablePMCArray']
-  vivify_326:
+  vivify_331:
     set $P923, $P922[0]
-    unless_null $P923, vivify_327
+    unless_null $P923, vivify_332
     new $P923, "Undef"
-  vivify_327:
+  vivify_332:
     set $S924, $P923
     iseq $I925, $S924, "GLOBAL"
     unless $I925, if_921_end
@@ -23135,13 +23416,13 @@
 .annotate 'line', 341
     find_lex $P930, "$past"
     find_lex $P931, "$/"
-    unless_null $P931, vivify_328
+    unless_null $P931, vivify_333
     $P931 = root_new ['parrot';'Hash']
-  vivify_328:
+  vivify_333:
     set $P932, $P931["sigil"]
-    unless_null $P932, vivify_329
+    unless_null $P932, vivify_334
     new $P932, "Undef"
-  vivify_329:
+  vivify_334:
     $P933 = "vivitype"($P932)
     $P930."viviself"($P933)
 .annotate 'line', 342
@@ -23150,33 +23431,33 @@
   if_919_end:
 .annotate 'line', 344
     find_lex $P937, "$/"
-    unless_null $P937, vivify_330
+    unless_null $P937, vivify_335
     $P937 = root_new ['parrot';'Hash']
-  vivify_330:
+  vivify_335:
     set $P938, $P937["twigil"]
-    unless_null $P938, vivify_331
+    unless_null $P938, vivify_336
     $P938 = root_new ['parrot';'ResizablePMCArray']
-  vivify_331:
+  vivify_336:
     set $P939, $P938[0]
-    unless_null $P939, vivify_332
+    unless_null $P939, vivify_337
     new $P939, "Undef"
-  vivify_332:
+  vivify_337:
     set $S940, $P939
     iseq $I941, $S940, "*"
     if $I941, if_936
 .annotate 'line', 357
     find_lex $P963, "$/"
-    unless_null $P963, vivify_333
+    unless_null $P963, vivify_338
     $P963 = root_new ['parrot';'Hash']
-  vivify_333:
+  vivify_338:
     set $P964, $P963["twigil"]
-    unless_null $P964, vivify_334
+    unless_null $P964, vivify_339
     $P964 = root_new ['parrot';'ResizablePMCArray']
-  vivify_334:
+  vivify_339:
     set $P965, $P964[0]
-    unless_null $P965, vivify_335
+    unless_null $P965, vivify_340
     new $P965, "Undef"
-  vivify_335:
+  vivify_340:
     set $S966, $P965
     iseq $I967, $S966, "!"
     if $I967, if_962
@@ -23195,13 +23476,13 @@
 .annotate 'line', 360
     find_lex $P972, "$past"
     find_lex $P973, "$/"
-    unless_null $P973, vivify_336
+    unless_null $P973, vivify_341
     $P973 = root_new ['parrot';'Hash']
-  vivify_336:
+  vivify_341:
     set $P974, $P973["sigil"]
-    unless_null $P974, vivify_337
+    unless_null $P974, vivify_342
     new $P974, "Undef"
-  vivify_337:
+  vivify_342:
     $P975 = "vivitype"($P974)
     $P976 = $P972."viviself"($P975)
 .annotate 'line', 357
@@ -23220,24 +23501,24 @@
     get_hll_global $P944, ["PAST"], "Var"
 .annotate 'line', 349
     find_lex $P945, "$/"
-    unless_null $P945, vivify_338
+    unless_null $P945, vivify_343
     $P945 = root_new ['parrot';'Hash']
-  vivify_338:
+  vivify_343:
     set $P946, $P945["sigil"]
-    unless_null $P946, vivify_339
+    unless_null $P946, vivify_344
     new $P946, "Undef"
-  vivify_339:
+  vivify_344:
     set $S947, $P946
     new $P948, 'String'
     set $P948, $S947
     find_lex $P949, "$/"
-    unless_null $P949, vivify_340
+    unless_null $P949, vivify_345
     $P949 = root_new ['parrot';'Hash']
-  vivify_340:
+  vivify_345:
     set $P950, $P949["desigilname"]
-    unless_null $P950, vivify_341
+    unless_null $P950, vivify_346
     new $P950, "Undef"
-  vivify_341:
+  vivify_346:
     concat $P951, $P948, $P950
 .annotate 'line', 351
     get_hll_global $P952, ["PAST"], "Op"
@@ -23261,7 +23542,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "package_declarator:sym<module>"  :subid("62_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "package_declarator:sym<module>"  :subid("62_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_984
 .annotate 'line', 366
     new $P983, 'ExceptionHandler'
@@ -23272,13 +23553,13 @@
     .lex "$/", param_984
     find_lex $P985, "$/"
     find_lex $P986, "$/"
-    unless_null $P986, vivify_344
+    unless_null $P986, vivify_349
     $P986 = root_new ['parrot';'Hash']
-  vivify_344:
+  vivify_349:
     set $P987, $P986["package_def"]
-    unless_null $P987, vivify_345
+    unless_null $P987, vivify_350
     new $P987, "Undef"
-  vivify_345:
+  vivify_350:
     $P988 = $P987."ast"()
     $P989 = $P985."!make"($P988)
     .return ($P989)
@@ -23292,7 +23573,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "package_declarator:sym<class>"  :subid("63_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "package_declarator:sym<class>"  :subid("63_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_994
 .annotate 'line', 367
     new $P993, 'ExceptionHandler'
@@ -23312,13 +23593,13 @@
     .lex "$parent", $P997
 .annotate 'line', 368
     find_lex $P998, "$/"
-    unless_null $P998, vivify_346
+    unless_null $P998, vivify_351
     $P998 = root_new ['parrot';'Hash']
-  vivify_346:
+  vivify_351:
     set $P999, $P998["package_def"]
-    unless_null $P999, vivify_347
+    unless_null $P999, vivify_352
     new $P999, "Undef"
-  vivify_347:
+  vivify_352:
     $P1000 = $P999."ast"()
     store_lex "$past", $P1000
 .annotate 'line', 370
@@ -23328,38 +23609,38 @@
     $P1003 = $P1002."new"("    %r = get_root_global [\"parrot\"], \"P6metaclass\"" :named("inline"))
 .annotate 'line', 374
     find_lex $P1004, "$/"
-    unless_null $P1004, vivify_348
+    unless_null $P1004, vivify_353
     $P1004 = root_new ['parrot';'Hash']
-  vivify_348:
+  vivify_353:
     set $P1005, $P1004["package_def"]
-    unless_null $P1005, vivify_349
+    unless_null $P1005, vivify_354
     $P1005 = root_new ['parrot';'Hash']
-  vivify_349:
+  vivify_354:
     set $P1006, $P1005["name"]
-    unless_null $P1006, vivify_350
+    unless_null $P1006, vivify_355
     new $P1006, "Undef"
-  vivify_350:
+  vivify_355:
     set $S1007, $P1006
     $P1008 = $P1001."new"($P1003, $S1007, "new_class" :named("name"), "callmethod" :named("pasttype"))
 .annotate 'line', 370
     store_lex "$classinit", $P1008
 .annotate 'line', 378
     find_lex $P1011, "$/"
-    unless_null $P1011, vivify_351
+    unless_null $P1011, vivify_356
     $P1011 = root_new ['parrot';'Hash']
-  vivify_351:
+  vivify_356:
     set $P1012, $P1011["package_def"]
-    unless_null $P1012, vivify_352
+    unless_null $P1012, vivify_357
     $P1012 = root_new ['parrot';'Hash']
-  vivify_352:
+  vivify_357:
     set $P1013, $P1012["parent"]
-    unless_null $P1013, vivify_353
+    unless_null $P1013, vivify_358
     $P1013 = root_new ['parrot';'ResizablePMCArray']
-  vivify_353:
+  vivify_358:
     set $P1014, $P1013[0]
-    unless_null $P1014, vivify_354
+    unless_null $P1014, vivify_359
     new $P1014, "Undef"
-  vivify_354:
+  vivify_359:
     set $S1015, $P1014
     unless $S1015, unless_1010
     new $P1009, 'String'
@@ -23368,13 +23649,13 @@
   unless_1010:
 .annotate 'line', 379
     find_lex $P1018, "$/"
-    unless_null $P1018, vivify_355
+    unless_null $P1018, vivify_360
     $P1018 = root_new ['parrot';'Hash']
-  vivify_355:
+  vivify_360:
     set $P1019, $P1018["sym"]
-    unless_null $P1019, vivify_356
+    unless_null $P1019, vivify_361
     new $P1019, "Undef"
-  vivify_356:
+  vivify_361:
     set $S1020, $P1019
     iseq $I1021, $S1020, "grammar"
     if $I1021, if_1017
@@ -23402,35 +23683,35 @@
   if_1024_end:
 .annotate 'line', 383
     find_lex $P1031, "$past"
-    unless_null $P1031, vivify_357
+    unless_null $P1031, vivify_362
     $P1031 = root_new ['parrot';'Hash']
-  vivify_357:
+  vivify_362:
     set $P1032, $P1031["attributes"]
-    unless_null $P1032, vivify_358
+    unless_null $P1032, vivify_363
     new $P1032, "Undef"
-  vivify_358:
+  vivify_363:
     unless $P1032, if_1030_end
 .annotate 'line', 384
     find_lex $P1033, "$classinit"
     find_lex $P1034, "$past"
-    unless_null $P1034, vivify_359
+    unless_null $P1034, vivify_364
     $P1034 = root_new ['parrot';'Hash']
-  vivify_359:
+  vivify_364:
     set $P1035, $P1034["attributes"]
-    unless_null $P1035, vivify_360
+    unless_null $P1035, vivify_365
     new $P1035, "Undef"
-  vivify_360:
+  vivify_365:
     $P1033."push"($P1035)
   if_1030_end:
 .annotate 'line', 386
     get_global $P1036, "@BLOCK"
-    unless_null $P1036, vivify_361
+    unless_null $P1036, vivify_366
     $P1036 = root_new ['parrot';'ResizablePMCArray']
-  vivify_361:
+  vivify_366:
     set $P1037, $P1036[0]
-    unless_null $P1037, vivify_362
+    unless_null $P1037, vivify_367
     new $P1037, "Undef"
-  vivify_362:
+  vivify_367:
     $P1038 = $P1037."loadinit"()
     find_lex $P1039, "$classinit"
     $P1038."push"($P1039)
@@ -23450,7 +23731,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "package_def"  :subid("64_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "package_def"  :subid("64_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_1047
 .annotate 'line', 390
     new $P1046, 'ExceptionHandler'
@@ -23463,34 +23744,34 @@
     new $P1048, "Undef"
     .lex "$past", $P1048
     find_lex $P1051, "$/"
-    unless_null $P1051, vivify_363
+    unless_null $P1051, vivify_368
     $P1051 = root_new ['parrot';'Hash']
-  vivify_363:
+  vivify_368:
     set $P1052, $P1051["block"]
-    unless_null $P1052, vivify_364
+    unless_null $P1052, vivify_369
     new $P1052, "Undef"
-  vivify_364:
+  vivify_369:
     if $P1052, if_1050
     find_lex $P1056, "$/"
-    unless_null $P1056, vivify_365
+    unless_null $P1056, vivify_370
     $P1056 = root_new ['parrot';'Hash']
-  vivify_365:
+  vivify_370:
     set $P1057, $P1056["comp_unit"]
-    unless_null $P1057, vivify_366
+    unless_null $P1057, vivify_371
     new $P1057, "Undef"
-  vivify_366:
+  vivify_371:
     $P1058 = $P1057."ast"()
     set $P1049, $P1058
     goto if_1050_end
   if_1050:
     find_lex $P1053, "$/"
-    unless_null $P1053, vivify_367
+    unless_null $P1053, vivify_372
     $P1053 = root_new ['parrot';'Hash']
-  vivify_367:
+  vivify_372:
     set $P1054, $P1053["block"]
-    unless_null $P1054, vivify_368
+    unless_null $P1054, vivify_373
     new $P1054, "Undef"
-  vivify_368:
+  vivify_373:
     $P1055 = $P1054."ast"()
     set $P1049, $P1055
   if_1050_end:
@@ -23498,17 +23779,17 @@
 .annotate 'line', 392
     find_lex $P1059, "$past"
     find_lex $P1060, "$/"
-    unless_null $P1060, vivify_369
+    unless_null $P1060, vivify_374
     $P1060 = root_new ['parrot';'Hash']
-  vivify_369:
+  vivify_374:
     set $P1061, $P1060["name"]
-    unless_null $P1061, vivify_370
+    unless_null $P1061, vivify_375
     $P1061 = root_new ['parrot';'Hash']
-  vivify_370:
+  vivify_375:
     set $P1062, $P1061["identifier"]
-    unless_null $P1062, vivify_371
+    unless_null $P1062, vivify_376
     new $P1062, "Undef"
-  vivify_371:
+  vivify_376:
     $P1059."namespace"($P1062)
 .annotate 'line', 393
     find_lex $P1063, "$past"
@@ -23529,7 +23810,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "scope_declarator:sym<my>"  :subid("65_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "scope_declarator:sym<my>"  :subid("65_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_1071
 .annotate 'line', 397
     new $P1070, 'ExceptionHandler'
@@ -23540,13 +23821,13 @@
     .lex "$/", param_1071
     find_lex $P1072, "$/"
     find_lex $P1073, "$/"
-    unless_null $P1073, vivify_372
+    unless_null $P1073, vivify_377
     $P1073 = root_new ['parrot';'Hash']
-  vivify_372:
+  vivify_377:
     set $P1074, $P1073["scoped"]
-    unless_null $P1074, vivify_373
+    unless_null $P1074, vivify_378
     new $P1074, "Undef"
-  vivify_373:
+  vivify_378:
     $P1075 = $P1074."ast"()
     $P1076 = $P1072."!make"($P1075)
     .return ($P1076)
@@ -23560,7 +23841,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "scope_declarator:sym<our>"  :subid("66_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "scope_declarator:sym<our>"  :subid("66_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_1081
 .annotate 'line', 398
     new $P1080, 'ExceptionHandler'
@@ -23571,13 +23852,13 @@
     .lex "$/", param_1081
     find_lex $P1082, "$/"
     find_lex $P1083, "$/"
-    unless_null $P1083, vivify_374
+    unless_null $P1083, vivify_379
     $P1083 = root_new ['parrot';'Hash']
-  vivify_374:
+  vivify_379:
     set $P1084, $P1083["scoped"]
-    unless_null $P1084, vivify_375
+    unless_null $P1084, vivify_380
     new $P1084, "Undef"
-  vivify_375:
+  vivify_380:
     $P1085 = $P1084."ast"()
     $P1086 = $P1082."!make"($P1085)
     .return ($P1086)
@@ -23591,7 +23872,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "scope_declarator:sym<has>"  :subid("67_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "scope_declarator:sym<has>"  :subid("67_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_1091
 .annotate 'line', 399
     new $P1090, 'ExceptionHandler'
@@ -23602,13 +23883,13 @@
     .lex "$/", param_1091
     find_lex $P1092, "$/"
     find_lex $P1093, "$/"
-    unless_null $P1093, vivify_376
+    unless_null $P1093, vivify_381
     $P1093 = root_new ['parrot';'Hash']
-  vivify_376:
+  vivify_381:
     set $P1094, $P1093["scoped"]
-    unless_null $P1094, vivify_377
+    unless_null $P1094, vivify_382
     new $P1094, "Undef"
-  vivify_377:
+  vivify_382:
     $P1095 = $P1094."ast"()
     $P1096 = $P1092."!make"($P1095)
     .return ($P1096)
@@ -23622,7 +23903,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "scoped"  :subid("68_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "scoped"  :subid("68_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_1101
 .annotate 'line', 401
     new $P1100, 'ExceptionHandler'
@@ -23635,36 +23916,36 @@
     find_lex $P1102, "$/"
 .annotate 'line', 403
     find_lex $P1105, "$/"
-    unless_null $P1105, vivify_378
+    unless_null $P1105, vivify_383
     $P1105 = root_new ['parrot';'Hash']
-  vivify_378:
+  vivify_383:
     set $P1106, $P1105["declarator"]
-    unless_null $P1106, vivify_379
+    unless_null $P1106, vivify_384
     new $P1106, "Undef"
-  vivify_379:
+  vivify_384:
     if $P1106, if_1104
 .annotate 'line', 404
     find_lex $P1110, "$/"
-    unless_null $P1110, vivify_380
+    unless_null $P1110, vivify_385
     $P1110 = root_new ['parrot';'Hash']
-  vivify_380:
+  vivify_385:
     set $P1111, $P1110["multi_declarator"]
-    unless_null $P1111, vivify_381
+    unless_null $P1111, vivify_386
     new $P1111, "Undef"
-  vivify_381:
+  vivify_386:
     $P1112 = $P1111."ast"()
     set $P1103, $P1112
 .annotate 'line', 403
     goto if_1104_end
   if_1104:
     find_lex $P1107, "$/"
-    unless_null $P1107, vivify_382
+    unless_null $P1107, vivify_387
     $P1107 = root_new ['parrot';'Hash']
-  vivify_382:
+  vivify_387:
     set $P1108, $P1107["declarator"]
-    unless_null $P1108, vivify_383
+    unless_null $P1108, vivify_388
     new $P1108, "Undef"
-  vivify_383:
+  vivify_388:
     $P1109 = $P1108."ast"()
     set $P1103, $P1109
   if_1104_end:
@@ -23681,7 +23962,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "declarator"  :subid("69_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "declarator"  :subid("69_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_1118
 .annotate 'line', 407
     new $P1117, 'ExceptionHandler'
@@ -23694,36 +23975,36 @@
     find_lex $P1119, "$/"
 .annotate 'line', 409
     find_lex $P1122, "$/"
-    unless_null $P1122, vivify_384
+    unless_null $P1122, vivify_389
     $P1122 = root_new ['parrot';'Hash']
-  vivify_384:
+  vivify_389:
     set $P1123, $P1122["routine_declarator"]
-    unless_null $P1123, vivify_385
+    unless_null $P1123, vivify_390
     new $P1123, "Undef"
-  vivify_385:
+  vivify_390:
     if $P1123, if_1121
 .annotate 'line', 410
     find_lex $P1127, "$/"
-    unless_null $P1127, vivify_386
+    unless_null $P1127, vivify_391
     $P1127 = root_new ['parrot';'Hash']
-  vivify_386:
+  vivify_391:
     set $P1128, $P1127["variable_declarator"]
-    unless_null $P1128, vivify_387
+    unless_null $P1128, vivify_392
     new $P1128, "Undef"
-  vivify_387:
+  vivify_392:
     $P1129 = $P1128."ast"()
     set $P1120, $P1129
 .annotate 'line', 409
     goto if_1121_end
   if_1121:
     find_lex $P1124, "$/"
-    unless_null $P1124, vivify_388
+    unless_null $P1124, vivify_393
     $P1124 = root_new ['parrot';'Hash']
-  vivify_388:
+  vivify_393:
     set $P1125, $P1124["routine_declarator"]
-    unless_null $P1125, vivify_389
+    unless_null $P1125, vivify_394
     new $P1125, "Undef"
-  vivify_389:
+  vivify_394:
     $P1126 = $P1125."ast"()
     set $P1120, $P1126
   if_1121_end:
@@ -23740,7 +24021,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "multi_declarator:sym<multi>"  :subid("70_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "multi_declarator:sym<multi>"  :subid("70_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_1135
 .annotate 'line', 413
     new $P1134, 'ExceptionHandler'
@@ -23751,34 +24032,34 @@
     .lex "$/", param_1135
     find_lex $P1136, "$/"
     find_lex $P1139, "$/"
-    unless_null $P1139, vivify_390
+    unless_null $P1139, vivify_395
     $P1139 = root_new ['parrot';'Hash']
-  vivify_390:
+  vivify_395:
     set $P1140, $P1139["declarator"]
-    unless_null $P1140, vivify_391
+    unless_null $P1140, vivify_396
     new $P1140, "Undef"
-  vivify_391:
+  vivify_396:
     if $P1140, if_1138
     find_lex $P1144, "$/"
-    unless_null $P1144, vivify_392
+    unless_null $P1144, vivify_397
     $P1144 = root_new ['parrot';'Hash']
-  vivify_392:
+  vivify_397:
     set $P1145, $P1144["routine_def"]
-    unless_null $P1145, vivify_393
+    unless_null $P1145, vivify_398
     new $P1145, "Undef"
-  vivify_393:
+  vivify_398:
     $P1146 = $P1145."ast"()
     set $P1137, $P1146
     goto if_1138_end
   if_1138:
     find_lex $P1141, "$/"
-    unless_null $P1141, vivify_394
+    unless_null $P1141, vivify_399
     $P1141 = root_new ['parrot';'Hash']
-  vivify_394:
+  vivify_399:
     set $P1142, $P1141["declarator"]
-    unless_null $P1142, vivify_395
+    unless_null $P1142, vivify_400
     new $P1142, "Undef"
-  vivify_395:
+  vivify_400:
     $P1143 = $P1142."ast"()
     set $P1137, $P1143
   if_1138_end:
@@ -23794,7 +24075,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "multi_declarator:sym<null>"  :subid("71_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "multi_declarator:sym<null>"  :subid("71_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_1152
 .annotate 'line', 414
     new $P1151, 'ExceptionHandler'
@@ -23805,13 +24086,13 @@
     .lex "$/", param_1152
     find_lex $P1153, "$/"
     find_lex $P1154, "$/"
-    unless_null $P1154, vivify_396
+    unless_null $P1154, vivify_401
     $P1154 = root_new ['parrot';'Hash']
-  vivify_396:
+  vivify_401:
     set $P1155, $P1154["declarator"]
-    unless_null $P1155, vivify_397
+    unless_null $P1155, vivify_402
     new $P1155, "Undef"
-  vivify_397:
+  vivify_402:
     $P1156 = $P1155."ast"()
     $P1157 = $P1153."!make"($P1156)
     .return ($P1157)
@@ -23825,10 +24106,10 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "variable_declarator"  :subid("72_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "variable_declarator"  :subid("72_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_1162
 .annotate 'line', 417
-    .const 'Sub' $P1202 = "73_1282324007.53935" 
+    .const 'Sub' $P1202 = "73_1284728484.24945" 
     capture_lex $P1202
     new $P1161, 'ExceptionHandler'
     set_addr $P1161, control_1160
@@ -23850,28 +24131,28 @@
     .lex "$BLOCK", $P1166
 .annotate 'line', 418
     find_lex $P1167, "$/"
-    unless_null $P1167, vivify_398
+    unless_null $P1167, vivify_403
     $P1167 = root_new ['parrot';'Hash']
-  vivify_398:
+  vivify_403:
     set $P1168, $P1167["variable"]
-    unless_null $P1168, vivify_399
+    unless_null $P1168, vivify_404
     new $P1168, "Undef"
-  vivify_399:
+  vivify_404:
     $P1169 = $P1168."ast"()
     store_lex "$past", $P1169
 .annotate 'line', 419
     find_lex $P1170, "$/"
-    unless_null $P1170, vivify_400
+    unless_null $P1170, vivify_405
     $P1170 = root_new ['parrot';'Hash']
-  vivify_400:
+  vivify_405:
     set $P1171, $P1170["variable"]
-    unless_null $P1171, vivify_401
+    unless_null $P1171, vivify_406
     $P1171 = root_new ['parrot';'Hash']
-  vivify_401:
+  vivify_406:
     set $P1172, $P1171["sigil"]
-    unless_null $P1172, vivify_402
+    unless_null $P1172, vivify_407
     new $P1172, "Undef"
-  vivify_402:
+  vivify_407:
     store_lex "$sigil", $P1172
 .annotate 'line', 420
     find_lex $P1173, "$past"
@@ -23879,13 +24160,13 @@
     store_lex "$name", $P1174
 .annotate 'line', 421
     get_global $P1175, "@BLOCK"
-    unless_null $P1175, vivify_403
+    unless_null $P1175, vivify_408
     $P1175 = root_new ['parrot';'ResizablePMCArray']
-  vivify_403:
+  vivify_408:
     set $P1176, $P1175[0]
-    unless_null $P1176, vivify_404
+    unless_null $P1176, vivify_409
     new $P1176, "Undef"
-  vivify_404:
+  vivify_409:
     store_lex "$BLOCK", $P1176
 .annotate 'line', 422
     find_lex $P1178, "$BLOCK"
@@ -23900,17 +24181,17 @@
   if_1177_end:
 .annotate 'line', 425
     find_dynamic_lex $P1185, "$*SCOPE"
-    unless_null $P1185, vivify_405
+    unless_null $P1185, vivify_410
     get_hll_global $P1185, "$SCOPE"
-    unless_null $P1185, vivify_406
+    unless_null $P1185, vivify_411
     die "Contextual $*SCOPE not found"
-  vivify_406:
-  vivify_405:
+  vivify_411:
+  vivify_410:
     set $S1186, $P1185
     iseq $I1187, $S1186, "has"
     if $I1187, if_1184
 .annotate 'line', 434
-    .const 'Sub' $P1202 = "73_1282324007.53935" 
+    .const 'Sub' $P1202 = "73_1284728484.24945" 
     capture_lex $P1202
     $P1202()
     goto if_1184_end
@@ -23921,33 +24202,33 @@
     $P1188."symbol"($P1189, "attribute" :named("scope"))
 .annotate 'line', 427
     find_lex $P1191, "$BLOCK"
-    unless_null $P1191, vivify_411
+    unless_null $P1191, vivify_416
     $P1191 = root_new ['parrot';'Hash']
-  vivify_411:
+  vivify_416:
     set $P1192, $P1191["attributes"]
-    unless_null $P1192, vivify_412
+    unless_null $P1192, vivify_417
     new $P1192, "Undef"
-  vivify_412:
+  vivify_417:
     if $P1192, unless_1190_end
 .annotate 'line', 429
     get_hll_global $P1193, ["PAST"], "Op"
     $P1194 = $P1193."new"("list" :named("pasttype"), "attr" :named("named"))
     find_lex $P1195, "$BLOCK"
-    unless_null $P1195, vivify_413
+    unless_null $P1195, vivify_418
     $P1195 = root_new ['parrot';'Hash']
     store_lex "$BLOCK", $P1195
-  vivify_413:
+  vivify_418:
     set $P1195["attributes"], $P1194
   unless_1190_end:
 .annotate 'line', 431
     find_lex $P1196, "$BLOCK"
-    unless_null $P1196, vivify_414
+    unless_null $P1196, vivify_419
     $P1196 = root_new ['parrot';'Hash']
-  vivify_414:
+  vivify_419:
     set $P1197, $P1196["attributes"]
-    unless_null $P1197, vivify_415
+    unless_null $P1197, vivify_420
     new $P1197, "Undef"
-  vivify_415:
+  vivify_420:
     find_lex $P1198, "$name"
     $P1197."push"($P1198)
 .annotate 'line', 432
@@ -23970,7 +24251,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1201"  :anon :subid("73_1282324007.53935") :outer("72_1282324007.53935")
+.sub "_block1201"  :anon :subid("73_1284728484.24945") :outer("72_1284728484.24945")
 .annotate 'line', 435
     new $P1203, "Undef"
     .lex "$scope", $P1203
@@ -23979,12 +24260,12 @@
     .lex "$decl", $P1204
 .annotate 'line', 435
     find_dynamic_lex $P1207, "$*SCOPE"
-    unless_null $P1207, vivify_407
+    unless_null $P1207, vivify_412
     get_hll_global $P1207, "$SCOPE"
-    unless_null $P1207, vivify_408
+    unless_null $P1207, vivify_413
     die "Contextual $*SCOPE not found"
-  vivify_408:
-  vivify_407:
+  vivify_413:
+  vivify_412:
     set $S1208, $P1207
     iseq $I1209, $S1208, "our"
     if $I1209, if_1206
@@ -24016,13 +24297,13 @@
     $P1219."symbol"($P1220, $P1221 :named("scope"))
 .annotate 'line', 440
     find_lex $P1222, "$BLOCK"
-    unless_null $P1222, vivify_409
+    unless_null $P1222, vivify_414
     $P1222 = root_new ['parrot';'ResizablePMCArray']
-  vivify_409:
+  vivify_414:
     set $P1223, $P1222[0]
-    unless_null $P1223, vivify_410
+    unless_null $P1223, vivify_415
     new $P1223, "Undef"
-  vivify_410:
+  vivify_415:
     find_lex $P1224, "$decl"
     $P1225 = $P1223."push"($P1224)
 .annotate 'line', 434
@@ -24032,7 +24313,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "routine_declarator:sym<sub>"  :subid("74_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "routine_declarator:sym<sub>"  :subid("74_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_1233
 .annotate 'line', 445
     new $P1232, 'ExceptionHandler'
@@ -24043,13 +24324,13 @@
     .lex "$/", param_1233
     find_lex $P1234, "$/"
     find_lex $P1235, "$/"
-    unless_null $P1235, vivify_416
+    unless_null $P1235, vivify_421
     $P1235 = root_new ['parrot';'Hash']
-  vivify_416:
+  vivify_421:
     set $P1236, $P1235["routine_def"]
-    unless_null $P1236, vivify_417
+    unless_null $P1236, vivify_422
     new $P1236, "Undef"
-  vivify_417:
+  vivify_422:
     $P1237 = $P1236."ast"()
     $P1238 = $P1234."!make"($P1237)
     .return ($P1238)
@@ -24063,7 +24344,7 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "routine_declarator:sym<method>"  :subid("75_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "routine_declarator:sym<method>"  :subid("75_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_1243
 .annotate 'line', 446
     new $P1242, 'ExceptionHandler'
@@ -24074,13 +24355,13 @@
     .lex "$/", param_1243
     find_lex $P1244, "$/"
     find_lex $P1245, "$/"
-    unless_null $P1245, vivify_418
+    unless_null $P1245, vivify_423
     $P1245 = root_new ['parrot';'Hash']
-  vivify_418:
+  vivify_423:
     set $P1246, $P1245["method_def"]
-    unless_null $P1246, vivify_419
+    unless_null $P1246, vivify_424
     new $P1246, "Undef"
-  vivify_419:
+  vivify_424:
     $P1247 = $P1246."ast"()
     $P1248 = $P1244."!make"($P1247)
     .return ($P1248)
@@ -24094,11 +24375,13 @@
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "routine_def"  :subid("76_1282324007.53935") :method :outer("11_1282324007.53935")
+.sub "routine_def"  :subid("76_1284728484.24945") :method :outer("11_1284728484.24945")
     .param pmc param_1253
 .annotate 'line', 448
-    .const 'Sub' $P1264 = "77_1282324007.53935" 
-    capture_lex $P1264
+    .const 'Sub' $P1312 = "78_1284728484.24945" 
+    capture_lex $P1312
+    .const 'Sub' $P1266 = "77_1284728484.24945" 
+    capture_lex $P1266
     new $P1252, 'ExceptionHandler'
     set_addr $P1252, control_1251
     $P1252."handle_types"(.CONTROL_RETURN)
@@ -24107,3530 +24390,3848 @@
     .lex "$/", param_1253
 .annotate 'line', 449
     new $P1254, "Undef"
-    .lex "$past", $P1254
-    find_lex $P1255, "$/"
-    unless_null $P1255, vivify_420
-    $P1255 = root_new ['parrot';'Hash']
-  vivify_420:
-    set $P1256, $P1255["blockoid"]
-    unless_null $P1256, vivify_421
-    new $P1256, "Undef"
-  vivify_421:
-    $P1257 = $P1256."ast"()
-    store_lex "$past", $P1257
+    .lex "$block", $P1254
+.annotate 'line', 452
+    new $P1255, "Undef"
+    .lex "$past", $P1255
+.annotate 'line', 449
+    find_lex $P1256, "$/"
+    unless_null $P1256, vivify_425
+    $P1256 = root_new ['parrot';'Hash']
+  vivify_425:
+    set $P1257, $P1256["blockoid"]
+    unless_null $P1257, vivify_426
+    new $P1257, "Undef"
+  vivify_426:
+    $P1258 = $P1257."ast"()
+    store_lex "$block", $P1258
 .annotate 'line', 450
-    find_lex $P1258, "$past"
-    $P1258."blocktype"("declaration")
+    find_lex $P1259, "$block"
+    $P1259."blocktype"("declaration")
 .annotate 'line', 451
-    find_lex $P1259, "$past"
-    $P1259."control"("return_pir")
+    find_lex $P1260, "$block"
+    $P1260."control"("return_pir")
 .annotate 'line', 452
-    find_lex $P1261, "$/"
-    unless_null $P1261, vivify_422
-    $P1261 = root_new ['parrot';'Hash']
-  vivify_422:
-    set $P1262, $P1261["deflongname"]
-    unless_null $P1262, vivify_423
-    new $P1262, "Undef"
-  vivify_423:
-    unless $P1262, if_1260_end
-    .const 'Sub' $P1264 = "77_1282324007.53935" 
-    capture_lex $P1264
-    $P1264()
-  if_1260_end:
-.annotate 'line', 462
-    find_lex $P1296, "$/"
-    find_lex $P1297, "$past"
-    $P1298 = $P1296."!make"($P1297)
+    find_lex $P1261, "$block"
+    store_lex "$past", $P1261
+.annotate 'line', 453
+    find_lex $P1263, "$/"
+    unless_null $P1263, vivify_427
+    $P1263 = root_new ['parrot';'Hash']
+  vivify_427:
+    set $P1264, $P1263["deflongname"]
+    unless_null $P1264, vivify_428
+    new $P1264, "Undef"
+  vivify_428:
+    unless $P1264, if_1262_end
+    .const 'Sub' $P1266 = "77_1284728484.24945" 
+    capture_lex $P1266
+    $P1266()
+  if_1262_end:
+.annotate 'line', 463
+    find_lex $P1298, "$block"
+    find_lex $P1299, "$past"
+    unless_null $P1299, vivify_442
+    $P1299 = root_new ['parrot';'Hash']
+    store_lex "$past", $P1299
+  vivify_442:
+    set $P1299["block_past"], $P1298
+.annotate 'line', 464
+    find_lex $P1300, "$/"
+    find_lex $P1301, "$past"
+    $P1300."!make"($P1301)
+.annotate 'line', 465
+    find_lex $P1304, "$/"
+    unless_null $P1304, vivify_443
+    $P1304 = root_new ['parrot';'Hash']
+  vivify_443:
+    set $P1305, $P1304["trait"]
+    unless_null $P1305, vivify_444
+    new $P1305, "Undef"
+  vivify_444:
+    if $P1305, if_1303
+    set $P1302, $P1305
+    goto if_1303_end
+  if_1303:
+.annotate 'line', 466
+    find_lex $P1307, "$/"
+    unless_null $P1307, vivify_445
+    $P1307 = root_new ['parrot';'Hash']
+  vivify_445:
+    set $P1308, $P1307["trait"]
+    unless_null $P1308, vivify_446
+    new $P1308, "Undef"
+  vivify_446:
+    defined $I1309, $P1308
+    unless $I1309, for_undef_447
+    iter $P1306, $P1308
+    new $P1319, 'ExceptionHandler'
+    set_addr $P1319, loop1318_handler
+    $P1319."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1319
+  loop1318_test:
+    unless $P1306, loop1318_done
+    shift $P1310, $P1306
+  loop1318_redo:
+    .const 'Sub' $P1312 = "78_1284728484.24945" 
+    capture_lex $P1312
+    $P1312($P1310)
+  loop1318_next:
+    goto loop1318_test
+  loop1318_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1320, exception, 'type'
+    eq $P1320, .CONTROL_LOOP_NEXT, loop1318_next
+    eq $P1320, .CONTROL_LOOP_REDO, loop1318_redo
+  loop1318_done:
+    pop_eh 
+  for_undef_447:
+.annotate 'line', 465
+    set $P1302, $P1306
+  if_1303_end:
 .annotate 'line', 448
-    .return ($P1298)
+    .return ($P1302)
   control_1251:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1299, exception, "payload"
-    .return ($P1299)
+    getattribute $P1321, exception, "payload"
+    .return ($P1321)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1263"  :anon :subid("77_1282324007.53935") :outer("76_1282324007.53935")
-.annotate 'line', 453
-    new $P1265, "Undef"
-    .lex "$name", $P1265
-    find_lex $P1266, "$/"
-    unless_null $P1266, vivify_424
-    $P1266 = root_new ['parrot';'Hash']
-  vivify_424:
-    set $P1267, $P1266["sigil"]
-    unless_null $P1267, vivify_425
-    $P1267 = root_new ['parrot';'ResizablePMCArray']
-  vivify_425:
-    set $P1268, $P1267[0]
-    unless_null $P1268, vivify_426
-    new $P1268, "Undef"
-  vivify_426:
-    set $S1269, $P1268
-    new $P1270, 'String'
-    set $P1270, $S1269
-    find_lex $P1271, "$/"
-    unless_null $P1271, vivify_427
-    $P1271 = root_new ['parrot';'Hash']
-  vivify_427:
-    set $P1272, $P1271["deflongname"]
-    unless_null $P1272, vivify_428
-    $P1272 = root_new ['parrot';'ResizablePMCArray']
-  vivify_428:
-    set $P1273, $P1272[0]
-    unless_null $P1273, vivify_429
-    new $P1273, "Undef"
+.sub "_block1265"  :anon :subid("77_1284728484.24945") :outer("76_1284728484.24945")
+.annotate 'line', 454
+    new $P1267, "Undef"
+    .lex "$name", $P1267
+    find_lex $P1268, "$/"
+    unless_null $P1268, vivify_429
+    $P1268 = root_new ['parrot';'Hash']
   vivify_429:
-    $S1274 = $P1273."ast"()
-    concat $P1275, $P1270, $S1274
-    store_lex "$name", $P1275
-.annotate 'line', 454
-    find_lex $P1276, "$past"
-    find_lex $P1277, "$name"
-    $P1276."name"($P1277)
-.annotate 'line', 455
-    find_dynamic_lex $P1280, "$*SCOPE"
-    unless_null $P1280, vivify_430
-    get_hll_global $P1280, "$SCOPE"
-    unless_null $P1280, vivify_431
-    die "Contextual $*SCOPE not found"
-  vivify_431:
+    set $P1269, $P1268["sigil"]
+    unless_null $P1269, vivify_430
+    $P1269 = root_new ['parrot';'ResizablePMCArray']
   vivify_430:
-    set $S1281, $P1280
-    isne $I1282, $S1281, "our"
-    if $I1282, if_1279
-    new $P1278, 'Integer'
-    set $P1278, $I1282
-    goto if_1279_end
-  if_1279:
-.annotate 'line', 456
-    get_global $P1283, "@BLOCK"
-    unless_null $P1283, vivify_432
-    $P1283 = root_new ['parrot';'ResizablePMCArray']
+    set $P1270, $P1269[0]
+    unless_null $P1270, vivify_431
+    new $P1270, "Undef"
+  vivify_431:
+    set $S1271, $P1270
+    new $P1272, 'String'
+    set $P1272, $S1271
+    find_lex $P1273, "$/"
+    unless_null $P1273, vivify_432
+    $P1273 = root_new ['parrot';'Hash']
   vivify_432:
-    set $P1284, $P1283[0]
-    unless_null $P1284, vivify_433
-    $P1284 = root_new ['parrot';'ResizablePMCArray']
+    set $P1274, $P1273["deflongname"]
+    unless_null $P1274, vivify_433
+    $P1274 = root_new ['parrot';'ResizablePMCArray']
   vivify_433:
-    set $P1285, $P1284[0]
-    unless_null $P1285, vivify_434
-    new $P1285, "Undef"
+    set $P1275, $P1274[0]
+    unless_null $P1275, vivify_434
+    new $P1275, "Undef"
   vivify_434:
-    get_hll_global $P1286, ["PAST"], "Var"
-    find_lex $P1287, "$name"
-    find_lex $P1288, "$past"
-    $P1289 = $P1286."new"($P1287 :named("name"), 1 :named("isdecl"), $P1288 :named("viviself"), "lexical" :named("scope"))
-    $P1285."push"($P1289)
-.annotate 'line', 458
-    get_global $P1290, "@BLOCK"
-    unless_null $P1290, vivify_435
-    $P1290 = root_new ['parrot';'ResizablePMCArray']
-  vivify_435:
-    set $P1291, $P1290[0]
-    unless_null $P1291, vivify_436
-    new $P1291, "Undef"
+    $S1276 = $P1275."ast"()
+    concat $P1277, $P1272, $S1276
+    store_lex "$name", $P1277
+.annotate 'line', 455
+    find_lex $P1278, "$past"
+    find_lex $P1279, "$name"
+    $P1278."name"($P1279)
+.annotate 'line', 456
+    find_dynamic_lex $P1282, "$*SCOPE"
+    unless_null $P1282, vivify_435
+    get_hll_global $P1282, "$SCOPE"
+    unless_null $P1282, vivify_436
+    die "Contextual $*SCOPE not found"
   vivify_436:
-    find_lex $P1292, "$name"
-    $P1291."symbol"($P1292, "lexical" :named("scope"))
+  vivify_435:
+    set $S1283, $P1282
+    isne $I1284, $S1283, "our"
+    if $I1284, if_1281
+    new $P1280, 'Integer'
+    set $P1280, $I1284
+    goto if_1281_end
+  if_1281:
+.annotate 'line', 457
+    get_global $P1285, "@BLOCK"
+    unless_null $P1285, vivify_437
+    $P1285 = root_new ['parrot';'ResizablePMCArray']
+  vivify_437:
+    set $P1286, $P1285[0]
+    unless_null $P1286, vivify_438
+    $P1286 = root_new ['parrot';'ResizablePMCArray']
+  vivify_438:
+    set $P1287, $P1286[0]
+    unless_null $P1287, vivify_439
+    new $P1287, "Undef"
+  vivify_439:
+    get_hll_global $P1288, ["PAST"], "Var"
+    find_lex $P1289, "$name"
+    find_lex $P1290, "$past"
+    $P1291 = $P1288."new"($P1289 :named("name"), 1 :named("isdecl"), $P1290 :named("viviself"), "lexical" :named("scope"))
+    $P1287."push"($P1291)
 .annotate 'line', 459
-    get_hll_global $P1293, ["PAST"], "Var"
+    get_global $P1292, "@BLOCK"
+    unless_null $P1292, vivify_440
+    $P1292 = root_new ['parrot';'ResizablePMCArray']
+  vivify_440:
+    set $P1293, $P1292[0]
+    unless_null $P1293, vivify_441
+    new $P1293, "Undef"
+  vivify_441:
     find_lex $P1294, "$name"
-    $P1295 = $P1293."new"($P1294 :named("name"))
-    store_lex "$past", $P1295
-.annotate 'line', 455
-    set $P1278, $P1295
-  if_1279_end:
-.annotate 'line', 452
-    .return ($P1278)
+    $P1293."symbol"($P1294, "lexical" :named("scope"))
+.annotate 'line', 460
+    get_hll_global $P1295, ["PAST"], "Var"
+    find_lex $P1296, "$name"
+    $P1297 = $P1295."new"($P1296 :named("name"))
+    store_lex "$past", $P1297
+.annotate 'line', 456
+    set $P1280, $P1297
+  if_1281_end:
+.annotate 'line', 453
+    .return ($P1280)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.include "except_types.pasm"
-.sub "method_def"  :subid("78_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1303
+.sub "_block1311"  :anon :subid("78_1284728484.24945") :outer("76_1284728484.24945")
+    .param pmc param_1313
 .annotate 'line', 466
-    .const 'Sub' $P1324 = "79_1282324007.53935" 
-    capture_lex $P1324
-    new $P1302, 'ExceptionHandler'
-    set_addr $P1302, control_1301
-    $P1302."handle_types"(.CONTROL_RETURN)
-    push_eh $P1302
+    .lex "$_", param_1313
+    find_lex $P1314, "$_"
+    $P1315 = $P1314."ast"()
+    find_lex $P1316, "$/"
+    $P1317 = $P1315($P1316)
+    .return ($P1317)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "method_def"  :subid("79_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_1325
+.annotate 'line', 471
+    .const 'Sub' $P1377 = "81_1284728484.24945" 
+    capture_lex $P1377
+    .const 'Sub' $P1346 = "80_1284728484.24945" 
+    capture_lex $P1346
+    new $P1324, 'ExceptionHandler'
+    set_addr $P1324, control_1323
+    $P1324."handle_types"(.CONTROL_RETURN)
+    push_eh $P1324
     .lex "self", self
-    .lex "$/", param_1303
-.annotate 'line', 467
-    new $P1304, "Undef"
-    .lex "$past", $P1304
-    find_lex $P1305, "$/"
-    unless_null $P1305, vivify_437
-    $P1305 = root_new ['parrot';'Hash']
-  vivify_437:
-    set $P1306, $P1305["blockoid"]
-    unless_null $P1306, vivify_438
-    new $P1306, "Undef"
-  vivify_438:
-    $P1307 = $P1306."ast"()
-    store_lex "$past", $P1307
-.annotate 'line', 468
-    find_lex $P1308, "$past"
-    $P1308."blocktype"("method")
-.annotate 'line', 469
-    find_dynamic_lex $P1310, "$*SCOPE"
-    unless_null $P1310, vivify_439
-    get_hll_global $P1310, "$SCOPE"
-    unless_null $P1310, vivify_440
-    die "Contextual $*SCOPE not found"
-  vivify_440:
-  vivify_439:
-    set $S1311, $P1310
-    iseq $I1312, $S1311, "our"
-    unless $I1312, if_1309_end
-.annotate 'line', 470
-    find_lex $P1313, "$past"
-    $P1313."pirflags"(":nsentry")
-  if_1309_end:
+    .lex "$/", param_1325
 .annotate 'line', 472
-    find_lex $P1314, "$past"
-    $P1314."control"("return_pir")
+    new $P1326, "Undef"
+    .lex "$past", $P1326
+    find_lex $P1327, "$/"
+    unless_null $P1327, vivify_448
+    $P1327 = root_new ['parrot';'Hash']
+  vivify_448:
+    set $P1328, $P1327["blockoid"]
+    unless_null $P1328, vivify_449
+    new $P1328, "Undef"
+  vivify_449:
+    $P1329 = $P1328."ast"()
+    store_lex "$past", $P1329
 .annotate 'line', 473
-    find_lex $P1315, "$past"
-    unless_null $P1315, vivify_441
-    $P1315 = root_new ['parrot';'ResizablePMCArray']
-  vivify_441:
-    set $P1316, $P1315[0]
-    unless_null $P1316, vivify_442
-    new $P1316, "Undef"
-  vivify_442:
-    get_hll_global $P1317, ["PAST"], "Op"
-    $P1318 = $P1317."new"("    .lex \"self\", self" :named("inline"))
-    $P1316."unshift"($P1318)
+    find_lex $P1330, "$past"
+    $P1330."blocktype"("method")
 .annotate 'line', 474
-    find_lex $P1319, "$past"
-    $P1319."symbol"("self", "lexical" :named("scope"))
+    find_dynamic_lex $P1332, "$*SCOPE"
+    unless_null $P1332, vivify_450
+    get_hll_global $P1332, "$SCOPE"
+    unless_null $P1332, vivify_451
+    die "Contextual $*SCOPE not found"
+  vivify_451:
+  vivify_450:
+    set $S1333, $P1332
+    iseq $I1334, $S1333, "our"
+    unless $I1334, if_1331_end
 .annotate 'line', 475
-    find_lex $P1321, "$/"
-    unless_null $P1321, vivify_443
-    $P1321 = root_new ['parrot';'Hash']
-  vivify_443:
-    set $P1322, $P1321["deflongname"]
-    unless_null $P1322, vivify_444
-    new $P1322, "Undef"
-  vivify_444:
-    unless $P1322, if_1320_end
-    .const 'Sub' $P1324 = "79_1282324007.53935" 
-    capture_lex $P1324
-    $P1324()
-  if_1320_end:
+    find_lex $P1335, "$past"
+    $P1335."pirflags"(":nsentry")
+  if_1331_end:
+.annotate 'line', 477
+    find_lex $P1336, "$past"
+    $P1336."control"("return_pir")
+.annotate 'line', 478
+    find_lex $P1337, "$past"
+    unless_null $P1337, vivify_452
+    $P1337 = root_new ['parrot';'ResizablePMCArray']
+  vivify_452:
+    set $P1338, $P1337[0]
+    unless_null $P1338, vivify_453
+    new $P1338, "Undef"
+  vivify_453:
+    get_hll_global $P1339, ["PAST"], "Op"
+    $P1340 = $P1339."new"("    .lex \"self\", self" :named("inline"))
+    $P1338."unshift"($P1340)
 .annotate 'line', 479
-    find_dynamic_lex $P1336, "$*MULTINESS"
-    unless_null $P1336, vivify_448
-    get_hll_global $P1336, "$MULTINESS"
-    unless_null $P1336, vivify_449
-    die "Contextual $*MULTINESS not found"
-  vivify_449:
-  vivify_448:
-    set $S1337, $P1336
-    iseq $I1338, $S1337, "multi"
-    unless $I1338, if_1335_end
-    find_lex $P1339, "$past"
-    $P1340 = $P1339."multi"()
-    $P1340."unshift"("_")
-  if_1335_end:
+    find_lex $P1341, "$past"
+    $P1341."symbol"("self", "lexical" :named("scope"))
 .annotate 'line', 480
-    find_lex $P1341, "$/"
-    find_lex $P1342, "$past"
-    $P1343 = $P1341."!make"($P1342)
-.annotate 'line', 466
-    .return ($P1343)
-  control_1301:
+    find_lex $P1343, "$/"
+    unless_null $P1343, vivify_454
+    $P1343 = root_new ['parrot';'Hash']
+  vivify_454:
+    set $P1344, $P1343["deflongname"]
+    unless_null $P1344, vivify_455
+    new $P1344, "Undef"
+  vivify_455:
+    unless $P1344, if_1342_end
+    .const 'Sub' $P1346 = "80_1284728484.24945" 
+    capture_lex $P1346
+    $P1346()
+  if_1342_end:
+.annotate 'line', 484
+    find_dynamic_lex $P1358, "$*MULTINESS"
+    unless_null $P1358, vivify_459
+    get_hll_global $P1358, "$MULTINESS"
+    unless_null $P1358, vivify_460
+    die "Contextual $*MULTINESS not found"
+  vivify_460:
+  vivify_459:
+    set $S1359, $P1358
+    iseq $I1360, $S1359, "multi"
+    unless $I1360, if_1357_end
+    find_lex $P1361, "$past"
+    $P1362 = $P1361."multi"()
+    $P1362."unshift"("_")
+  if_1357_end:
+.annotate 'line', 485
+    find_lex $P1363, "$past"
+    find_lex $P1364, "$past"
+    unless_null $P1364, vivify_461
+    $P1364 = root_new ['parrot';'Hash']
+    store_lex "$past", $P1364
+  vivify_461:
+    set $P1364["block_past"], $P1363
+.annotate 'line', 486
+    find_lex $P1365, "$/"
+    find_lex $P1366, "$past"
+    $P1365."!make"($P1366)
+.annotate 'line', 487
+    find_lex $P1369, "$/"
+    unless_null $P1369, vivify_462
+    $P1369 = root_new ['parrot';'Hash']
+  vivify_462:
+    set $P1370, $P1369["trait"]
+    unless_null $P1370, vivify_463
+    new $P1370, "Undef"
+  vivify_463:
+    if $P1370, if_1368
+    set $P1367, $P1370
+    goto if_1368_end
+  if_1368:
+.annotate 'line', 488
+    find_lex $P1372, "$/"
+    unless_null $P1372, vivify_464
+    $P1372 = root_new ['parrot';'Hash']
+  vivify_464:
+    set $P1373, $P1372["trait"]
+    unless_null $P1373, vivify_465
+    new $P1373, "Undef"
+  vivify_465:
+    defined $I1374, $P1373
+    unless $I1374, for_undef_466
+    iter $P1371, $P1373
+    new $P1384, 'ExceptionHandler'
+    set_addr $P1384, loop1383_handler
+    $P1384."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1384
+  loop1383_test:
+    unless $P1371, loop1383_done
+    shift $P1375, $P1371
+  loop1383_redo:
+    .const 'Sub' $P1377 = "81_1284728484.24945" 
+    capture_lex $P1377
+    $P1377($P1375)
+  loop1383_next:
+    goto loop1383_test
+  loop1383_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1385, exception, 'type'
+    eq $P1385, .CONTROL_LOOP_NEXT, loop1383_next
+    eq $P1385, .CONTROL_LOOP_REDO, loop1383_redo
+  loop1383_done:
+    pop_eh 
+  for_undef_466:
+.annotate 'line', 487
+    set $P1367, $P1371
+  if_1368_end:
+.annotate 'line', 471
+    .return ($P1367)
+  control_1323:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1344, exception, "payload"
-    .return ($P1344)
+    getattribute $P1386, exception, "payload"
+    .return ($P1386)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1323"  :anon :subid("79_1282324007.53935") :outer("78_1282324007.53935")
-.annotate 'line', 476
-    new $P1325, "Undef"
-    .lex "$name", $P1325
-    find_lex $P1326, "$/"
-    unless_null $P1326, vivify_445
-    $P1326 = root_new ['parrot';'Hash']
-  vivify_445:
-    set $P1327, $P1326["deflongname"]
-    unless_null $P1327, vivify_446
-    $P1327 = root_new ['parrot';'ResizablePMCArray']
-  vivify_446:
-    set $P1328, $P1327[0]
-    unless_null $P1328, vivify_447
-    new $P1328, "Undef"
-  vivify_447:
-    $P1329 = $P1328."ast"()
-    set $S1330, $P1329
-    new $P1331, 'String'
-    set $P1331, $S1330
-    store_lex "$name", $P1331
-.annotate 'line', 477
-    find_lex $P1332, "$past"
-    find_lex $P1333, "$name"
-    $P1334 = $P1332."name"($P1333)
-.annotate 'line', 475
-    .return ($P1334)
+.sub "_block1345"  :anon :subid("80_1284728484.24945") :outer("79_1284728484.24945")
+.annotate 'line', 481
+    new $P1347, "Undef"
+    .lex "$name", $P1347
+    find_lex $P1348, "$/"
+    unless_null $P1348, vivify_456
+    $P1348 = root_new ['parrot';'Hash']
+  vivify_456:
+    set $P1349, $P1348["deflongname"]
+    unless_null $P1349, vivify_457
+    $P1349 = root_new ['parrot';'ResizablePMCArray']
+  vivify_457:
+    set $P1350, $P1349[0]
+    unless_null $P1350, vivify_458
+    new $P1350, "Undef"
+  vivify_458:
+    $P1351 = $P1350."ast"()
+    set $S1352, $P1351
+    new $P1353, 'String'
+    set $P1353, $S1352
+    store_lex "$name", $P1353
+.annotate 'line', 482
+    find_lex $P1354, "$past"
+    find_lex $P1355, "$name"
+    $P1356 = $P1354."name"($P1355)
+.annotate 'line', 480
+    .return ($P1356)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.sub "_block1376"  :anon :subid("81_1284728484.24945") :outer("79_1284728484.24945")
+    .param pmc param_1378
+.annotate 'line', 488
+    .lex "$_", param_1378
+    find_lex $P1379, "$_"
+    $P1380 = $P1379."ast"()
+    find_lex $P1381, "$/"
+    $P1382 = $P1380($P1381)
+    .return ($P1382)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "signature"  :subid("80_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1348
-.annotate 'line', 484
-    .const 'Sub' $P1374 = "82_1282324007.53935" 
-    capture_lex $P1374
-    .const 'Sub' $P1359 = "81_1282324007.53935" 
-    capture_lex $P1359
-    new $P1347, 'ExceptionHandler'
-    set_addr $P1347, control_1346
-    $P1347."handle_types"(.CONTROL_RETURN)
-    push_eh $P1347
-    .lex "self", self
-    .lex "$/", param_1348
-.annotate 'line', 485
-    new $P1349, "Undef"
-    .lex "$BLOCKINIT", $P1349
-    get_global $P1350, "@BLOCK"
-    unless_null $P1350, vivify_450
-    $P1350 = root_new ['parrot';'ResizablePMCArray']
-  vivify_450:
-    set $P1351, $P1350[0]
-    unless_null $P1351, vivify_451
-    $P1351 = root_new ['parrot';'ResizablePMCArray']
-  vivify_451:
-    set $P1352, $P1351[0]
-    unless_null $P1352, vivify_452
-    new $P1352, "Undef"
-  vivify_452:
-    store_lex "$BLOCKINIT", $P1352
-.annotate 'line', 487
-    find_lex $P1354, "$/"
-    unless_null $P1354, vivify_453
-    $P1354 = root_new ['parrot';'Hash']
-  vivify_453:
-    set $P1355, $P1354["parameter"]
-    unless_null $P1355, vivify_454
-    new $P1355, "Undef"
-  vivify_454:
-    defined $I1356, $P1355
-    unless $I1356, for_undef_455
-    iter $P1353, $P1355
-    new $P1366, 'ExceptionHandler'
-    set_addr $P1366, loop1365_handler
-    $P1366."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
-    push_eh $P1366
-  loop1365_test:
-    unless $P1353, loop1365_done
-    shift $P1357, $P1353
-  loop1365_redo:
-    .const 'Sub' $P1359 = "81_1282324007.53935" 
-    capture_lex $P1359
-    $P1359($P1357)
-  loop1365_next:
-    goto loop1365_test
-  loop1365_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1367, exception, 'type'
-    eq $P1367, .CONTROL_LOOP_NEXT, loop1365_next
-    eq $P1367, .CONTROL_LOOP_REDO, loop1365_redo
-  loop1365_done:
+.sub "signature"  :subid("82_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_1390
+.annotate 'line', 493
+    .const 'Sub' $P1416 = "84_1284728484.24945" 
+    capture_lex $P1416
+    .const 'Sub' $P1401 = "83_1284728484.24945" 
+    capture_lex $P1401
+    new $P1389, 'ExceptionHandler'
+    set_addr $P1389, control_1388
+    $P1389."handle_types"(.CONTROL_RETURN)
+    push_eh $P1389
+    .lex "self", self
+    .lex "$/", param_1390
+.annotate 'line', 494
+    new $P1391, "Undef"
+    .lex "$BLOCKINIT", $P1391
+    get_global $P1392, "@BLOCK"
+    unless_null $P1392, vivify_467
+    $P1392 = root_new ['parrot';'ResizablePMCArray']
+  vivify_467:
+    set $P1393, $P1392[0]
+    unless_null $P1393, vivify_468
+    $P1393 = root_new ['parrot';'ResizablePMCArray']
+  vivify_468:
+    set $P1394, $P1393[0]
+    unless_null $P1394, vivify_469
+    new $P1394, "Undef"
+  vivify_469:
+    store_lex "$BLOCKINIT", $P1394
+.annotate 'line', 496
+    find_lex $P1396, "$/"
+    unless_null $P1396, vivify_470
+    $P1396 = root_new ['parrot';'Hash']
+  vivify_470:
+    set $P1397, $P1396["parameter"]
+    unless_null $P1397, vivify_471
+    new $P1397, "Undef"
+  vivify_471:
+    defined $I1398, $P1397
+    unless $I1398, for_undef_472
+    iter $P1395, $P1397
+    new $P1408, 'ExceptionHandler'
+    set_addr $P1408, loop1407_handler
+    $P1408."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1408
+  loop1407_test:
+    unless $P1395, loop1407_done
+    shift $P1399, $P1395
+  loop1407_redo:
+    .const 'Sub' $P1401 = "83_1284728484.24945" 
+    capture_lex $P1401
+    $P1401($P1399)
+  loop1407_next:
+    goto loop1407_test
+  loop1407_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1409, exception, 'type'
+    eq $P1409, .CONTROL_LOOP_NEXT, loop1407_next
+    eq $P1409, .CONTROL_LOOP_REDO, loop1407_redo
+  loop1407_done:
     pop_eh 
-  for_undef_455:
-.annotate 'line', 490
-    find_dynamic_lex $P1370, "$*MULTINESS"
-    unless_null $P1370, vivify_456
-    get_hll_global $P1370, "$MULTINESS"
-    unless_null $P1370, vivify_457
+  for_undef_472:
+.annotate 'line', 499
+    find_dynamic_lex $P1412, "$*MULTINESS"
+    unless_null $P1412, vivify_473
+    get_hll_global $P1412, "$MULTINESS"
+    unless_null $P1412, vivify_474
     die "Contextual $*MULTINESS not found"
-  vivify_457:
-  vivify_456:
-    set $S1371, $P1370
-    iseq $I1372, $S1371, "multi"
-    if $I1372, if_1369
-    new $P1368, 'Integer'
-    set $P1368, $I1372
-    goto if_1369_end
-  if_1369:
-    .const 'Sub' $P1374 = "82_1282324007.53935" 
-    capture_lex $P1374
-    $P1400 = $P1374()
-    set $P1368, $P1400
-  if_1369_end:
-.annotate 'line', 484
-    .return ($P1368)
-  control_1346:
+  vivify_474:
+  vivify_473:
+    set $S1413, $P1412
+    iseq $I1414, $S1413, "multi"
+    if $I1414, if_1411
+    new $P1410, 'Integer'
+    set $P1410, $I1414
+    goto if_1411_end
+  if_1411:
+    .const 'Sub' $P1416 = "84_1284728484.24945" 
+    capture_lex $P1416
+    $P1454 = $P1416()
+    set $P1410, $P1454
+  if_1411_end:
+.annotate 'line', 493
+    .return ($P1410)
+  control_1388:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1401, exception, "payload"
-    .return ($P1401)
+    getattribute $P1455, exception, "payload"
+    .return ($P1455)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1358"  :anon :subid("81_1282324007.53935") :outer("80_1282324007.53935")
-    .param pmc param_1360
-.annotate 'line', 487
-    .lex "$_", param_1360
-    find_lex $P1361, "$BLOCKINIT"
-    find_lex $P1362, "$_"
-    $P1363 = $P1362."ast"()
-    $P1364 = $P1361."push"($P1363)
-    .return ($P1364)
+.sub "_block1400"  :anon :subid("83_1284728484.24945") :outer("82_1284728484.24945")
+    .param pmc param_1402
+.annotate 'line', 496
+    .lex "$_", param_1402
+    find_lex $P1403, "$BLOCKINIT"
+    find_lex $P1404, "$_"
+    $P1405 = $P1404."ast"()
+    $P1406 = $P1403."push"($P1405)
+    .return ($P1406)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "_block1373"  :anon :subid("82_1282324007.53935") :outer("80_1282324007.53935")
-.annotate 'line', 490
-    .const 'Sub' $P1383 = "83_1282324007.53935" 
-    capture_lex $P1383
-.annotate 'line', 491
-    $P1375 = root_new ['parrot';'ResizablePMCArray']
-    .lex "@params", $P1375
-.annotate 'line', 490
-    find_lex $P1376, "@params"
-.annotate 'line', 492
-    find_lex $P1378, "$BLOCKINIT"
-    $P1379 = $P1378."list"()
-    defined $I1380, $P1379
-    unless $I1380, for_undef_458
-    iter $P1377, $P1379
-    new $P1394, 'ExceptionHandler'
-    set_addr $P1394, loop1393_handler
-    $P1394."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
-    push_eh $P1394
-  loop1393_test:
-    unless $P1377, loop1393_done
-    shift $P1381, $P1377
-  loop1393_redo:
-    .const 'Sub' $P1383 = "83_1282324007.53935" 
-    capture_lex $P1383
-    $P1383($P1381)
-  loop1393_next:
-    goto loop1393_test
-  loop1393_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1395, exception, 'type'
-    eq $P1395, .CONTROL_LOOP_NEXT, loop1393_next
-    eq $P1395, .CONTROL_LOOP_REDO, loop1393_redo
-  loop1393_done:
+.sub "_block1415"  :anon :subid("84_1284728484.24945") :outer("82_1284728484.24945")
+.annotate 'line', 499
+    .const 'Sub' $P1425 = "85_1284728484.24945" 
+    capture_lex $P1425
+.annotate 'line', 500
+    $P1417 = root_new ['parrot';'ResizablePMCArray']
+    .lex "@params", $P1417
+.annotate 'line', 499
+    find_lex $P1418, "@params"
+.annotate 'line', 501
+    find_lex $P1420, "$BLOCKINIT"
+    $P1421 = $P1420."list"()
+    defined $I1422, $P1421
+    unless $I1422, for_undef_475
+    iter $P1419, $P1421
+    new $P1448, 'ExceptionHandler'
+    set_addr $P1448, loop1447_handler
+    $P1448."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1448
+  loop1447_test:
+    unless $P1419, loop1447_done
+    shift $P1423, $P1419
+  loop1447_redo:
+    .const 'Sub' $P1425 = "85_1284728484.24945" 
+    capture_lex $P1425
+    $P1425($P1423)
+  loop1447_next:
+    goto loop1447_test
+  loop1447_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1449, exception, 'type'
+    eq $P1449, .CONTROL_LOOP_NEXT, loop1447_next
+    eq $P1449, .CONTROL_LOOP_REDO, loop1447_redo
+  loop1447_done:
     pop_eh 
-  for_undef_458:
-.annotate 'line', 495
-    get_global $P1396, "@BLOCK"
-    unless_null $P1396, vivify_459
-    $P1396 = root_new ['parrot';'ResizablePMCArray']
-  vivify_459:
-    set $P1397, $P1396[0]
-    unless_null $P1397, vivify_460
-    new $P1397, "Undef"
-  vivify_460:
-    find_lex $P1398, "@params"
-    $P1399 = $P1397."multi"($P1398)
-.annotate 'line', 490
-    .return ($P1399)
+  for_undef_475:
+.annotate 'line', 505
+    get_global $P1450, "@BLOCK"
+    unless_null $P1450, vivify_476
+    $P1450 = root_new ['parrot';'ResizablePMCArray']
+  vivify_476:
+    set $P1451, $P1450[0]
+    unless_null $P1451, vivify_477
+    new $P1451, "Undef"
+  vivify_477:
+    find_lex $P1452, "@params"
+    $P1453 = $P1451."multi"($P1452)
+.annotate 'line', 499
+    .return ($P1453)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1382"  :anon :subid("83_1282324007.53935") :outer("82_1282324007.53935")
-    .param pmc param_1384
-.annotate 'line', 492
-    .lex "$_", param_1384
-.annotate 'line', 493
-    find_lex $P1385, "@params"
-    find_lex $P1387, "$_"
-    $P1388 = $P1387."multitype"()
-    set $P1386, $P1388
-    defined $I1390, $P1386
-    if $I1390, default_1389
-    new $P1391, "String"
-    assign $P1391, "_"
-    set $P1386, $P1391
-  default_1389:
-    $P1392 = $P1385."push"($P1386)
-.annotate 'line', 492
-    .return ($P1392)
+.sub "_block1424"  :anon :subid("85_1284728484.24945") :outer("84_1284728484.24945")
+    .param pmc param_1426
+.annotate 'line', 501
+    .lex "$_", param_1426
+.annotate 'line', 503
+    find_lex $P1433, "$_"
+    $P1434 = $P1433."slurpy"()
+    unless $P1434, unless_1432
+    set $P1431, $P1434
+    goto unless_1432_end
+  unless_1432:
+    find_lex $P1435, "$_"
+    $P1436 = $P1435."named"()
+    set $P1431, $P1436
+  unless_1432_end:
+    unless $P1431, unless_1430
+    set $P1429, $P1431
+    goto unless_1430_end
+  unless_1430:
+    find_lex $P1437, "$_"
+    $P1438 = $P1437."viviself"()
+    set $P1429, $P1438
+  unless_1430_end:
+    unless $P1429, unless_1428
+    set $P1427, $P1429
+    goto unless_1428_end
+  unless_1428:
+.annotate 'line', 502
+    find_lex $P1439, "@params"
+    find_lex $P1441, "$_"
+    $P1442 = $P1441."multitype"()
+    set $P1440, $P1442
+    defined $I1444, $P1440
+    if $I1444, default_1443
+    new $P1445, "String"
+    assign $P1445, "_"
+    set $P1440, $P1445
+  default_1443:
+    $P1446 = $P1439."push"($P1440)
+    set $P1427, $P1446
+  unless_1428_end:
+.annotate 'line', 501
+    .return ($P1427)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "parameter"  :subid("84_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1405
-.annotate 'line', 499
-    .const 'Sub' $P1486 = "85_1282324007.53935" 
-    capture_lex $P1486
-    new $P1404, 'ExceptionHandler'
-    set_addr $P1404, control_1403
-    $P1404."handle_types"(.CONTROL_RETURN)
-    push_eh $P1404
-    .lex "self", self
-    .lex "$/", param_1405
-.annotate 'line', 500
-    new $P1406, "Undef"
-    .lex "$quant", $P1406
-.annotate 'line', 501
-    new $P1407, "Undef"
-    .lex "$past", $P1407
-.annotate 'line', 500
-    find_lex $P1408, "$/"
-    unless_null $P1408, vivify_461
-    $P1408 = root_new ['parrot';'Hash']
-  vivify_461:
-    set $P1409, $P1408["quant"]
-    unless_null $P1409, vivify_462
-    new $P1409, "Undef"
-  vivify_462:
-    store_lex "$quant", $P1409
-    find_lex $P1410, "$past"
-.annotate 'line', 502
-    find_lex $P1412, "$/"
-    unless_null $P1412, vivify_463
-    $P1412 = root_new ['parrot';'Hash']
-  vivify_463:
-    set $P1413, $P1412["named_param"]
-    unless_null $P1413, vivify_464
-    new $P1413, "Undef"
-  vivify_464:
-    if $P1413, if_1411
+.sub "parameter"  :subid("86_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_1459
 .annotate 'line', 509
-    find_lex $P1427, "$/"
-    unless_null $P1427, vivify_465
-    $P1427 = root_new ['parrot';'Hash']
-  vivify_465:
-    set $P1428, $P1427["param_var"]
-    unless_null $P1428, vivify_466
-    new $P1428, "Undef"
-  vivify_466:
-    $P1429 = $P1428."ast"()
-    store_lex "$past", $P1429
+    .const 'Sub' $P1540 = "87_1284728484.24945" 
+    capture_lex $P1540
+    new $P1458, 'ExceptionHandler'
+    set_addr $P1458, control_1457
+    $P1458."handle_types"(.CONTROL_RETURN)
+    push_eh $P1458
+    .lex "self", self
+    .lex "$/", param_1459
 .annotate 'line', 510
-    find_lex $P1431, "$quant"
-    set $S1432, $P1431
-    iseq $I1433, $S1432, "*"
-    if $I1433, if_1430
-.annotate 'line', 514
-    find_lex $P1442, "$quant"
-    set $S1443, $P1442
-    iseq $I1444, $S1443, "?"
-    unless $I1444, if_1441_end
-.annotate 'line', 515
-    find_lex $P1445, "$past"
-    find_lex $P1446, "$/"
-    unless_null $P1446, vivify_467
-    $P1446 = root_new ['parrot';'Hash']
-  vivify_467:
-    set $P1447, $P1446["param_var"]
-    unless_null $P1447, vivify_468
-    $P1447 = root_new ['parrot';'Hash']
-  vivify_468:
-    set $P1448, $P1447["sigil"]
-    unless_null $P1448, vivify_469
-    new $P1448, "Undef"
-  vivify_469:
-    $P1449 = "vivitype"($P1448)
-    $P1445."viviself"($P1449)
-  if_1441_end:
-.annotate 'line', 514
-    goto if_1430_end
-  if_1430:
+    new $P1460, "Undef"
+    .lex "$quant", $P1460
 .annotate 'line', 511
-    find_lex $P1434, "$past"
-    $P1434."slurpy"(1)
-.annotate 'line', 512
-    find_lex $P1435, "$past"
-    find_lex $P1436, "$/"
-    unless_null $P1436, vivify_470
-    $P1436 = root_new ['parrot';'Hash']
-  vivify_470:
-    set $P1437, $P1436["param_var"]
-    unless_null $P1437, vivify_471
-    $P1437 = root_new ['parrot';'Hash']
-  vivify_471:
-    set $P1438, $P1437["sigil"]
-    unless_null $P1438, vivify_472
-    new $P1438, "Undef"
-  vivify_472:
-    set $S1439, $P1438
-    iseq $I1440, $S1439, "%"
-    $P1435."named"($I1440)
-  if_1430_end:
-.annotate 'line', 508
-    goto if_1411_end
-  if_1411:
-.annotate 'line', 503
-    find_lex $P1414, "$/"
-    unless_null $P1414, vivify_473
-    $P1414 = root_new ['parrot';'Hash']
-  vivify_473:
-    set $P1415, $P1414["named_param"]
-    unless_null $P1415, vivify_474
-    new $P1415, "Undef"
-  vivify_474:
-    $P1416 = $P1415."ast"()
-    store_lex "$past", $P1416
-.annotate 'line', 504
-    find_lex $P1418, "$quant"
-    set $S1419, $P1418
-    isne $I1420, $S1419, "!"
-    unless $I1420, if_1417_end
-.annotate 'line', 505
-    find_lex $P1421, "$past"
-    find_lex $P1422, "$/"
-    unless_null $P1422, vivify_475
-    $P1422 = root_new ['parrot';'Hash']
-  vivify_475:
-    set $P1423, $P1422["named_param"]
-    unless_null $P1423, vivify_476
-    $P1423 = root_new ['parrot';'Hash']
-  vivify_476:
-    set $P1424, $P1423["param_var"]
-    unless_null $P1424, vivify_477
-    $P1424 = root_new ['parrot';'Hash']
-  vivify_477:
-    set $P1425, $P1424["sigil"]
-    unless_null $P1425, vivify_478
-    new $P1425, "Undef"
+    new $P1461, "Undef"
+    .lex "$past", $P1461
+.annotate 'line', 510
+    find_lex $P1462, "$/"
+    unless_null $P1462, vivify_478
+    $P1462 = root_new ['parrot';'Hash']
   vivify_478:
-    $P1426 = "vivitype"($P1425)
-    $P1421."viviself"($P1426)
-  if_1417_end:
-  if_1411_end:
-.annotate 'line', 518
-    find_lex $P1451, "$/"
-    unless_null $P1451, vivify_479
-    $P1451 = root_new ['parrot';'Hash']
+    set $P1463, $P1462["quant"]
+    unless_null $P1463, vivify_479
+    new $P1463, "Undef"
   vivify_479:
-    set $P1452, $P1451["default_value"]
-    unless_null $P1452, vivify_480
-    new $P1452, "Undef"
-  vivify_480:
-    unless $P1452, if_1450_end
-.annotate 'line', 519
-    find_lex $P1454, "$quant"
-    set $S1455, $P1454
-    iseq $I1456, $S1455, "*"
-    unless $I1456, if_1453_end
-.annotate 'line', 520
-    find_lex $P1457, "$/"
-    $P1458 = $P1457."CURSOR"()
-    $P1458."panic"("Can't put default on slurpy parameter")
-  if_1453_end:
-.annotate 'line', 522
-    find_lex $P1460, "$quant"
-    set $S1461, $P1460
-    iseq $I1462, $S1461, "!"
-    unless $I1462, if_1459_end
-.annotate 'line', 523
-    find_lex $P1463, "$/"
-    $P1464 = $P1463."CURSOR"()
-    $P1464."panic"("Can't put default on required parameter")
-  if_1459_end:
-.annotate 'line', 525
-    find_lex $P1465, "$past"
+    store_lex "$quant", $P1463
+    find_lex $P1464, "$past"
+.annotate 'line', 512
     find_lex $P1466, "$/"
-    unless_null $P1466, vivify_481
+    unless_null $P1466, vivify_480
     $P1466 = root_new ['parrot';'Hash']
+  vivify_480:
+    set $P1467, $P1466["named_param"]
+    unless_null $P1467, vivify_481
+    new $P1467, "Undef"
   vivify_481:
-    set $P1467, $P1466["default_value"]
-    unless_null $P1467, vivify_482
-    $P1467 = root_new ['parrot';'ResizablePMCArray']
+    if $P1467, if_1465
+.annotate 'line', 519
+    find_lex $P1481, "$/"
+    unless_null $P1481, vivify_482
+    $P1481 = root_new ['parrot';'Hash']
   vivify_482:
-    set $P1468, $P1467[0]
-    unless_null $P1468, vivify_483
-    $P1468 = root_new ['parrot';'Hash']
+    set $P1482, $P1481["param_var"]
+    unless_null $P1482, vivify_483
+    new $P1482, "Undef"
   vivify_483:
-    set $P1469, $P1468["EXPR"]
-    unless_null $P1469, vivify_484
-    new $P1469, "Undef"
+    $P1483 = $P1482."ast"()
+    store_lex "$past", $P1483
+.annotate 'line', 520
+    find_lex $P1485, "$quant"
+    set $S1486, $P1485
+    iseq $I1487, $S1486, "*"
+    if $I1487, if_1484
+.annotate 'line', 524
+    find_lex $P1496, "$quant"
+    set $S1497, $P1496
+    iseq $I1498, $S1497, "?"
+    unless $I1498, if_1495_end
+.annotate 'line', 525
+    find_lex $P1499, "$past"
+    find_lex $P1500, "$/"
+    unless_null $P1500, vivify_484
+    $P1500 = root_new ['parrot';'Hash']
   vivify_484:
-    $P1470 = $P1469."ast"()
-    $P1465."viviself"($P1470)
-  if_1450_end:
-.annotate 'line', 527
-    find_lex $P1472, "$past"
-    $P1473 = $P1472."viviself"()
-    if $P1473, unless_1471_end
-    get_global $P1474, "@BLOCK"
-    unless_null $P1474, vivify_485
-    $P1474 = root_new ['parrot';'ResizablePMCArray']
+    set $P1501, $P1500["param_var"]
+    unless_null $P1501, vivify_485
+    $P1501 = root_new ['parrot';'Hash']
   vivify_485:
-    set $P1475, $P1474[0]
-    unless_null $P1475, vivify_486
-    new $P1475, "Undef"
+    set $P1502, $P1501["sigil"]
+    unless_null $P1502, vivify_486
+    new $P1502, "Undef"
   vivify_486:
-    get_global $P1476, "@BLOCK"
-    unless_null $P1476, vivify_487
-    $P1476 = root_new ['parrot';'ResizablePMCArray']
+    $P1503 = "vivitype"($P1502)
+    $P1499."viviself"($P1503)
+  if_1495_end:
+.annotate 'line', 524
+    goto if_1484_end
+  if_1484:
+.annotate 'line', 521
+    find_lex $P1488, "$past"
+    $P1488."slurpy"(1)
+.annotate 'line', 522
+    find_lex $P1489, "$past"
+    find_lex $P1490, "$/"
+    unless_null $P1490, vivify_487
+    $P1490 = root_new ['parrot';'Hash']
   vivify_487:
-    set $P1477, $P1476[0]
-    unless_null $P1477, vivify_488
-    new $P1477, "Undef"
+    set $P1491, $P1490["param_var"]
+    unless_null $P1491, vivify_488
+    $P1491 = root_new ['parrot';'Hash']
   vivify_488:
-    $P1478 = $P1477."arity"()
-    set $N1479, $P1478
-    new $P1480, 'Float'
-    set $P1480, $N1479
-    add $P1481, $P1480, 1
-    $P1475."arity"($P1481)
-  unless_1471_end:
-.annotate 'line', 530
-    find_lex $P1483, "$/"
-    unless_null $P1483, vivify_489
-    $P1483 = root_new ['parrot';'Hash']
+    set $P1492, $P1491["sigil"]
+    unless_null $P1492, vivify_489
+    new $P1492, "Undef"
   vivify_489:
-    set $P1484, $P1483["typename"]
-    unless_null $P1484, vivify_490
-    new $P1484, "Undef"
-  vivify_490:
-    unless $P1484, if_1482_end
-    .const 'Sub' $P1486 = "85_1282324007.53935" 
-    capture_lex $P1486
-    $P1486()
-  if_1482_end:
-.annotate 'line', 536
-    find_lex $P1510, "$/"
-    find_lex $P1511, "$past"
-    $P1512 = $P1510."!make"($P1511)
-.annotate 'line', 499
-    .return ($P1512)
-  control_1403:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1513, exception, "payload"
-    .return ($P1513)
-.end
-
-
-.namespace ["NQP";"Actions"]
-.include "except_types.pasm"
-.sub "_block1485"  :anon :subid("85_1282324007.53935") :outer("84_1282324007.53935")
-.annotate 'line', 530
-    .const 'Sub' $P1498 = "86_1282324007.53935" 
-    capture_lex $P1498
-.annotate 'line', 531
-    $P1487 = root_new ['parrot';'ResizablePMCArray']
-    .lex "@multitype", $P1487
-.annotate 'line', 530
-    find_lex $P1488, "@multitype"
-.annotate 'line', 532
-    find_lex $P1490, "$/"
-    unless_null $P1490, vivify_491
-    $P1490 = root_new ['parrot';'Hash']
+    set $S1493, $P1492
+    iseq $I1494, $S1493, "%"
+    $P1489."named"($I1494)
+  if_1484_end:
+.annotate 'line', 518
+    goto if_1465_end
+  if_1465:
+.annotate 'line', 513
+    find_lex $P1468, "$/"
+    unless_null $P1468, vivify_490
+    $P1468 = root_new ['parrot';'Hash']
+  vivify_490:
+    set $P1469, $P1468["named_param"]
+    unless_null $P1469, vivify_491
+    new $P1469, "Undef"
   vivify_491:
-    set $P1491, $P1490["typename"]
-    unless_null $P1491, vivify_492
-    $P1491 = root_new ['parrot';'ResizablePMCArray']
+    $P1470 = $P1469."ast"()
+    store_lex "$past", $P1470
+.annotate 'line', 514
+    find_lex $P1472, "$quant"
+    set $S1473, $P1472
+    isne $I1474, $S1473, "!"
+    unless $I1474, if_1471_end
+.annotate 'line', 515
+    find_lex $P1475, "$past"
+    find_lex $P1476, "$/"
+    unless_null $P1476, vivify_492
+    $P1476 = root_new ['parrot';'Hash']
   vivify_492:
-    set $P1492, $P1491[0]
-    unless_null $P1492, vivify_493
-    $P1492 = root_new ['parrot';'Hash']
+    set $P1477, $P1476["named_param"]
+    unless_null $P1477, vivify_493
+    $P1477 = root_new ['parrot';'Hash']
   vivify_493:
-    set $P1493, $P1492["name"]
-    unless_null $P1493, vivify_494
-    $P1493 = root_new ['parrot';'Hash']
+    set $P1478, $P1477["param_var"]
+    unless_null $P1478, vivify_494
+    $P1478 = root_new ['parrot';'Hash']
   vivify_494:
-    set $P1494, $P1493["identifier"]
-    unless_null $P1494, vivify_495
-    new $P1494, "Undef"
+    set $P1479, $P1478["sigil"]
+    unless_null $P1479, vivify_495
+    new $P1479, "Undef"
   vivify_495:
-    defined $I1495, $P1494
-    unless $I1495, for_undef_496
-    iter $P1489, $P1494
-    new $P1505, 'ExceptionHandler'
-    set_addr $P1505, loop1504_handler
-    $P1505."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
-    push_eh $P1505
-  loop1504_test:
-    unless $P1489, loop1504_done
-    shift $P1496, $P1489
-  loop1504_redo:
-    .const 'Sub' $P1498 = "86_1282324007.53935" 
-    capture_lex $P1498
-    $P1498($P1496)
-  loop1504_next:
-    goto loop1504_test
-  loop1504_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1506, exception, 'type'
-    eq $P1506, .CONTROL_LOOP_NEXT, loop1504_next
-    eq $P1506, .CONTROL_LOOP_REDO, loop1504_redo
-  loop1504_done:
-    pop_eh 
-  for_undef_496:
-.annotate 'line', 533
-    find_lex $P1507, "$past"
-    find_lex $P1508, "@multitype"
-    $P1509 = $P1507."multitype"($P1508)
+    $P1480 = "vivitype"($P1479)
+    $P1475."viviself"($P1480)
+  if_1471_end:
+  if_1465_end:
+.annotate 'line', 528
+    find_lex $P1505, "$/"
+    unless_null $P1505, vivify_496
+    $P1505 = root_new ['parrot';'Hash']
+  vivify_496:
+    set $P1506, $P1505["default_value"]
+    unless_null $P1506, vivify_497
+    new $P1506, "Undef"
+  vivify_497:
+    unless $P1506, if_1504_end
+.annotate 'line', 529
+    find_lex $P1508, "$quant"
+    set $S1509, $P1508
+    iseq $I1510, $S1509, "*"
+    unless $I1510, if_1507_end
 .annotate 'line', 530
-    .return ($P1509)
-.end
-
-
-.namespace ["NQP";"Actions"]
-.sub "_block1497"  :anon :subid("86_1282324007.53935") :outer("85_1282324007.53935")
-    .param pmc param_1499
+    find_lex $P1511, "$/"
+    $P1512 = $P1511."CURSOR"()
+    $P1512."panic"("Can't put default on slurpy parameter")
+  if_1507_end:
 .annotate 'line', 532
-    .lex "$_", param_1499
-    find_lex $P1500, "@multitype"
-    find_lex $P1501, "$_"
-    set $S1502, $P1501
-    $P1503 = $P1500."push"($S1502)
-    .return ($P1503)
+    find_lex $P1514, "$quant"
+    set $S1515, $P1514
+    iseq $I1516, $S1515, "!"
+    unless $I1516, if_1513_end
+.annotate 'line', 533
+    find_lex $P1517, "$/"
+    $P1518 = $P1517."CURSOR"()
+    $P1518."panic"("Can't put default on required parameter")
+  if_1513_end:
+.annotate 'line', 535
+    find_lex $P1519, "$past"
+    find_lex $P1520, "$/"
+    unless_null $P1520, vivify_498
+    $P1520 = root_new ['parrot';'Hash']
+  vivify_498:
+    set $P1521, $P1520["default_value"]
+    unless_null $P1521, vivify_499
+    $P1521 = root_new ['parrot';'ResizablePMCArray']
+  vivify_499:
+    set $P1522, $P1521[0]
+    unless_null $P1522, vivify_500
+    $P1522 = root_new ['parrot';'Hash']
+  vivify_500:
+    set $P1523, $P1522["EXPR"]
+    unless_null $P1523, vivify_501
+    new $P1523, "Undef"
+  vivify_501:
+    $P1524 = $P1523."ast"()
+    $P1519."viviself"($P1524)
+  if_1504_end:
+.annotate 'line', 537
+    find_lex $P1526, "$past"
+    $P1527 = $P1526."viviself"()
+    if $P1527, unless_1525_end
+    get_global $P1528, "@BLOCK"
+    unless_null $P1528, vivify_502
+    $P1528 = root_new ['parrot';'ResizablePMCArray']
+  vivify_502:
+    set $P1529, $P1528[0]
+    unless_null $P1529, vivify_503
+    new $P1529, "Undef"
+  vivify_503:
+    get_global $P1530, "@BLOCK"
+    unless_null $P1530, vivify_504
+    $P1530 = root_new ['parrot';'ResizablePMCArray']
+  vivify_504:
+    set $P1531, $P1530[0]
+    unless_null $P1531, vivify_505
+    new $P1531, "Undef"
+  vivify_505:
+    $P1532 = $P1531."arity"()
+    set $N1533, $P1532
+    new $P1534, 'Float'
+    set $P1534, $N1533
+    add $P1535, $P1534, 1
+    $P1529."arity"($P1535)
+  unless_1525_end:
+.annotate 'line', 540
+    find_lex $P1537, "$/"
+    unless_null $P1537, vivify_506
+    $P1537 = root_new ['parrot';'Hash']
+  vivify_506:
+    set $P1538, $P1537["typename"]
+    unless_null $P1538, vivify_507
+    new $P1538, "Undef"
+  vivify_507:
+    unless $P1538, if_1536_end
+    .const 'Sub' $P1540 = "87_1284728484.24945" 
+    capture_lex $P1540
+    $P1540()
+  if_1536_end:
+.annotate 'line', 546
+    find_lex $P1564, "$/"
+    find_lex $P1565, "$past"
+    $P1566 = $P1564."!make"($P1565)
+.annotate 'line', 509
+    .return ($P1566)
+  control_1457:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1567, exception, "payload"
+    .return ($P1567)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "param_var"  :subid("87_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1517
-.annotate 'line', 539
-    new $P1516, 'ExceptionHandler'
-    set_addr $P1516, control_1515
-    $P1516."handle_types"(.CONTROL_RETURN)
-    push_eh $P1516
-    .lex "self", self
-    .lex "$/", param_1517
+.sub "_block1539"  :anon :subid("87_1284728484.24945") :outer("86_1284728484.24945")
 .annotate 'line', 540
-    new $P1518, "Undef"
-    .lex "$name", $P1518
+    .const 'Sub' $P1552 = "88_1284728484.24945" 
+    capture_lex $P1552
 .annotate 'line', 541
-    new $P1519, "Undef"
-    .lex "$past", $P1519
+    $P1541 = root_new ['parrot';'ResizablePMCArray']
+    .lex "@multitype", $P1541
 .annotate 'line', 540
-    find_lex $P1520, "$/"
-    set $S1521, $P1520
-    new $P1522, 'String'
-    set $P1522, $S1521
-    store_lex "$name", $P1522
-.annotate 'line', 541
-    get_hll_global $P1523, ["PAST"], "Var"
-    find_lex $P1524, "$name"
-    find_lex $P1525, "$/"
-    $P1526 = $P1523."new"($P1524 :named("name"), "parameter" :named("scope"), 1 :named("isdecl"), $P1525 :named("node"))
-    store_lex "$past", $P1526
+    find_lex $P1542, "@multitype"
+.annotate 'line', 542
+    find_lex $P1544, "$/"
+    unless_null $P1544, vivify_508
+    $P1544 = root_new ['parrot';'Hash']
+  vivify_508:
+    set $P1545, $P1544["typename"]
+    unless_null $P1545, vivify_509
+    $P1545 = root_new ['parrot';'ResizablePMCArray']
+  vivify_509:
+    set $P1546, $P1545[0]
+    unless_null $P1546, vivify_510
+    $P1546 = root_new ['parrot';'Hash']
+  vivify_510:
+    set $P1547, $P1546["name"]
+    unless_null $P1547, vivify_511
+    $P1547 = root_new ['parrot';'Hash']
+  vivify_511:
+    set $P1548, $P1547["identifier"]
+    unless_null $P1548, vivify_512
+    new $P1548, "Undef"
+  vivify_512:
+    defined $I1549, $P1548
+    unless $I1549, for_undef_513
+    iter $P1543, $P1548
+    new $P1559, 'ExceptionHandler'
+    set_addr $P1559, loop1558_handler
+    $P1559."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1559
+  loop1558_test:
+    unless $P1543, loop1558_done
+    shift $P1550, $P1543
+  loop1558_redo:
+    .const 'Sub' $P1552 = "88_1284728484.24945" 
+    capture_lex $P1552
+    $P1552($P1550)
+  loop1558_next:
+    goto loop1558_test
+  loop1558_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1560, exception, 'type'
+    eq $P1560, .CONTROL_LOOP_NEXT, loop1558_next
+    eq $P1560, .CONTROL_LOOP_REDO, loop1558_redo
+  loop1558_done:
+    pop_eh 
+  for_undef_513:
 .annotate 'line', 543
-    get_global $P1527, "@BLOCK"
-    unless_null $P1527, vivify_497
-    $P1527 = root_new ['parrot';'ResizablePMCArray']
-  vivify_497:
-    set $P1528, $P1527[0]
-    unless_null $P1528, vivify_498
-    new $P1528, "Undef"
-  vivify_498:
-    find_lex $P1529, "$name"
-    $P1528."symbol"($P1529, "lexical" :named("scope"))
-.annotate 'line', 544
-    find_lex $P1530, "$/"
-    find_lex $P1531, "$past"
-    $P1532 = $P1530."!make"($P1531)
-.annotate 'line', 539
-    .return ($P1532)
-  control_1515:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1533, exception, "payload"
-    .return ($P1533)
+    find_lex $P1561, "$past"
+    find_lex $P1562, "@multitype"
+    $P1563 = $P1561."multitype"($P1562)
+.annotate 'line', 540
+    .return ($P1563)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.sub "_block1551"  :anon :subid("88_1284728484.24945") :outer("87_1284728484.24945")
+    .param pmc param_1553
+.annotate 'line', 542
+    .lex "$_", param_1553
+    find_lex $P1554, "@multitype"
+    find_lex $P1555, "$_"
+    set $S1556, $P1555
+    $P1557 = $P1554."push"($S1556)
+    .return ($P1557)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "named_param"  :subid("88_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1537
-.annotate 'line', 547
-    new $P1536, 'ExceptionHandler'
-    set_addr $P1536, control_1535
-    $P1536."handle_types"(.CONTROL_RETURN)
-    push_eh $P1536
-    .lex "self", self
-    .lex "$/", param_1537
-.annotate 'line', 548
-    new $P1538, "Undef"
-    .lex "$past", $P1538
-    find_lex $P1539, "$/"
-    unless_null $P1539, vivify_499
-    $P1539 = root_new ['parrot';'Hash']
-  vivify_499:
-    set $P1540, $P1539["param_var"]
-    unless_null $P1540, vivify_500
-    new $P1540, "Undef"
-  vivify_500:
-    $P1541 = $P1540."ast"()
-    store_lex "$past", $P1541
+.sub "param_var"  :subid("89_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_1571
 .annotate 'line', 549
-    find_lex $P1542, "$past"
-    find_lex $P1543, "$/"
-    unless_null $P1543, vivify_501
-    $P1543 = root_new ['parrot';'Hash']
-  vivify_501:
-    set $P1544, $P1543["param_var"]
-    unless_null $P1544, vivify_502
-    $P1544 = root_new ['parrot';'Hash']
-  vivify_502:
-    set $P1545, $P1544["name"]
-    unless_null $P1545, vivify_503
-    new $P1545, "Undef"
-  vivify_503:
-    set $S1546, $P1545
-    $P1542."named"($S1546)
+    new $P1570, 'ExceptionHandler'
+    set_addr $P1570, control_1569
+    $P1570."handle_types"(.CONTROL_RETURN)
+    push_eh $P1570
+    .lex "self", self
+    .lex "$/", param_1571
 .annotate 'line', 550
-    find_lex $P1547, "$/"
-    find_lex $P1548, "$past"
-    $P1549 = $P1547."!make"($P1548)
-.annotate 'line', 547
-    .return ($P1549)
-  control_1535:
+    new $P1572, "Undef"
+    .lex "$name", $P1572
+.annotate 'line', 551
+    new $P1573, "Undef"
+    .lex "$past", $P1573
+.annotate 'line', 550
+    find_lex $P1574, "$/"
+    set $S1575, $P1574
+    new $P1576, 'String'
+    set $P1576, $S1575
+    store_lex "$name", $P1576
+.annotate 'line', 551
+    get_hll_global $P1577, ["PAST"], "Var"
+    find_lex $P1578, "$name"
+    find_lex $P1579, "$/"
+    $P1580 = $P1577."new"($P1578 :named("name"), "parameter" :named("scope"), 1 :named("isdecl"), $P1579 :named("node"))
+    store_lex "$past", $P1580
+.annotate 'line', 553
+    get_global $P1581, "@BLOCK"
+    unless_null $P1581, vivify_514
+    $P1581 = root_new ['parrot';'ResizablePMCArray']
+  vivify_514:
+    set $P1582, $P1581[0]
+    unless_null $P1582, vivify_515
+    new $P1582, "Undef"
+  vivify_515:
+    find_lex $P1583, "$name"
+    $P1582."symbol"($P1583, "lexical" :named("scope"))
+.annotate 'line', 554
+    find_lex $P1584, "$/"
+    find_lex $P1585, "$past"
+    $P1586 = $P1584."!make"($P1585)
+.annotate 'line', 549
+    .return ($P1586)
+  control_1569:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1550, exception, "payload"
-    .return ($P1550)
+    getattribute $P1587, exception, "payload"
+    .return ($P1587)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "regex_declarator"  :subid("89_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1554
-    .param pmc param_1555 :optional
-    .param int has_param_1555 :opt_flag
-.annotate 'line', 553
-    .const 'Sub' $P1625 = "91_1282324007.53935" 
-    capture_lex $P1625
-    .const 'Sub' $P1597 = "90_1282324007.53935" 
-    capture_lex $P1597
-    new $P1553, 'ExceptionHandler'
-    set_addr $P1553, control_1552
-    $P1553."handle_types"(.CONTROL_RETURN)
-    push_eh $P1553
-    .lex "self", self
-    .lex "$/", param_1554
-    if has_param_1555, optparam_504
-    new $P1556, "Undef"
-    set param_1555, $P1556
-  optparam_504:
-    .lex "$key", param_1555
-.annotate 'line', 554
-    $P1557 = root_new ['parrot';'ResizablePMCArray']
-    .lex "@MODIFIERS", $P1557
+.sub "named_param"  :subid("90_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_1591
 .annotate 'line', 557
-    new $P1558, "Undef"
-    .lex "$name", $P1558
+    new $P1590, 'ExceptionHandler'
+    set_addr $P1590, control_1589
+    $P1590."handle_types"(.CONTROL_RETURN)
+    push_eh $P1590
+    .lex "self", self
+    .lex "$/", param_1591
 .annotate 'line', 558
-    new $P1559, "Undef"
-    .lex "$past", $P1559
-.annotate 'line', 554
-
-        $P1560 = get_hll_global ['Regex';'P6Regex';'Actions'], '@MODIFIERS'
-    
-    store_lex "@MODIFIERS", $P1560
-.annotate 'line', 557
-    find_lex $P1561, "$/"
-    unless_null $P1561, vivify_505
-    $P1561 = root_new ['parrot';'Hash']
-  vivify_505:
-    set $P1562, $P1561["deflongname"]
-    unless_null $P1562, vivify_506
-    new $P1562, "Undef"
-  vivify_506:
-    $P1563 = $P1562."ast"()
-    set $S1564, $P1563
-    new $P1565, 'String'
-    set $P1565, $S1564
-    store_lex "$name", $P1565
-    find_lex $P1566, "$past"
+    new $P1592, "Undef"
+    .lex "$past", $P1592
+    find_lex $P1593, "$/"
+    unless_null $P1593, vivify_516
+    $P1593 = root_new ['parrot';'Hash']
+  vivify_516:
+    set $P1594, $P1593["param_var"]
+    unless_null $P1594, vivify_517
+    new $P1594, "Undef"
+  vivify_517:
+    $P1595 = $P1594."ast"()
+    store_lex "$past", $P1595
 .annotate 'line', 559
-    find_lex $P1568, "$/"
-    unless_null $P1568, vivify_507
-    $P1568 = root_new ['parrot';'Hash']
-  vivify_507:
-    set $P1569, $P1568["proto"]
-    unless_null $P1569, vivify_508
-    new $P1569, "Undef"
-  vivify_508:
-    if $P1569, if_1567
-.annotate 'line', 586
-    find_lex $P1593, "$key"
-    set $S1594, $P1593
-    iseq $I1595, $S1594, "open"
-    if $I1595, if_1592
-.annotate 'line', 599
-    .const 'Sub' $P1625 = "91_1282324007.53935" 
-    capture_lex $P1625
-    $P1625()
-    goto if_1592_end
-  if_1592:
-.annotate 'line', 586
-    .const 'Sub' $P1597 = "90_1282324007.53935" 
-    capture_lex $P1597
-    $P1597()
-  if_1592_end:
-    goto if_1567_end
-  if_1567:
-.annotate 'line', 561
-    get_hll_global $P1570, ["PAST"], "Stmts"
-.annotate 'line', 562
-    get_hll_global $P1571, ["PAST"], "Block"
-    find_lex $P1572, "$name"
-.annotate 'line', 563
-    get_hll_global $P1573, ["PAST"], "Op"
-.annotate 'line', 564
-    get_hll_global $P1574, ["PAST"], "Var"
-    $P1575 = $P1574."new"("self" :named("name"), "register" :named("scope"))
-    find_lex $P1576, "$name"
-    $P1577 = $P1573."new"($P1575, $P1576, "!protoregex" :named("name"), "callmethod" :named("pasttype"))
-.annotate 'line', 563
-    find_lex $P1578, "$/"
-    $P1579 = $P1571."new"($P1577, $P1572 :named("name"), "method" :named("blocktype"), 0 :named("lexical"), $P1578 :named("node"))
-.annotate 'line', 573
-    get_hll_global $P1580, ["PAST"], "Block"
-    new $P1581, "String"
-    assign $P1581, "!PREFIX__"
-    find_lex $P1582, "$name"
-    concat $P1583, $P1581, $P1582
-.annotate 'line', 574
-    get_hll_global $P1584, ["PAST"], "Op"
-.annotate 'line', 575
-    get_hll_global $P1585, ["PAST"], "Var"
-    $P1586 = $P1585."new"("self" :named("name"), "register" :named("scope"))
-    find_lex $P1587, "$name"
-    $P1588 = $P1584."new"($P1586, $P1587, "!PREFIX__!protoregex" :named("name"), "callmethod" :named("pasttype"))
-.annotate 'line', 574
-    find_lex $P1589, "$/"
-    $P1590 = $P1580."new"($P1588, $P1583 :named("name"), "method" :named("blocktype"), 0 :named("lexical"), $P1589 :named("node"))
-.annotate 'line', 573
-    $P1591 = $P1570."new"($P1579, $P1590)
-.annotate 'line', 561
-    store_lex "$past", $P1591
-  if_1567_end:
-.annotate 'line', 613
-    find_lex $P1646, "$/"
-    find_lex $P1647, "$past"
-    $P1648 = $P1646."!make"($P1647)
-.annotate 'line', 553
-    .return ($P1648)
-  control_1552:
+    find_lex $P1596, "$past"
+    find_lex $P1597, "$/"
+    unless_null $P1597, vivify_518
+    $P1597 = root_new ['parrot';'Hash']
+  vivify_518:
+    set $P1598, $P1597["param_var"]
+    unless_null $P1598, vivify_519
+    $P1598 = root_new ['parrot';'Hash']
+  vivify_519:
+    set $P1599, $P1598["name"]
+    unless_null $P1599, vivify_520
+    new $P1599, "Undef"
+  vivify_520:
+    set $S1600, $P1599
+    $P1596."named"($S1600)
+.annotate 'line', 560
+    find_lex $P1601, "$/"
+    find_lex $P1602, "$past"
+    $P1603 = $P1601."!make"($P1602)
+.annotate 'line', 557
+    .return ($P1603)
+  control_1589:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1649, exception, "payload"
-    .return ($P1649)
-.end
-
-
-.namespace ["NQP";"Actions"]
-.sub "_block1624"  :anon :subid("91_1282324007.53935") :outer("89_1282324007.53935")
-.annotate 'line', 600
-    new $P1626, "Undef"
-    .lex "$regex", $P1626
-.annotate 'line', 601
-    get_hll_global $P1627, ["Regex";"P6Regex";"Actions"], "buildsub"
-    find_lex $P1628, "$/"
-    unless_null $P1628, vivify_509
-    $P1628 = root_new ['parrot';'Hash']
-  vivify_509:
-    set $P1629, $P1628["p6regex"]
-    unless_null $P1629, vivify_510
-    new $P1629, "Undef"
-  vivify_510:
-    $P1630 = $P1629."ast"()
-    get_global $P1631, "@BLOCK"
-    $P1632 = $P1631."shift"()
-    $P1633 = $P1627($P1630, $P1632)
-    store_lex "$regex", $P1633
-.annotate 'line', 602
-    find_lex $P1634, "$regex"
-    find_lex $P1635, "$name"
-    $P1634."name"($P1635)
-.annotate 'line', 604
-    get_hll_global $P1636, ["PAST"], "Op"
-.annotate 'line', 606
-    get_hll_global $P1637, ["PAST"], "Var"
-    new $P1638, "ResizablePMCArray"
-    push $P1638, "Regex"
-    $P1639 = $P1637."new"("Method" :named("name"), $P1638 :named("namespace"), "package" :named("scope"))
-    find_lex $P1640, "$regex"
-    $P1641 = $P1636."new"($P1639, $P1640, "callmethod" :named("pasttype"), "new" :named("name"))
-.annotate 'line', 604
-    store_lex "$past", $P1641
-.annotate 'line', 610
-    find_lex $P1642, "$regex"
-    find_lex $P1643, "$past"
-    unless_null $P1643, vivify_511
-    $P1643 = root_new ['parrot';'Hash']
-    store_lex "$past", $P1643
-  vivify_511:
-    set $P1643["sink"], $P1642
-.annotate 'line', 611
-    find_lex $P1644, "@MODIFIERS"
-    $P1645 = $P1644."shift"()
-.annotate 'line', 599
-    .return ($P1645)
+    getattribute $P1604, exception, "payload"
+    .return ($P1604)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "_block1596"  :anon :subid("90_1282324007.53935") :outer("89_1282324007.53935")
-.annotate 'line', 587
-    $P1598 = root_new ['parrot';'Hash']
-    .lex "%h", $P1598
-.annotate 'line', 586
-    find_lex $P1599, "%h"
-.annotate 'line', 588
-    find_lex $P1601, "$/"
-    unless_null $P1601, vivify_512
-    $P1601 = root_new ['parrot';'Hash']
-  vivify_512:
-    set $P1602, $P1601["sym"]
-    unless_null $P1602, vivify_513
-    new $P1602, "Undef"
-  vivify_513:
-    set $S1603, $P1602
-    iseq $I1604, $S1603, "token"
-    unless $I1604, if_1600_end
-    new $P1605, "Integer"
-    assign $P1605, 1
-    find_lex $P1606, "%h"
-    unless_null $P1606, vivify_514
-    $P1606 = root_new ['parrot';'Hash']
-    store_lex "%h", $P1606
-  vivify_514:
-    set $P1606["r"], $P1605
-  if_1600_end:
-.annotate 'line', 589
-    find_lex $P1608, "$/"
-    unless_null $P1608, vivify_515
-    $P1608 = root_new ['parrot';'Hash']
-  vivify_515:
-    set $P1609, $P1608["sym"]
-    unless_null $P1609, vivify_516
-    new $P1609, "Undef"
-  vivify_516:
-    set $S1610, $P1609
-    iseq $I1611, $S1610, "rule"
-    unless $I1611, if_1607_end
-    new $P1612, "Integer"
-    assign $P1612, 1
-    find_lex $P1613, "%h"
-    unless_null $P1613, vivify_517
-    $P1613 = root_new ['parrot';'Hash']
-    store_lex "%h", $P1613
-  vivify_517:
-    set $P1613["r"], $P1612
-    new $P1614, "Integer"
-    assign $P1614, 1
-    find_lex $P1615, "%h"
-    unless_null $P1615, vivify_518
-    $P1615 = root_new ['parrot';'Hash']
-    store_lex "%h", $P1615
-  vivify_518:
-    set $P1615["s"], $P1614
-  if_1607_end:
-.annotate 'line', 590
-    find_lex $P1616, "@MODIFIERS"
-    find_lex $P1617, "%h"
-    $P1616."unshift"($P1617)
-.annotate 'line', 591
-
-            $P0 = find_lex '$name'
-            set_hll_global ['Regex';'P6Regex';'Actions'], '$REGEXNAME', $P0
-        
-.annotate 'line', 595
-    get_global $P1618, "@BLOCK"
-    unless_null $P1618, vivify_519
-    $P1618 = root_new ['parrot';'ResizablePMCArray']
-  vivify_519:
-    set $P1619, $P1618[0]
-    unless_null $P1619, vivify_520
-    new $P1619, "Undef"
-  vivify_520:
-    $P1619."symbol"(unicode:"$\x{a2}", "lexical" :named("scope"))
-.annotate 'line', 596
-    get_global $P1620, "@BLOCK"
-    unless_null $P1620, vivify_521
-    $P1620 = root_new ['parrot';'ResizablePMCArray']
+.sub "trait"  :subid("91_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_1608
+.annotate 'line', 563
+    new $P1607, 'ExceptionHandler'
+    set_addr $P1607, control_1606
+    $P1607."handle_types"(.CONTROL_RETURN)
+    push_eh $P1607
+    .lex "self", self
+    .lex "$/", param_1608
+.annotate 'line', 564
+    find_lex $P1609, "$/"
+    find_lex $P1610, "$/"
+    unless_null $P1610, vivify_521
+    $P1610 = root_new ['parrot';'Hash']
   vivify_521:
-    set $P1621, $P1620[0]
-    unless_null $P1621, vivify_522
-    new $P1621, "Undef"
+    set $P1611, $P1610["trait_mod"]
+    unless_null $P1611, vivify_522
+    new $P1611, "Undef"
   vivify_522:
-    $P1621."symbol"("$/", "lexical" :named("scope"))
-.annotate 'line', 597
-    new $P1622, "Exception"
-    set $P1622['type'], .CONTROL_RETURN
-    new $P1623, "Integer"
-    assign $P1623, 0
-    setattribute $P1622, 'payload', $P1623
-    throw $P1622
-.annotate 'line', 586
-    .return ()
+    $P1612 = $P1611."ast"()
+    $P1613 = $P1609."!make"($P1612)
+.annotate 'line', 563
+    .return ($P1613)
+  control_1606:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1614, exception, "payload"
+    .return ($P1614)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "dotty"  :subid("92_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1653
-.annotate 'line', 617
-    new $P1652, 'ExceptionHandler'
-    set_addr $P1652, control_1651
-    $P1652."handle_types"(.CONTROL_RETURN)
-    push_eh $P1652
-    .lex "self", self
-    .lex "$/", param_1653
-.annotate 'line', 618
-    new $P1654, "Undef"
-    .lex "$past", $P1654
-    find_lex $P1657, "$/"
-    unless_null $P1657, vivify_523
-    $P1657 = root_new ['parrot';'Hash']
+.sub "trait_mod:sym<is>"  :subid("92_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_1618
+.annotate 'line', 567
+    .const 'Sub' $P1638 = "93_1284728484.24945" 
+    capture_lex $P1638
+    new $P1617, 'ExceptionHandler'
+    set_addr $P1617, control_1616
+    $P1617."handle_types"(.CONTROL_RETURN)
+    push_eh $P1617
+    .lex "self", self
+    .lex "$/", param_1618
+.annotate 'line', 568
+    new $P1619, "Undef"
+    .lex "$cpast", $P1619
+    find_lex $P1620, "$/"
+    unless_null $P1620, vivify_523
+    $P1620 = root_new ['parrot';'Hash']
   vivify_523:
-    set $P1658, $P1657["args"]
-    unless_null $P1658, vivify_524
-    new $P1658, "Undef"
+    set $P1621, $P1620["circumfix"]
+    unless_null $P1621, vivify_524
+    $P1621 = root_new ['parrot';'ResizablePMCArray']
   vivify_524:
-    if $P1658, if_1656
-    get_hll_global $P1663, ["PAST"], "Op"
-    find_lex $P1664, "$/"
-    $P1665 = $P1663."new"($P1664 :named("node"))
-    set $P1655, $P1665
-    goto if_1656_end
-  if_1656:
-    find_lex $P1659, "$/"
-    unless_null $P1659, vivify_525
-    $P1659 = root_new ['parrot';'Hash']
+    set $P1622, $P1621[0]
+    unless_null $P1622, vivify_525
+    new $P1622, "Undef"
   vivify_525:
-    set $P1660, $P1659["args"]
-    unless_null $P1660, vivify_526
-    $P1660 = root_new ['parrot';'ResizablePMCArray']
+    $P1623 = $P1622."ast"()
+    store_lex "$cpast", $P1623
+.annotate 'line', 569
+    find_lex $P1626, "$/"
+    unless_null $P1626, vivify_526
+    $P1626 = root_new ['parrot';'Hash']
   vivify_526:
-    set $P1661, $P1660[0]
-    unless_null $P1661, vivify_527
-    new $P1661, "Undef"
+    set $P1627, $P1626["longname"]
+    unless_null $P1627, vivify_527
+    new $P1627, "Undef"
   vivify_527:
-    $P1662 = $P1661."ast"()
-    set $P1655, $P1662
-  if_1656_end:
-    store_lex "$past", $P1655
-.annotate 'line', 619
-    find_lex $P1666, "$past"
-    find_lex $P1669, "$/"
-    unless_null $P1669, vivify_528
-    $P1669 = root_new ['parrot';'Hash']
+    set $S1628, $P1627
+    iseq $I1629, $S1628, "pirflags"
+    if $I1629, if_1625
+.annotate 'line', 575
+    find_lex $P1648, "$/"
+    $P1649 = $P1648."CURSOR"()
+    new $P1650, 'String'
+    set $P1650, "Trait '"
+    find_lex $P1651, "$/"
+    unless_null $P1651, vivify_528
+    $P1651 = root_new ['parrot';'Hash']
   vivify_528:
-    set $P1670, $P1669["quote"]
-    unless_null $P1670, vivify_529
-    new $P1670, "Undef"
+    set $P1652, $P1651["longname"]
+    unless_null $P1652, vivify_529
+    new $P1652, "Undef"
   vivify_529:
-    if $P1670, if_1668
-    find_lex $P1674, "$/"
-    unless_null $P1674, vivify_530
-    $P1674 = root_new ['parrot';'Hash']
-  vivify_530:
-    set $P1675, $P1674["longname"]
-    unless_null $P1675, vivify_531
-    new $P1675, "Undef"
-  vivify_531:
-    set $S1676, $P1675
-    new $P1667, 'String'
-    set $P1667, $S1676
-    goto if_1668_end
-  if_1668:
-    find_lex $P1671, "$/"
-    unless_null $P1671, vivify_532
-    $P1671 = root_new ['parrot';'Hash']
-  vivify_532:
-    set $P1672, $P1671["quote"]
-    unless_null $P1672, vivify_533
-    new $P1672, "Undef"
-  vivify_533:
-    $P1673 = $P1672."ast"()
-    set $P1667, $P1673
-  if_1668_end:
-    $P1666."name"($P1667)
-.annotate 'line', 620
-    find_lex $P1677, "$past"
-    $P1677."pasttype"("callmethod")
-.annotate 'line', 621
-    find_lex $P1678, "$/"
-    find_lex $P1679, "$past"
-    $P1680 = $P1678."!make"($P1679)
-.annotate 'line', 617
-    .return ($P1680)
-  control_1651:
+    concat $P1653, $P1650, $P1652
+    concat $P1654, $P1653, "' not implemented"
+    $P1655 = $P1649."panic"($P1654)
+.annotate 'line', 574
+    set $P1624, $P1655
+.annotate 'line', 569
+    goto if_1625_end
+  if_1625:
+.annotate 'line', 571
+    get_hll_global $P1631, ["PAST"], "Val"
+    find_lex $P1632, "$cpast"
+    $P1633 = $P1631."ACCEPTS"($P1632)
+    if $P1633, unless_1630_end
+.annotate 'line', 570
+    find_lex $P1634, "$/"
+    $P1635 = $P1634."CURSOR"()
+    $P1635."panic"("Trait 'pirflags' requires constant scalar argument")
+  unless_1630_end:
+.annotate 'line', 572
+    find_lex $P1636, "$/"
+    .const 'Sub' $P1638 = "93_1284728484.24945" 
+    newclosure $P1646, $P1638
+    $P1647 = $P1636."!make"($P1646)
+.annotate 'line', 569
+    set $P1624, $P1647
+  if_1625_end:
+.annotate 'line', 567
+    .return ($P1624)
+  control_1616:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1681, exception, "payload"
-    .return ($P1681)
+    getattribute $P1656, exception, "payload"
+    .return ($P1656)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.include "except_types.pasm"
-.sub "term:sym<self>"  :subid("93_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1685
-.annotate 'line', 626
-    new $P1684, 'ExceptionHandler'
-    set_addr $P1684, control_1683
-    $P1684."handle_types"(.CONTROL_RETURN)
-    push_eh $P1684
-    .lex "self", self
-    .lex "$/", param_1685
-.annotate 'line', 627
-    find_lex $P1686, "$/"
-    get_hll_global $P1687, ["PAST"], "Var"
-    $P1688 = $P1687."new"("self" :named("name"))
-    $P1689 = $P1686."!make"($P1688)
-.annotate 'line', 626
-    .return ($P1689)
-  control_1683:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1690, exception, "payload"
-    .return ($P1690)
+.sub "_block1637"  :anon :subid("93_1284728484.24945") :outer("92_1284728484.24945")
+    .param pmc param_1639
+.annotate 'line', 572
+    .lex "$match", param_1639
+    find_lex $P1640, "$match"
+    $P1641 = $P1640."ast"()
+    set $P1642, $P1641["block_past"]
+    unless_null $P1642, vivify_530
+    new $P1642, "Undef"
+  vivify_530:
+    find_lex $P1643, "$cpast"
+    $P1644 = $P1643."value"()
+    $P1645 = $P1642."pirflags"($P1644)
+    .return ($P1645)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<identifier>"  :subid("94_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1694
-.annotate 'line', 630
-    new $P1693, 'ExceptionHandler'
-    set_addr $P1693, control_1692
-    $P1693."handle_types"(.CONTROL_RETURN)
-    push_eh $P1693
-    .lex "self", self
-    .lex "$/", param_1694
-.annotate 'line', 631
-    new $P1695, "Undef"
-    .lex "$past", $P1695
-    find_lex $P1696, "$/"
-    unless_null $P1696, vivify_534
-    $P1696 = root_new ['parrot';'Hash']
+.sub "regex_declarator"  :subid("94_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_1660
+    .param pmc param_1661 :optional
+    .param int has_param_1661 :opt_flag
+.annotate 'line', 579
+    .const 'Sub' $P1731 = "96_1284728484.24945" 
+    capture_lex $P1731
+    .const 'Sub' $P1703 = "95_1284728484.24945" 
+    capture_lex $P1703
+    new $P1659, 'ExceptionHandler'
+    set_addr $P1659, control_1658
+    $P1659."handle_types"(.CONTROL_RETURN)
+    push_eh $P1659
+    .lex "self", self
+    .lex "$/", param_1660
+    if has_param_1661, optparam_531
+    new $P1662, "Undef"
+    set param_1661, $P1662
+  optparam_531:
+    .lex "$key", param_1661
+.annotate 'line', 580
+    $P1663 = root_new ['parrot';'ResizablePMCArray']
+    .lex "@MODIFIERS", $P1663
+.annotate 'line', 583
+    new $P1664, "Undef"
+    .lex "$name", $P1664
+.annotate 'line', 584
+    new $P1665, "Undef"
+    .lex "$past", $P1665
+.annotate 'line', 580
+
+        $P1666 = get_hll_global ['Regex';'P6Regex';'Actions'], '@MODIFIERS'
+    
+    store_lex "@MODIFIERS", $P1666
+.annotate 'line', 583
+    find_lex $P1667, "$/"
+    unless_null $P1667, vivify_532
+    $P1667 = root_new ['parrot';'Hash']
+  vivify_532:
+    set $P1668, $P1667["deflongname"]
+    unless_null $P1668, vivify_533
+    new $P1668, "Undef"
+  vivify_533:
+    $P1669 = $P1668."ast"()
+    set $S1670, $P1669
+    new $P1671, 'String'
+    set $P1671, $S1670
+    store_lex "$name", $P1671
+    find_lex $P1672, "$past"
+.annotate 'line', 585
+    find_lex $P1674, "$/"
+    unless_null $P1674, vivify_534
+    $P1674 = root_new ['parrot';'Hash']
   vivify_534:
-    set $P1697, $P1696["args"]
-    unless_null $P1697, vivify_535
-    new $P1697, "Undef"
+    set $P1675, $P1674["proto"]
+    unless_null $P1675, vivify_535
+    new $P1675, "Undef"
   vivify_535:
-    $P1698 = $P1697."ast"()
-    store_lex "$past", $P1698
-.annotate 'line', 632
-    find_lex $P1699, "$past"
-    find_lex $P1700, "$/"
-    unless_null $P1700, vivify_536
-    $P1700 = root_new ['parrot';'Hash']
-  vivify_536:
-    set $P1701, $P1700["deflongname"]
-    unless_null $P1701, vivify_537
-    new $P1701, "Undef"
-  vivify_537:
-    set $S1702, $P1701
-    $P1699."name"($S1702)
-.annotate 'line', 633
-    find_lex $P1703, "$/"
-    find_lex $P1704, "$past"
-    $P1705 = $P1703."!make"($P1704)
-.annotate 'line', 630
-    .return ($P1705)
-  control_1692:
+    if $P1675, if_1673
+.annotate 'line', 612
+    find_lex $P1699, "$key"
+    set $S1700, $P1699
+    iseq $I1701, $S1700, "open"
+    if $I1701, if_1698
+.annotate 'line', 625
+    .const 'Sub' $P1731 = "96_1284728484.24945" 
+    capture_lex $P1731
+    $P1731()
+    goto if_1698_end
+  if_1698:
+.annotate 'line', 612
+    .const 'Sub' $P1703 = "95_1284728484.24945" 
+    capture_lex $P1703
+    $P1703()
+  if_1698_end:
+    goto if_1673_end
+  if_1673:
+.annotate 'line', 587
+    get_hll_global $P1676, ["PAST"], "Stmts"
+.annotate 'line', 588
+    get_hll_global $P1677, ["PAST"], "Block"
+    find_lex $P1678, "$name"
+.annotate 'line', 589
+    get_hll_global $P1679, ["PAST"], "Op"
+.annotate 'line', 590
+    get_hll_global $P1680, ["PAST"], "Var"
+    $P1681 = $P1680."new"("self" :named("name"), "register" :named("scope"))
+    find_lex $P1682, "$name"
+    $P1683 = $P1679."new"($P1681, $P1682, "!protoregex" :named("name"), "callmethod" :named("pasttype"))
+.annotate 'line', 589
+    find_lex $P1684, "$/"
+    $P1685 = $P1677."new"($P1683, $P1678 :named("name"), "method" :named("blocktype"), 0 :named("lexical"), $P1684 :named("node"))
+.annotate 'line', 599
+    get_hll_global $P1686, ["PAST"], "Block"
+    new $P1687, "String"
+    assign $P1687, "!PREFIX__"
+    find_lex $P1688, "$name"
+    concat $P1689, $P1687, $P1688
+.annotate 'line', 600
+    get_hll_global $P1690, ["PAST"], "Op"
+.annotate 'line', 601
+    get_hll_global $P1691, ["PAST"], "Var"
+    $P1692 = $P1691."new"("self" :named("name"), "register" :named("scope"))
+    find_lex $P1693, "$name"
+    $P1694 = $P1690."new"($P1692, $P1693, "!PREFIX__!protoregex" :named("name"), "callmethod" :named("pasttype"))
+.annotate 'line', 600
+    find_lex $P1695, "$/"
+    $P1696 = $P1686."new"($P1694, $P1689 :named("name"), "method" :named("blocktype"), 0 :named("lexical"), $P1695 :named("node"))
+.annotate 'line', 599
+    $P1697 = $P1676."new"($P1685, $P1696)
+.annotate 'line', 587
+    store_lex "$past", $P1697
+  if_1673_end:
+.annotate 'line', 639
+    find_lex $P1752, "$/"
+    find_lex $P1753, "$past"
+    $P1754 = $P1752."!make"($P1753)
+.annotate 'line', 579
+    .return ($P1754)
+  control_1658:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1706, exception, "payload"
-    .return ($P1706)
+    getattribute $P1755, exception, "payload"
+    .return ($P1755)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.include "except_types.pasm"
-.sub "term:sym<name>"  :subid("95_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1710
+.sub "_block1730"  :anon :subid("96_1284728484.24945") :outer("94_1284728484.24945")
+.annotate 'line', 626
+    new $P1732, "Undef"
+    .lex "$regex", $P1732
+.annotate 'line', 627
+    get_hll_global $P1733, ["Regex";"P6Regex";"Actions"], "buildsub"
+    find_lex $P1734, "$/"
+    unless_null $P1734, vivify_536
+    $P1734 = root_new ['parrot';'Hash']
+  vivify_536:
+    set $P1735, $P1734["p6regex"]
+    unless_null $P1735, vivify_537
+    new $P1735, "Undef"
+  vivify_537:
+    $P1736 = $P1735."ast"()
+    get_global $P1737, "@BLOCK"
+    $P1738 = $P1737."shift"()
+    $P1739 = $P1733($P1736, $P1738)
+    store_lex "$regex", $P1739
+.annotate 'line', 628
+    find_lex $P1740, "$regex"
+    find_lex $P1741, "$name"
+    $P1740."name"($P1741)
+.annotate 'line', 630
+    get_hll_global $P1742, ["PAST"], "Op"
+.annotate 'line', 632
+    get_hll_global $P1743, ["PAST"], "Var"
+    new $P1744, "ResizablePMCArray"
+    push $P1744, "Regex"
+    $P1745 = $P1743."new"("Method" :named("name"), $P1744 :named("namespace"), "package" :named("scope"))
+    find_lex $P1746, "$regex"
+    $P1747 = $P1742."new"($P1745, $P1746, "callmethod" :named("pasttype"), "new" :named("name"))
+.annotate 'line', 630
+    store_lex "$past", $P1747
 .annotate 'line', 636
-    new $P1709, 'ExceptionHandler'
-    set_addr $P1709, control_1708
-    $P1709."handle_types"(.CONTROL_RETURN)
-    push_eh $P1709
-    .lex "self", self
-    .lex "$/", param_1710
-.annotate 'line', 637
-    $P1711 = root_new ['parrot';'ResizablePMCArray']
-    .lex "@ns", $P1711
-.annotate 'line', 638
-    new $P1712, "Undef"
-    .lex "$name", $P1712
-.annotate 'line', 640
-    new $P1713, "Undef"
-    .lex "$var", $P1713
-.annotate 'line', 642
-    new $P1714, "Undef"
-    .lex "$past", $P1714
-.annotate 'line', 637
-    find_lex $P1715, "$/"
-    unless_null $P1715, vivify_538
-    $P1715 = root_new ['parrot';'Hash']
+    find_lex $P1748, "$regex"
+    find_lex $P1749, "$past"
+    unless_null $P1749, vivify_538
+    $P1749 = root_new ['parrot';'Hash']
+    store_lex "$past", $P1749
   vivify_538:
-    set $P1716, $P1715["name"]
-    unless_null $P1716, vivify_539
-    $P1716 = root_new ['parrot';'Hash']
+    set $P1749["sink"], $P1748
+.annotate 'line', 637
+    find_lex $P1750, "@MODIFIERS"
+    $P1751 = $P1750."shift"()
+.annotate 'line', 625
+    .return ($P1751)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "_block1702"  :anon :subid("95_1284728484.24945") :outer("94_1284728484.24945")
+.annotate 'line', 613
+    $P1704 = root_new ['parrot';'Hash']
+    .lex "%h", $P1704
+.annotate 'line', 612
+    find_lex $P1705, "%h"
+.annotate 'line', 614
+    find_lex $P1707, "$/"
+    unless_null $P1707, vivify_539
+    $P1707 = root_new ['parrot';'Hash']
   vivify_539:
-    set $P1717, $P1716["identifier"]
-    unless_null $P1717, vivify_540
-    new $P1717, "Undef"
+    set $P1708, $P1707["sym"]
+    unless_null $P1708, vivify_540
+    new $P1708, "Undef"
   vivify_540:
-    clone $P1718, $P1717
-    store_lex "@ns", $P1718
-.annotate 'line', 638
-    find_lex $P1719, "@ns"
-    $P1720 = $P1719."pop"()
-    store_lex "$name", $P1720
-.annotate 'line', 639
-    find_lex $P1724, "@ns"
-    if $P1724, if_1723
-    set $P1722, $P1724
-    goto if_1723_end
-  if_1723:
-    find_lex $P1725, "@ns"
-    unless_null $P1725, vivify_541
-    $P1725 = root_new ['parrot';'ResizablePMCArray']
+    set $S1709, $P1708
+    iseq $I1710, $S1709, "token"
+    unless $I1710, if_1706_end
+    new $P1711, "Integer"
+    assign $P1711, 1
+    find_lex $P1712, "%h"
+    unless_null $P1712, vivify_541
+    $P1712 = root_new ['parrot';'Hash']
+    store_lex "%h", $P1712
   vivify_541:
-    set $P1726, $P1725[0]
-    unless_null $P1726, vivify_542
-    new $P1726, "Undef"
+    set $P1712["r"], $P1711
+  if_1706_end:
+.annotate 'line', 615
+    find_lex $P1714, "$/"
+    unless_null $P1714, vivify_542
+    $P1714 = root_new ['parrot';'Hash']
   vivify_542:
-    set $S1727, $P1726
-    iseq $I1728, $S1727, "GLOBAL"
-    new $P1722, 'Integer'
-    set $P1722, $I1728
-  if_1723_end:
-    unless $P1722, if_1721_end
-    find_lex $P1729, "@ns"
-    $P1729."shift"()
-  if_1721_end:
-.annotate 'line', 641
-    get_hll_global $P1730, ["PAST"], "Var"
-    find_lex $P1731, "$name"
-    set $S1732, $P1731
-    find_lex $P1733, "@ns"
-    $P1734 = $P1730."new"($S1732 :named("name"), $P1733 :named("namespace"), "package" :named("scope"))
-    store_lex "$var", $P1734
-.annotate 'line', 642
-    find_lex $P1735, "$var"
-    store_lex "$past", $P1735
-.annotate 'line', 643
-    find_lex $P1737, "$/"
-    unless_null $P1737, vivify_543
-    $P1737 = root_new ['parrot';'Hash']
+    set $P1715, $P1714["sym"]
+    unless_null $P1715, vivify_543
+    new $P1715, "Undef"
   vivify_543:
-    set $P1738, $P1737["args"]
-    unless_null $P1738, vivify_544
-    new $P1738, "Undef"
+    set $S1716, $P1715
+    iseq $I1717, $S1716, "rule"
+    unless $I1717, if_1713_end
+    new $P1718, "Integer"
+    assign $P1718, 1
+    find_lex $P1719, "%h"
+    unless_null $P1719, vivify_544
+    $P1719 = root_new ['parrot';'Hash']
+    store_lex "%h", $P1719
   vivify_544:
-    unless $P1738, if_1736_end
-.annotate 'line', 644
-    find_lex $P1739, "$/"
-    unless_null $P1739, vivify_545
-    $P1739 = root_new ['parrot';'Hash']
+    set $P1719["r"], $P1718
+    new $P1720, "Integer"
+    assign $P1720, 1
+    find_lex $P1721, "%h"
+    unless_null $P1721, vivify_545
+    $P1721 = root_new ['parrot';'Hash']
+    store_lex "%h", $P1721
   vivify_545:
-    set $P1740, $P1739["args"]
-    unless_null $P1740, vivify_546
-    $P1740 = root_new ['parrot';'ResizablePMCArray']
+    set $P1721["s"], $P1720
+  if_1713_end:
+.annotate 'line', 616
+    find_lex $P1722, "@MODIFIERS"
+    find_lex $P1723, "%h"
+    $P1722."unshift"($P1723)
+.annotate 'line', 617
+
+            $P0 = find_lex '$name'
+            set_hll_global ['Regex';'P6Regex';'Actions'], '$REGEXNAME', $P0
+        
+.annotate 'line', 621
+    get_global $P1724, "@BLOCK"
+    unless_null $P1724, vivify_546
+    $P1724 = root_new ['parrot';'ResizablePMCArray']
   vivify_546:
-    set $P1741, $P1740[0]
-    unless_null $P1741, vivify_547
-    new $P1741, "Undef"
+    set $P1725, $P1724[0]
+    unless_null $P1725, vivify_547
+    new $P1725, "Undef"
   vivify_547:
-    $P1742 = $P1741."ast"()
-    store_lex "$past", $P1742
-.annotate 'line', 645
-    find_lex $P1743, "$past"
-    find_lex $P1744, "$var"
-    $P1743."unshift"($P1744)
-  if_1736_end:
-.annotate 'line', 647
-    find_lex $P1745, "$/"
-    find_lex $P1746, "$past"
-    $P1747 = $P1745."!make"($P1746)
-.annotate 'line', 636
-    .return ($P1747)
-  control_1708:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1748, exception, "payload"
-    .return ($P1748)
+    $P1725."symbol"(unicode:"$\x{a2}", "lexical" :named("scope"))
+.annotate 'line', 622
+    get_global $P1726, "@BLOCK"
+    unless_null $P1726, vivify_548
+    $P1726 = root_new ['parrot';'ResizablePMCArray']
+  vivify_548:
+    set $P1727, $P1726[0]
+    unless_null $P1727, vivify_549
+    new $P1727, "Undef"
+  vivify_549:
+    $P1727."symbol"("$/", "lexical" :named("scope"))
+.annotate 'line', 623
+    new $P1728, "Exception"
+    set $P1728['type'], .CONTROL_RETURN
+    new $P1729, "Integer"
+    assign $P1729, 0
+    setattribute $P1728, 'payload', $P1729
+    throw $P1728
+.annotate 'line', 612
+    .return ()
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<pir::op>"  :subid("96_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1752
-.annotate 'line', 650
-    new $P1751, 'ExceptionHandler'
-    set_addr $P1751, control_1750
-    $P1751."handle_types"(.CONTROL_RETURN)
-    push_eh $P1751
+.sub "dotty"  :subid("97_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_1759
+.annotate 'line', 643
+    new $P1758, 'ExceptionHandler'
+    set_addr $P1758, control_1757
+    $P1758."handle_types"(.CONTROL_RETURN)
+    push_eh $P1758
     .lex "self", self
-    .lex "$/", param_1752
-.annotate 'line', 651
-    new $P1753, "Undef"
-    .lex "$past", $P1753
-.annotate 'line', 652
-    new $P1754, "Undef"
-    .lex "$pirop", $P1754
-.annotate 'line', 651
-    find_lex $P1757, "$/"
-    unless_null $P1757, vivify_548
-    $P1757 = root_new ['parrot';'Hash']
-  vivify_548:
-    set $P1758, $P1757["args"]
-    unless_null $P1758, vivify_549
-    new $P1758, "Undef"
-  vivify_549:
-    if $P1758, if_1756
-    get_hll_global $P1763, ["PAST"], "Op"
-    find_lex $P1764, "$/"
-    $P1765 = $P1763."new"($P1764 :named("node"))
-    set $P1755, $P1765
-    goto if_1756_end
-  if_1756:
-    find_lex $P1759, "$/"
-    unless_null $P1759, vivify_550
-    $P1759 = root_new ['parrot';'Hash']
+    .lex "$/", param_1759
+.annotate 'line', 644
+    new $P1760, "Undef"
+    .lex "$past", $P1760
+    find_lex $P1763, "$/"
+    unless_null $P1763, vivify_550
+    $P1763 = root_new ['parrot';'Hash']
   vivify_550:
-    set $P1760, $P1759["args"]
-    unless_null $P1760, vivify_551
-    $P1760 = root_new ['parrot';'ResizablePMCArray']
+    set $P1764, $P1763["args"]
+    unless_null $P1764, vivify_551
+    new $P1764, "Undef"
   vivify_551:
-    set $P1761, $P1760[0]
-    unless_null $P1761, vivify_552
-    new $P1761, "Undef"
+    if $P1764, if_1762
+    get_hll_global $P1769, ["PAST"], "Op"
+    find_lex $P1770, "$/"
+    $P1771 = $P1769."new"($P1770 :named("node"))
+    set $P1761, $P1771
+    goto if_1762_end
+  if_1762:
+    find_lex $P1765, "$/"
+    unless_null $P1765, vivify_552
+    $P1765 = root_new ['parrot';'Hash']
   vivify_552:
-    $P1762 = $P1761."ast"()
-    set $P1755, $P1762
-  if_1756_end:
-    store_lex "$past", $P1755
-.annotate 'line', 652
-    find_lex $P1766, "$/"
+    set $P1766, $P1765["args"]
     unless_null $P1766, vivify_553
-    $P1766 = root_new ['parrot';'Hash']
+    $P1766 = root_new ['parrot';'ResizablePMCArray']
   vivify_553:
-    set $P1767, $P1766["op"]
+    set $P1767, $P1766[0]
     unless_null $P1767, vivify_554
     new $P1767, "Undef"
   vivify_554:
-    set $S1768, $P1767
-    new $P1769, 'String'
-    set $P1769, $S1768
-    store_lex "$pirop", $P1769
+    $P1768 = $P1767."ast"()
+    set $P1761, $P1768
+  if_1762_end:
+    store_lex "$past", $P1761
+.annotate 'line', 645
+    find_lex $P1772, "$past"
+    find_lex $P1775, "$/"
+    unless_null $P1775, vivify_555
+    $P1775 = root_new ['parrot';'Hash']
+  vivify_555:
+    set $P1776, $P1775["quote"]
+    unless_null $P1776, vivify_556
+    new $P1776, "Undef"
+  vivify_556:
+    if $P1776, if_1774
+    find_lex $P1780, "$/"
+    unless_null $P1780, vivify_557
+    $P1780 = root_new ['parrot';'Hash']
+  vivify_557:
+    set $P1781, $P1780["longname"]
+    unless_null $P1781, vivify_558
+    new $P1781, "Undef"
+  vivify_558:
+    set $S1782, $P1781
+    new $P1773, 'String'
+    set $P1773, $S1782
+    goto if_1774_end
+  if_1774:
+    find_lex $P1777, "$/"
+    unless_null $P1777, vivify_559
+    $P1777 = root_new ['parrot';'Hash']
+  vivify_559:
+    set $P1778, $P1777["quote"]
+    unless_null $P1778, vivify_560
+    new $P1778, "Undef"
+  vivify_560:
+    $P1779 = $P1778."ast"()
+    set $P1773, $P1779
+  if_1774_end:
+    $P1772."name"($P1773)
+.annotate 'line', 646
+    find_lex $P1783, "$past"
+    $P1783."pasttype"("callmethod")
+.annotate 'line', 647
+    find_lex $P1784, "$/"
+    find_lex $P1785, "$past"
+    $P1786 = $P1784."!make"($P1785)
+.annotate 'line', 643
+    .return ($P1786)
+  control_1757:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1787, exception, "payload"
+    .return ($P1787)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "term:sym<self>"  :subid("98_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_1791
+.annotate 'line', 652
+    new $P1790, 'ExceptionHandler'
+    set_addr $P1790, control_1789
+    $P1790."handle_types"(.CONTROL_RETURN)
+    push_eh $P1790
+    .lex "self", self
+    .lex "$/", param_1791
 .annotate 'line', 653
+    find_lex $P1792, "$/"
+    get_hll_global $P1793, ["PAST"], "Var"
+    $P1794 = $P1793."new"("self" :named("name"))
+    $P1795 = $P1792."!make"($P1794)
+.annotate 'line', 652
+    .return ($P1795)
+  control_1789:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1796, exception, "payload"
+    .return ($P1796)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "term:sym<identifier>"  :subid("99_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_1800
+.annotate 'line', 656
+    new $P1799, 'ExceptionHandler'
+    set_addr $P1799, control_1798
+    $P1799."handle_types"(.CONTROL_RETURN)
+    push_eh $P1799
+    .lex "self", self
+    .lex "$/", param_1800
+.annotate 'line', 657
+    new $P1801, "Undef"
+    .lex "$past", $P1801
+    find_lex $P1802, "$/"
+    unless_null $P1802, vivify_561
+    $P1802 = root_new ['parrot';'Hash']
+  vivify_561:
+    set $P1803, $P1802["args"]
+    unless_null $P1803, vivify_562
+    new $P1803, "Undef"
+  vivify_562:
+    $P1804 = $P1803."ast"()
+    store_lex "$past", $P1804
+.annotate 'line', 658
+    find_lex $P1805, "$past"
+    find_lex $P1806, "$/"
+    unless_null $P1806, vivify_563
+    $P1806 = root_new ['parrot';'Hash']
+  vivify_563:
+    set $P1807, $P1806["deflongname"]
+    unless_null $P1807, vivify_564
+    new $P1807, "Undef"
+  vivify_564:
+    set $S1808, $P1807
+    $P1805."name"($S1808)
+.annotate 'line', 659
+    find_lex $P1809, "$/"
+    find_lex $P1810, "$past"
+    $P1811 = $P1809."!make"($P1810)
+.annotate 'line', 656
+    .return ($P1811)
+  control_1798:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1812, exception, "payload"
+    .return ($P1812)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "term:sym<name>"  :subid("100_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_1816
+.annotate 'line', 662
+    new $P1815, 'ExceptionHandler'
+    set_addr $P1815, control_1814
+    $P1815."handle_types"(.CONTROL_RETURN)
+    push_eh $P1815
+    .lex "self", self
+    .lex "$/", param_1816
+.annotate 'line', 663
+    $P1817 = root_new ['parrot';'ResizablePMCArray']
+    .lex "@ns", $P1817
+.annotate 'line', 664
+    new $P1818, "Undef"
+    .lex "$name", $P1818
+.annotate 'line', 666
+    new $P1819, "Undef"
+    .lex "$var", $P1819
+.annotate 'line', 668
+    new $P1820, "Undef"
+    .lex "$past", $P1820
+.annotate 'line', 663
+    find_lex $P1821, "$/"
+    unless_null $P1821, vivify_565
+    $P1821 = root_new ['parrot';'Hash']
+  vivify_565:
+    set $P1822, $P1821["name"]
+    unless_null $P1822, vivify_566
+    $P1822 = root_new ['parrot';'Hash']
+  vivify_566:
+    set $P1823, $P1822["identifier"]
+    unless_null $P1823, vivify_567
+    new $P1823, "Undef"
+  vivify_567:
+    clone $P1824, $P1823
+    store_lex "@ns", $P1824
+.annotate 'line', 664
+    find_lex $P1825, "@ns"
+    $P1826 = $P1825."pop"()
+    store_lex "$name", $P1826
+.annotate 'line', 665
+    find_lex $P1830, "@ns"
+    if $P1830, if_1829
+    set $P1828, $P1830
+    goto if_1829_end
+  if_1829:
+    find_lex $P1831, "@ns"
+    unless_null $P1831, vivify_568
+    $P1831 = root_new ['parrot';'ResizablePMCArray']
+  vivify_568:
+    set $P1832, $P1831[0]
+    unless_null $P1832, vivify_569
+    new $P1832, "Undef"
+  vivify_569:
+    set $S1833, $P1832
+    iseq $I1834, $S1833, "GLOBAL"
+    new $P1828, 'Integer'
+    set $P1828, $I1834
+  if_1829_end:
+    unless $P1828, if_1827_end
+    find_lex $P1835, "@ns"
+    $P1835."shift"()
+  if_1827_end:
+.annotate 'line', 667
+    get_hll_global $P1836, ["PAST"], "Var"
+    find_lex $P1837, "$name"
+    set $S1838, $P1837
+    find_lex $P1839, "@ns"
+    $P1840 = $P1836."new"($S1838 :named("name"), $P1839 :named("namespace"), "package" :named("scope"))
+    store_lex "$var", $P1840
+.annotate 'line', 668
+    find_lex $P1841, "$var"
+    store_lex "$past", $P1841
+.annotate 'line', 669
+    find_lex $P1843, "$/"
+    unless_null $P1843, vivify_570
+    $P1843 = root_new ['parrot';'Hash']
+  vivify_570:
+    set $P1844, $P1843["args"]
+    unless_null $P1844, vivify_571
+    new $P1844, "Undef"
+  vivify_571:
+    unless $P1844, if_1842_end
+.annotate 'line', 670
+    find_lex $P1845, "$/"
+    unless_null $P1845, vivify_572
+    $P1845 = root_new ['parrot';'Hash']
+  vivify_572:
+    set $P1846, $P1845["args"]
+    unless_null $P1846, vivify_573
+    $P1846 = root_new ['parrot';'ResizablePMCArray']
+  vivify_573:
+    set $P1847, $P1846[0]
+    unless_null $P1847, vivify_574
+    new $P1847, "Undef"
+  vivify_574:
+    $P1848 = $P1847."ast"()
+    store_lex "$past", $P1848
+.annotate 'line', 671
+    find_lex $P1849, "$past"
+    find_lex $P1850, "$var"
+    $P1849."unshift"($P1850)
+  if_1842_end:
+.annotate 'line', 673
+    find_lex $P1851, "$/"
+    find_lex $P1852, "$past"
+    $P1853 = $P1851."!make"($P1852)
+.annotate 'line', 662
+    .return ($P1853)
+  control_1814:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1854, exception, "payload"
+    .return ($P1854)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.include "except_types.pasm"
+.sub "term:sym<pir::op>"  :subid("101_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_1858
+.annotate 'line', 676
+    new $P1857, 'ExceptionHandler'
+    set_addr $P1857, control_1856
+    $P1857."handle_types"(.CONTROL_RETURN)
+    push_eh $P1857
+    .lex "self", self
+    .lex "$/", param_1858
+.annotate 'line', 677
+    new $P1859, "Undef"
+    .lex "$past", $P1859
+.annotate 'line', 678
+    new $P1860, "Undef"
+    .lex "$pirop", $P1860
+.annotate 'line', 677
+    find_lex $P1863, "$/"
+    unless_null $P1863, vivify_575
+    $P1863 = root_new ['parrot';'Hash']
+  vivify_575:
+    set $P1864, $P1863["args"]
+    unless_null $P1864, vivify_576
+    new $P1864, "Undef"
+  vivify_576:
+    if $P1864, if_1862
+    get_hll_global $P1869, ["PAST"], "Op"
+    find_lex $P1870, "$/"
+    $P1871 = $P1869."new"($P1870 :named("node"))
+    set $P1861, $P1871
+    goto if_1862_end
+  if_1862:
+    find_lex $P1865, "$/"
+    unless_null $P1865, vivify_577
+    $P1865 = root_new ['parrot';'Hash']
+  vivify_577:
+    set $P1866, $P1865["args"]
+    unless_null $P1866, vivify_578
+    $P1866 = root_new ['parrot';'ResizablePMCArray']
+  vivify_578:
+    set $P1867, $P1866[0]
+    unless_null $P1867, vivify_579
+    new $P1867, "Undef"
+  vivify_579:
+    $P1868 = $P1867."ast"()
+    set $P1861, $P1868
+  if_1862_end:
+    store_lex "$past", $P1861
+.annotate 'line', 678
+    find_lex $P1872, "$/"
+    unless_null $P1872, vivify_580
+    $P1872 = root_new ['parrot';'Hash']
+  vivify_580:
+    set $P1873, $P1872["op"]
+    unless_null $P1873, vivify_581
+    new $P1873, "Undef"
+  vivify_581:
+    set $S1874, $P1873
+    new $P1875, 'String'
+    set $P1875, $S1874
+    store_lex "$pirop", $P1875
+.annotate 'line', 679
 
         $P0 = find_lex '$pirop'
         $S0 = $P0
         $P0 = split '__', $S0
         $S0 = join ' ', $P0
-        $P1770 = box $S0
+        $P1876 = box $S0
     
-    store_lex "$pirop", $P1770
-.annotate 'line', 660
-    find_lex $P1771, "$past"
-    find_lex $P1772, "$pirop"
-    $P1771."pirop"($P1772)
-.annotate 'line', 661
-    find_lex $P1773, "$past"
-    $P1773."pasttype"("pirop")
-.annotate 'line', 662
-    find_lex $P1774, "$/"
-    find_lex $P1775, "$past"
-    $P1776 = $P1774."!make"($P1775)
-.annotate 'line', 650
-    .return ($P1776)
-  control_1750:
+    store_lex "$pirop", $P1876
+.annotate 'line', 686
+    find_lex $P1877, "$past"
+    find_lex $P1878, "$pirop"
+    $P1877."pirop"($P1878)
+.annotate 'line', 687
+    find_lex $P1879, "$past"
+    $P1879."pasttype"("pirop")
+.annotate 'line', 688
+    find_lex $P1880, "$/"
+    find_lex $P1881, "$past"
+    $P1882 = $P1880."!make"($P1881)
+.annotate 'line', 676
+    .return ($P1882)
+  control_1856:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1777, exception, "payload"
-    .return ($P1777)
+    getattribute $P1883, exception, "payload"
+    .return ($P1883)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "args"  :subid("97_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1781
-.annotate 'line', 665
-    new $P1780, 'ExceptionHandler'
-    set_addr $P1780, control_1779
-    $P1780."handle_types"(.CONTROL_RETURN)
-    push_eh $P1780
-    .lex "self", self
-    .lex "$/", param_1781
-    find_lex $P1782, "$/"
-    find_lex $P1783, "$/"
-    unless_null $P1783, vivify_555
-    $P1783 = root_new ['parrot';'Hash']
-  vivify_555:
-    set $P1784, $P1783["arglist"]
-    unless_null $P1784, vivify_556
-    new $P1784, "Undef"
-  vivify_556:
-    $P1785 = $P1784."ast"()
-    $P1786 = $P1782."!make"($P1785)
-    .return ($P1786)
-  control_1779:
+.sub "args"  :subid("102_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_1887
+.annotate 'line', 691
+    new $P1886, 'ExceptionHandler'
+    set_addr $P1886, control_1885
+    $P1886."handle_types"(.CONTROL_RETURN)
+    push_eh $P1886
+    .lex "self", self
+    .lex "$/", param_1887
+    find_lex $P1888, "$/"
+    find_lex $P1889, "$/"
+    unless_null $P1889, vivify_582
+    $P1889 = root_new ['parrot';'Hash']
+  vivify_582:
+    set $P1890, $P1889["arglist"]
+    unless_null $P1890, vivify_583
+    new $P1890, "Undef"
+  vivify_583:
+    $P1891 = $P1890."ast"()
+    $P1892 = $P1888."!make"($P1891)
+    .return ($P1892)
+  control_1885:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1787, exception, "payload"
-    .return ($P1787)
+    getattribute $P1893, exception, "payload"
+    .return ($P1893)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "arglist"  :subid("98_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1791
-.annotate 'line', 667
-    .const 'Sub' $P1802 = "99_1282324007.53935" 
-    capture_lex $P1802
-    new $P1790, 'ExceptionHandler'
-    set_addr $P1790, control_1789
-    $P1790."handle_types"(.CONTROL_RETURN)
-    push_eh $P1790
+.sub "arglist"  :subid("103_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_1897
+.annotate 'line', 693
+    .const 'Sub' $P1908 = "104_1284728484.24945" 
+    capture_lex $P1908
+    new $P1896, 'ExceptionHandler'
+    set_addr $P1896, control_1895
+    $P1896."handle_types"(.CONTROL_RETURN)
+    push_eh $P1896
     .lex "self", self
-    .lex "$/", param_1791
-.annotate 'line', 668
-    new $P1792, "Undef"
-    .lex "$past", $P1792
-.annotate 'line', 676
-    new $P1793, "Undef"
-    .lex "$i", $P1793
-.annotate 'line', 677
-    new $P1794, "Undef"
-    .lex "$n", $P1794
-.annotate 'line', 668
-    get_hll_global $P1795, ["PAST"], "Op"
-    find_lex $P1796, "$/"
-    $P1797 = $P1795."new"("call" :named("pasttype"), $P1796 :named("node"))
-    store_lex "$past", $P1797
-.annotate 'line', 669
-    find_lex $P1799, "$/"
-    unless_null $P1799, vivify_557
-    $P1799 = root_new ['parrot';'Hash']
-  vivify_557:
-    set $P1800, $P1799["EXPR"]
-    unless_null $P1800, vivify_558
-    new $P1800, "Undef"
-  vivify_558:
-    unless $P1800, if_1798_end
-    .const 'Sub' $P1802 = "99_1282324007.53935" 
-    capture_lex $P1802
-    $P1802()
-  if_1798_end:
-.annotate 'line', 676
-    new $P1834, "Integer"
-    assign $P1834, 0
-    store_lex "$i", $P1834
-.annotate 'line', 677
-    find_lex $P1835, "$past"
-    $P1836 = $P1835."list"()
-    set $N1837, $P1836
-    new $P1838, 'Float'
-    set $P1838, $N1837
-    store_lex "$n", $P1838
-.annotate 'line', 678
-    new $P1886, 'ExceptionHandler'
-    set_addr $P1886, loop1885_handler
-    $P1886."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
-    push_eh $P1886
-  loop1885_test:
-    find_lex $P1839, "$i"
-    set $N1840, $P1839
-    find_lex $P1841, "$n"
-    set $N1842, $P1841
-    islt $I1843, $N1840, $N1842
-    unless $I1843, loop1885_done
-  loop1885_redo:
-.annotate 'line', 679
-    find_lex $P1845, "$i"
-    set $I1846, $P1845
-    find_lex $P1847, "$past"
-    unless_null $P1847, vivify_562
-    $P1847 = root_new ['parrot';'ResizablePMCArray']
-  vivify_562:
-    set $P1848, $P1847[$I1846]
-    unless_null $P1848, vivify_563
-    new $P1848, "Undef"
-  vivify_563:
-    $S1849 = $P1848."name"()
-    iseq $I1850, $S1849, "&prefix:<|>"
-    unless $I1850, if_1844_end
-.annotate 'line', 680
-    find_lex $P1851, "$i"
-    set $I1852, $P1851
-    find_lex $P1853, "$past"
-    unless_null $P1853, vivify_564
-    $P1853 = root_new ['parrot';'ResizablePMCArray']
-  vivify_564:
-    set $P1854, $P1853[$I1852]
-    unless_null $P1854, vivify_565
-    $P1854 = root_new ['parrot';'ResizablePMCArray']
-  vivify_565:
-    set $P1855, $P1854[0]
-    unless_null $P1855, vivify_566
-    new $P1855, "Undef"
-  vivify_566:
-    find_lex $P1856, "$i"
-    set $I1857, $P1856
-    find_lex $P1858, "$past"
-    unless_null $P1858, vivify_567
-    $P1858 = root_new ['parrot';'ResizablePMCArray']
-    store_lex "$past", $P1858
-  vivify_567:
-    set $P1858[$I1857], $P1855
-.annotate 'line', 681
-    find_lex $P1859, "$i"
-    set $I1860, $P1859
-    find_lex $P1861, "$past"
-    unless_null $P1861, vivify_568
-    $P1861 = root_new ['parrot';'ResizablePMCArray']
-  vivify_568:
-    set $P1862, $P1861[$I1860]
-    unless_null $P1862, vivify_569
-    new $P1862, "Undef"
-  vivify_569:
-    $P1862."flat"(1)
-.annotate 'line', 682
-    find_lex $P1866, "$i"
-    set $I1867, $P1866
-    find_lex $P1868, "$past"
-    unless_null $P1868, vivify_570
-    $P1868 = root_new ['parrot';'ResizablePMCArray']
-  vivify_570:
-    set $P1869, $P1868[$I1867]
-    unless_null $P1869, vivify_571
-    new $P1869, "Undef"
-  vivify_571:
-    get_hll_global $P1870, ["PAST"], "Val"
-    $P1871 = $P1869."isa"($P1870)
-    if $P1871, if_1865
-    set $P1864, $P1871
-    goto if_1865_end
-  if_1865:
-.annotate 'line', 683
-    find_lex $P1872, "$i"
-    set $I1873, $P1872
-    find_lex $P1874, "$past"
-    unless_null $P1874, vivify_572
-    $P1874 = root_new ['parrot';'ResizablePMCArray']
-  vivify_572:
-    set $P1875, $P1874[$I1873]
-    unless_null $P1875, vivify_573
-    new $P1875, "Undef"
-  vivify_573:
-    $S1876 = $P1875."name"()
-    substr $S1877, $S1876, 0, 1
-    iseq $I1878, $S1877, "%"
-    new $P1864, 'Integer'
-    set $P1864, $I1878
-  if_1865_end:
-    unless $P1864, if_1863_end
-.annotate 'line', 684
-    find_lex $P1879, "$i"
-    set $I1880, $P1879
-    find_lex $P1881, "$past"
-    unless_null $P1881, vivify_574
-    $P1881 = root_new ['parrot';'ResizablePMCArray']
-  vivify_574:
-    set $P1882, $P1881[$I1880]
-    unless_null $P1882, vivify_575
-    new $P1882, "Undef"
-  vivify_575:
-    $P1882."named"(1)
-  if_1863_end:
-  if_1844_end:
-.annotate 'line', 679
-    find_lex $P1883, "$i"
-    clone $P1884, $P1883
-    inc $P1883
-  loop1885_next:
-.annotate 'line', 678
-    goto loop1885_test
-  loop1885_handler:
+    .lex "$/", param_1897
+.annotate 'line', 694
+    new $P1898, "Undef"
+    .lex "$past", $P1898
+.annotate 'line', 702
+    new $P1899, "Undef"
+    .lex "$i", $P1899
+.annotate 'line', 703
+    new $P1900, "Undef"
+    .lex "$n", $P1900
+.annotate 'line', 694
+    get_hll_global $P1901, ["PAST"], "Op"
+    find_lex $P1902, "$/"
+    $P1903 = $P1901."new"("call" :named("pasttype"), $P1902 :named("node"))
+    store_lex "$past", $P1903
+.annotate 'line', 695
+    find_lex $P1905, "$/"
+    unless_null $P1905, vivify_584
+    $P1905 = root_new ['parrot';'Hash']
+  vivify_584:
+    set $P1906, $P1905["EXPR"]
+    unless_null $P1906, vivify_585
+    new $P1906, "Undef"
+  vivify_585:
+    unless $P1906, if_1904_end
+    .const 'Sub' $P1908 = "104_1284728484.24945" 
+    capture_lex $P1908
+    $P1908()
+  if_1904_end:
+.annotate 'line', 702
+    new $P1940, "Integer"
+    assign $P1940, 0
+    store_lex "$i", $P1940
+.annotate 'line', 703
+    find_lex $P1941, "$past"
+    $P1942 = $P1941."list"()
+    set $N1943, $P1942
+    new $P1944, 'Float'
+    set $P1944, $N1943
+    store_lex "$n", $P1944
+.annotate 'line', 704
+    new $P1992, 'ExceptionHandler'
+    set_addr $P1992, loop1991_handler
+    $P1992."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1992
+  loop1991_test:
+    find_lex $P1945, "$i"
+    set $N1946, $P1945
+    find_lex $P1947, "$n"
+    set $N1948, $P1947
+    islt $I1949, $N1946, $N1948
+    unless $I1949, loop1991_done
+  loop1991_redo:
+.annotate 'line', 705
+    find_lex $P1951, "$i"
+    set $I1952, $P1951
+    find_lex $P1953, "$past"
+    unless_null $P1953, vivify_589
+    $P1953 = root_new ['parrot';'ResizablePMCArray']
+  vivify_589:
+    set $P1954, $P1953[$I1952]
+    unless_null $P1954, vivify_590
+    new $P1954, "Undef"
+  vivify_590:
+    $S1955 = $P1954."name"()
+    iseq $I1956, $S1955, "&prefix:<|>"
+    unless $I1956, if_1950_end
+.annotate 'line', 706
+    find_lex $P1957, "$i"
+    set $I1958, $P1957
+    find_lex $P1959, "$past"
+    unless_null $P1959, vivify_591
+    $P1959 = root_new ['parrot';'ResizablePMCArray']
+  vivify_591:
+    set $P1960, $P1959[$I1958]
+    unless_null $P1960, vivify_592
+    $P1960 = root_new ['parrot';'ResizablePMCArray']
+  vivify_592:
+    set $P1961, $P1960[0]
+    unless_null $P1961, vivify_593
+    new $P1961, "Undef"
+  vivify_593:
+    find_lex $P1962, "$i"
+    set $I1963, $P1962
+    find_lex $P1964, "$past"
+    unless_null $P1964, vivify_594
+    $P1964 = root_new ['parrot';'ResizablePMCArray']
+    store_lex "$past", $P1964
+  vivify_594:
+    set $P1964[$I1963], $P1961
+.annotate 'line', 707
+    find_lex $P1965, "$i"
+    set $I1966, $P1965
+    find_lex $P1967, "$past"
+    unless_null $P1967, vivify_595
+    $P1967 = root_new ['parrot';'ResizablePMCArray']
+  vivify_595:
+    set $P1968, $P1967[$I1966]
+    unless_null $P1968, vivify_596
+    new $P1968, "Undef"
+  vivify_596:
+    $P1968."flat"(1)
+.annotate 'line', 708
+    find_lex $P1972, "$i"
+    set $I1973, $P1972
+    find_lex $P1974, "$past"
+    unless_null $P1974, vivify_597
+    $P1974 = root_new ['parrot';'ResizablePMCArray']
+  vivify_597:
+    set $P1975, $P1974[$I1973]
+    unless_null $P1975, vivify_598
+    new $P1975, "Undef"
+  vivify_598:
+    get_hll_global $P1976, ["PAST"], "Val"
+    $P1977 = $P1975."isa"($P1976)
+    if $P1977, if_1971
+    set $P1970, $P1977
+    goto if_1971_end
+  if_1971:
+.annotate 'line', 709
+    find_lex $P1978, "$i"
+    set $I1979, $P1978
+    find_lex $P1980, "$past"
+    unless_null $P1980, vivify_599
+    $P1980 = root_new ['parrot';'ResizablePMCArray']
+  vivify_599:
+    set $P1981, $P1980[$I1979]
+    unless_null $P1981, vivify_600
+    new $P1981, "Undef"
+  vivify_600:
+    $S1982 = $P1981."name"()
+    substr $S1983, $S1982, 0, 1
+    iseq $I1984, $S1983, "%"
+    new $P1970, 'Integer'
+    set $P1970, $I1984
+  if_1971_end:
+    unless $P1970, if_1969_end
+.annotate 'line', 710
+    find_lex $P1985, "$i"
+    set $I1986, $P1985
+    find_lex $P1987, "$past"
+    unless_null $P1987, vivify_601
+    $P1987 = root_new ['parrot';'ResizablePMCArray']
+  vivify_601:
+    set $P1988, $P1987[$I1986]
+    unless_null $P1988, vivify_602
+    new $P1988, "Undef"
+  vivify_602:
+    $P1988."named"(1)
+  if_1969_end:
+  if_1950_end:
+.annotate 'line', 705
+    find_lex $P1989, "$i"
+    clone $P1990, $P1989
+    inc $P1989
+  loop1991_next:
+.annotate 'line', 704
+    goto loop1991_test
+  loop1991_handler:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1887, exception, 'type'
-    eq $P1887, .CONTROL_LOOP_NEXT, loop1885_next
-    eq $P1887, .CONTROL_LOOP_REDO, loop1885_redo
-  loop1885_done:
+    getattribute $P1993, exception, 'type'
+    eq $P1993, .CONTROL_LOOP_NEXT, loop1991_next
+    eq $P1993, .CONTROL_LOOP_REDO, loop1991_redo
+  loop1991_done:
     pop_eh 
-.annotate 'line', 689
-    find_lex $P1888, "$/"
-    find_lex $P1889, "$past"
-    $P1890 = $P1888."!make"($P1889)
-.annotate 'line', 667
-    .return ($P1890)
-  control_1789:
+.annotate 'line', 715
+    find_lex $P1994, "$/"
+    find_lex $P1995, "$past"
+    $P1996 = $P1994."!make"($P1995)
+.annotate 'line', 693
+    .return ($P1996)
+  control_1895:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1891, exception, "payload"
-    .return ($P1891)
+    getattribute $P1997, exception, "payload"
+    .return ($P1997)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "_block1801"  :anon :subid("99_1282324007.53935") :outer("98_1282324007.53935")
-.annotate 'line', 669
-    .const 'Sub' $P1823 = "100_1282324007.53935" 
-    capture_lex $P1823
-.annotate 'line', 670
-    new $P1803, "Undef"
-    .lex "$expr", $P1803
-    find_lex $P1804, "$/"
-    unless_null $P1804, vivify_559
-    $P1804 = root_new ['parrot';'Hash']
-  vivify_559:
-    set $P1805, $P1804["EXPR"]
-    unless_null $P1805, vivify_560
-    new $P1805, "Undef"
-  vivify_560:
-    $P1806 = $P1805."ast"()
-    store_lex "$expr", $P1806
-.annotate 'line', 671
-    find_lex $P1811, "$expr"
-    $S1812 = $P1811."name"()
-    iseq $I1813, $S1812, "&infix:<,>"
-    if $I1813, if_1810
-    new $P1809, 'Integer'
-    set $P1809, $I1813
-    goto if_1810_end
-  if_1810:
-    find_lex $P1814, "$expr"
-    $P1815 = $P1814."named"()
-    isfalse $I1816, $P1815
-    new $P1809, 'Integer'
-    set $P1809, $I1816
-  if_1810_end:
-    if $P1809, if_1808
-.annotate 'line', 674
-    find_lex $P1831, "$past"
-    find_lex $P1832, "$expr"
-    $P1833 = $P1831."push"($P1832)
-    set $P1807, $P1833
-.annotate 'line', 671
-    goto if_1808_end
-  if_1808:
-.annotate 'line', 672
-    find_lex $P1818, "$expr"
-    $P1819 = $P1818."list"()
-    defined $I1820, $P1819
-    unless $I1820, for_undef_561
-    iter $P1817, $P1819
-    new $P1829, 'ExceptionHandler'
-    set_addr $P1829, loop1828_handler
-    $P1829."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
-    push_eh $P1829
-  loop1828_test:
-    unless $P1817, loop1828_done
-    shift $P1821, $P1817
-  loop1828_redo:
-    .const 'Sub' $P1823 = "100_1282324007.53935" 
-    capture_lex $P1823
-    $P1823($P1821)
-  loop1828_next:
-    goto loop1828_test
-  loop1828_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1830, exception, 'type'
-    eq $P1830, .CONTROL_LOOP_NEXT, loop1828_next
-    eq $P1830, .CONTROL_LOOP_REDO, loop1828_redo
-  loop1828_done:
+.sub "_block1907"  :anon :subid("104_1284728484.24945") :outer("103_1284728484.24945")
+.annotate 'line', 695
+    .const 'Sub' $P1929 = "105_1284728484.24945" 
+    capture_lex $P1929
+.annotate 'line', 696
+    new $P1909, "Undef"
+    .lex "$expr", $P1909
+    find_lex $P1910, "$/"
+    unless_null $P1910, vivify_586
+    $P1910 = root_new ['parrot';'Hash']
+  vivify_586:
+    set $P1911, $P1910["EXPR"]
+    unless_null $P1911, vivify_587
+    new $P1911, "Undef"
+  vivify_587:
+    $P1912 = $P1911."ast"()
+    store_lex "$expr", $P1912
+.annotate 'line', 697
+    find_lex $P1917, "$expr"
+    $S1918 = $P1917."name"()
+    iseq $I1919, $S1918, "&infix:<,>"
+    if $I1919, if_1916
+    new $P1915, 'Integer'
+    set $P1915, $I1919
+    goto if_1916_end
+  if_1916:
+    find_lex $P1920, "$expr"
+    $P1921 = $P1920."named"()
+    isfalse $I1922, $P1921
+    new $P1915, 'Integer'
+    set $P1915, $I1922
+  if_1916_end:
+    if $P1915, if_1914
+.annotate 'line', 700
+    find_lex $P1937, "$past"
+    find_lex $P1938, "$expr"
+    $P1939 = $P1937."push"($P1938)
+    set $P1913, $P1939
+.annotate 'line', 697
+    goto if_1914_end
+  if_1914:
+.annotate 'line', 698
+    find_lex $P1924, "$expr"
+    $P1925 = $P1924."list"()
+    defined $I1926, $P1925
+    unless $I1926, for_undef_588
+    iter $P1923, $P1925
+    new $P1935, 'ExceptionHandler'
+    set_addr $P1935, loop1934_handler
+    $P1935."handle_types"(.CONTROL_LOOP_NEXT, .CONTROL_LOOP_REDO, .CONTROL_LOOP_LAST)
+    push_eh $P1935
+  loop1934_test:
+    unless $P1923, loop1934_done
+    shift $P1927, $P1923
+  loop1934_redo:
+    .const 'Sub' $P1929 = "105_1284728484.24945" 
+    capture_lex $P1929
+    $P1929($P1927)
+  loop1934_next:
+    goto loop1934_test
+  loop1934_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P1936, exception, 'type'
+    eq $P1936, .CONTROL_LOOP_NEXT, loop1934_next
+    eq $P1936, .CONTROL_LOOP_REDO, loop1934_redo
+  loop1934_done:
     pop_eh 
-  for_undef_561:
-.annotate 'line', 671
-    set $P1807, $P1817
-  if_1808_end:
-.annotate 'line', 669
-    .return ($P1807)
+  for_undef_588:
+.annotate 'line', 697
+    set $P1913, $P1923
+  if_1914_end:
+.annotate 'line', 695
+    .return ($P1913)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1822"  :anon :subid("100_1282324007.53935") :outer("99_1282324007.53935")
-    .param pmc param_1824
-.annotate 'line', 672
-    .lex "$_", param_1824
-    find_lex $P1825, "$past"
-    find_lex $P1826, "$_"
-    $P1827 = $P1825."push"($P1826)
-    .return ($P1827)
+.sub "_block1928"  :anon :subid("105_1284728484.24945") :outer("104_1284728484.24945")
+    .param pmc param_1930
+.annotate 'line', 698
+    .lex "$_", param_1930
+    find_lex $P1931, "$past"
+    find_lex $P1932, "$_"
+    $P1933 = $P1931."push"($P1932)
+    .return ($P1933)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<value>"  :subid("101_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1895
-.annotate 'line', 693
-    new $P1894, 'ExceptionHandler'
-    set_addr $P1894, control_1893
-    $P1894."handle_types"(.CONTROL_RETURN)
-    push_eh $P1894
-    .lex "self", self
-    .lex "$/", param_1895
-    find_lex $P1896, "$/"
-    find_lex $P1897, "$/"
-    unless_null $P1897, vivify_576
-    $P1897 = root_new ['parrot';'Hash']
-  vivify_576:
-    set $P1898, $P1897["value"]
-    unless_null $P1898, vivify_577
-    new $P1898, "Undef"
-  vivify_577:
-    $P1899 = $P1898."ast"()
-    $P1900 = $P1896."!make"($P1899)
-    .return ($P1900)
-  control_1893:
+.sub "term:sym<value>"  :subid("106_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2001
+.annotate 'line', 719
+    new $P2000, 'ExceptionHandler'
+    set_addr $P2000, control_1999
+    $P2000."handle_types"(.CONTROL_RETURN)
+    push_eh $P2000
+    .lex "self", self
+    .lex "$/", param_2001
+    find_lex $P2002, "$/"
+    find_lex $P2003, "$/"
+    unless_null $P2003, vivify_603
+    $P2003 = root_new ['parrot';'Hash']
+  vivify_603:
+    set $P2004, $P2003["value"]
+    unless_null $P2004, vivify_604
+    new $P2004, "Undef"
+  vivify_604:
+    $P2005 = $P2004."ast"()
+    $P2006 = $P2002."!make"($P2005)
+    .return ($P2006)
+  control_1999:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1901, exception, "payload"
-    .return ($P1901)
+    getattribute $P2007, exception, "payload"
+    .return ($P2007)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "circumfix:sym<( )>"  :subid("102_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1905
-.annotate 'line', 695
-    new $P1904, 'ExceptionHandler'
-    set_addr $P1904, control_1903
-    $P1904."handle_types"(.CONTROL_RETURN)
-    push_eh $P1904
+.sub "circumfix:sym<( )>"  :subid("107_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2011
+.annotate 'line', 721
+    new $P2010, 'ExceptionHandler'
+    set_addr $P2010, control_2009
+    $P2010."handle_types"(.CONTROL_RETURN)
+    push_eh $P2010
     .lex "self", self
-    .lex "$/", param_1905
-.annotate 'line', 696
-    find_lex $P1906, "$/"
-.annotate 'line', 697
-    find_lex $P1909, "$/"
-    unless_null $P1909, vivify_578
-    $P1909 = root_new ['parrot';'Hash']
-  vivify_578:
-    set $P1910, $P1909["EXPR"]
-    unless_null $P1910, vivify_579
-    new $P1910, "Undef"
-  vivify_579:
-    if $P1910, if_1908
-.annotate 'line', 698
-    get_hll_global $P1915, ["PAST"], "Op"
-    find_lex $P1916, "$/"
-    $P1917 = $P1915."new"("list" :named("pasttype"), $P1916 :named("node"))
-    set $P1907, $P1917
-.annotate 'line', 697
-    goto if_1908_end
-  if_1908:
-    find_lex $P1911, "$/"
-    unless_null $P1911, vivify_580
-    $P1911 = root_new ['parrot';'Hash']
-  vivify_580:
-    set $P1912, $P1911["EXPR"]
-    unless_null $P1912, vivify_581
-    $P1912 = root_new ['parrot';'ResizablePMCArray']
-  vivify_581:
-    set $P1913, $P1912[0]
-    unless_null $P1913, vivify_582
-    new $P1913, "Undef"
-  vivify_582:
-    $P1914 = $P1913."ast"()
-    set $P1907, $P1914
-  if_1908_end:
-    $P1918 = $P1906."!make"($P1907)
-.annotate 'line', 695
-    .return ($P1918)
-  control_1903:
+    .lex "$/", param_2011
+.annotate 'line', 722
+    find_lex $P2012, "$/"
+.annotate 'line', 723
+    find_lex $P2015, "$/"
+    unless_null $P2015, vivify_605
+    $P2015 = root_new ['parrot';'Hash']
+  vivify_605:
+    set $P2016, $P2015["EXPR"]
+    unless_null $P2016, vivify_606
+    new $P2016, "Undef"
+  vivify_606:
+    if $P2016, if_2014
+.annotate 'line', 724
+    get_hll_global $P2021, ["PAST"], "Op"
+    find_lex $P2022, "$/"
+    $P2023 = $P2021."new"("list" :named("pasttype"), $P2022 :named("node"))
+    set $P2013, $P2023
+.annotate 'line', 723
+    goto if_2014_end
+  if_2014:
+    find_lex $P2017, "$/"
+    unless_null $P2017, vivify_607
+    $P2017 = root_new ['parrot';'Hash']
+  vivify_607:
+    set $P2018, $P2017["EXPR"]
+    unless_null $P2018, vivify_608
+    $P2018 = root_new ['parrot';'ResizablePMCArray']
+  vivify_608:
+    set $P2019, $P2018[0]
+    unless_null $P2019, vivify_609
+    new $P2019, "Undef"
+  vivify_609:
+    $P2020 = $P2019."ast"()
+    set $P2013, $P2020
+  if_2014_end:
+    $P2024 = $P2012."!make"($P2013)
+.annotate 'line', 721
+    .return ($P2024)
+  control_2009:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1919, exception, "payload"
-    .return ($P1919)
+    getattribute $P2025, exception, "payload"
+    .return ($P2025)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "circumfix:sym<[ ]>"  :subid("103_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1923
-.annotate 'line', 701
-    new $P1922, 'ExceptionHandler'
-    set_addr $P1922, control_1921
-    $P1922."handle_types"(.CONTROL_RETURN)
-    push_eh $P1922
+.sub "circumfix:sym<[ ]>"  :subid("108_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2029
+.annotate 'line', 727
+    new $P2028, 'ExceptionHandler'
+    set_addr $P2028, control_2027
+    $P2028."handle_types"(.CONTROL_RETURN)
+    push_eh $P2028
     .lex "self", self
-    .lex "$/", param_1923
-.annotate 'line', 702
-    new $P1924, "Undef"
-    .lex "$past", $P1924
-.annotate 'line', 701
-    find_lex $P1925, "$past"
-.annotate 'line', 703
-    find_lex $P1927, "$/"
-    unless_null $P1927, vivify_583
-    $P1927 = root_new ['parrot';'Hash']
-  vivify_583:
-    set $P1928, $P1927["EXPR"]
-    unless_null $P1928, vivify_584
-    new $P1928, "Undef"
-  vivify_584:
-    if $P1928, if_1926
-.annotate 'line', 710
-    get_hll_global $P1940, ["PAST"], "Op"
-    $P1941 = $P1940."new"("list" :named("pasttype"))
-    store_lex "$past", $P1941
-.annotate 'line', 709
-    goto if_1926_end
-  if_1926:
-.annotate 'line', 704
-    find_lex $P1929, "$/"
-    unless_null $P1929, vivify_585
-    $P1929 = root_new ['parrot';'Hash']
-  vivify_585:
-    set $P1930, $P1929["EXPR"]
-    unless_null $P1930, vivify_586
-    $P1930 = root_new ['parrot';'ResizablePMCArray']
-  vivify_586:
-    set $P1931, $P1930[0]
-    unless_null $P1931, vivify_587
-    new $P1931, "Undef"
-  vivify_587:
-    $P1932 = $P1931."ast"()
-    store_lex "$past", $P1932
-.annotate 'line', 705
-    find_lex $P1934, "$past"
-    $S1935 = $P1934."name"()
-    isne $I1936, $S1935, "&infix:<,>"
-    unless $I1936, if_1933_end
-.annotate 'line', 706
-    get_hll_global $P1937, ["PAST"], "Op"
-    find_lex $P1938, "$past"
-    $P1939 = $P1937."new"($P1938, "list" :named("pasttype"))
-    store_lex "$past", $P1939
-  if_1933_end:
-  if_1926_end:
-.annotate 'line', 712
-    find_lex $P1942, "$past"
-    $P1942."name"("&circumfix:<[ ]>")
-.annotate 'line', 713
-    find_lex $P1943, "$/"
-    find_lex $P1944, "$past"
-    $P1945 = $P1943."!make"($P1944)
-.annotate 'line', 701
-    .return ($P1945)
-  control_1921:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P1946, exception, "payload"
-    .return ($P1946)
+    .lex "$/", param_2029
+.annotate 'line', 728
+    new $P2030, "Undef"
+    .lex "$past", $P2030
+.annotate 'line', 727
+    find_lex $P2031, "$past"
+.annotate 'line', 729
+    find_lex $P2033, "$/"
+    unless_null $P2033, vivify_610
+    $P2033 = root_new ['parrot';'Hash']
+  vivify_610:
+    set $P2034, $P2033["EXPR"]
+    unless_null $P2034, vivify_611
+    new $P2034, "Undef"
+  vivify_611:
+    if $P2034, if_2032
+.annotate 'line', 736
+    get_hll_global $P2046, ["PAST"], "Op"
+    $P2047 = $P2046."new"("list" :named("pasttype"))
+    store_lex "$past", $P2047
+.annotate 'line', 735
+    goto if_2032_end
+  if_2032:
+.annotate 'line', 730
+    find_lex $P2035, "$/"
+    unless_null $P2035, vivify_612
+    $P2035 = root_new ['parrot';'Hash']
+  vivify_612:
+    set $P2036, $P2035["EXPR"]
+    unless_null $P2036, vivify_613
+    $P2036 = root_new ['parrot';'ResizablePMCArray']
+  vivify_613:
+    set $P2037, $P2036[0]
+    unless_null $P2037, vivify_614
+    new $P2037, "Undef"
+  vivify_614:
+    $P2038 = $P2037."ast"()
+    store_lex "$past", $P2038
+.annotate 'line', 731
+    find_lex $P2040, "$past"
+    $S2041 = $P2040."name"()
+    isne $I2042, $S2041, "&infix:<,>"
+    unless $I2042, if_2039_end
+.annotate 'line', 732
+    get_hll_global $P2043, ["PAST"], "Op"
+    find_lex $P2044, "$past"
+    $P2045 = $P2043."new"($P2044, "list" :named("pasttype"))
+    store_lex "$past", $P2045
+  if_2039_end:
+  if_2032_end:
+.annotate 'line', 738
+    find_lex $P2048, "$past"
+    $P2048."name"("&circumfix:<[ ]>")
+.annotate 'line', 739
+    find_lex $P2049, "$/"
+    find_lex $P2050, "$past"
+    $P2051 = $P2049."!make"($P2050)
+.annotate 'line', 727
+    .return ($P2051)
+  control_2027:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P2052, exception, "payload"
+    .return ($P2052)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "circumfix:sym<ang>"  :subid("104_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1950
-.annotate 'line', 716
-    new $P1949, 'ExceptionHandler'
-    set_addr $P1949, control_1948
-    $P1949."handle_types"(.CONTROL_RETURN)
-    push_eh $P1949
-    .lex "self", self
-    .lex "$/", param_1950
-    find_lex $P1951, "$/"
-    find_lex $P1952, "$/"
-    unless_null $P1952, vivify_588
-    $P1952 = root_new ['parrot';'Hash']
-  vivify_588:
-    set $P1953, $P1952["quote_EXPR"]
-    unless_null $P1953, vivify_589
-    new $P1953, "Undef"
-  vivify_589:
-    $P1954 = $P1953."ast"()
-    $P1955 = $P1951."!make"($P1954)
-    .return ($P1955)
-  control_1948:
+.sub "circumfix:sym<ang>"  :subid("109_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2056
+.annotate 'line', 742
+    new $P2055, 'ExceptionHandler'
+    set_addr $P2055, control_2054
+    $P2055."handle_types"(.CONTROL_RETURN)
+    push_eh $P2055
+    .lex "self", self
+    .lex "$/", param_2056
+    find_lex $P2057, "$/"
+    find_lex $P2058, "$/"
+    unless_null $P2058, vivify_615
+    $P2058 = root_new ['parrot';'Hash']
+  vivify_615:
+    set $P2059, $P2058["quote_EXPR"]
+    unless_null $P2059, vivify_616
+    new $P2059, "Undef"
+  vivify_616:
+    $P2060 = $P2059."ast"()
+    $P2061 = $P2057."!make"($P2060)
+    .return ($P2061)
+  control_2054:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1956, exception, "payload"
-    .return ($P1956)
+    getattribute $P2062, exception, "payload"
+    .return ($P2062)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("105_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1960
-.annotate 'line', 717
-    new $P1959, 'ExceptionHandler'
-    set_addr $P1959, control_1958
-    $P1959."handle_types"(.CONTROL_RETURN)
-    push_eh $P1959
-    .lex "self", self
-    .lex "$/", param_1960
-    find_lex $P1961, "$/"
-    find_lex $P1962, "$/"
-    unless_null $P1962, vivify_590
-    $P1962 = root_new ['parrot';'Hash']
-  vivify_590:
-    set $P1963, $P1962["quote_EXPR"]
-    unless_null $P1963, vivify_591
-    new $P1963, "Undef"
-  vivify_591:
-    $P1964 = $P1963."ast"()
-    $P1965 = $P1961."!make"($P1964)
-    .return ($P1965)
-  control_1958:
+.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("110_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2066
+.annotate 'line', 743
+    new $P2065, 'ExceptionHandler'
+    set_addr $P2065, control_2064
+    $P2065."handle_types"(.CONTROL_RETURN)
+    push_eh $P2065
+    .lex "self", self
+    .lex "$/", param_2066
+    find_lex $P2067, "$/"
+    find_lex $P2068, "$/"
+    unless_null $P2068, vivify_617
+    $P2068 = root_new ['parrot';'Hash']
+  vivify_617:
+    set $P2069, $P2068["quote_EXPR"]
+    unless_null $P2069, vivify_618
+    new $P2069, "Undef"
+  vivify_618:
+    $P2070 = $P2069."ast"()
+    $P2071 = $P2067."!make"($P2070)
+    .return ($P2071)
+  control_2064:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1966, exception, "payload"
-    .return ($P1966)
+    getattribute $P2072, exception, "payload"
+    .return ($P2072)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "circumfix:sym<{ }>"  :subid("106_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1970
-.annotate 'line', 719
-    new $P1969, 'ExceptionHandler'
-    set_addr $P1969, control_1968
-    $P1969."handle_types"(.CONTROL_RETURN)
-    push_eh $P1969
-    .lex "self", self
-    .lex "$/", param_1970
-.annotate 'line', 720
-    new $P1971, "Undef"
-    .lex "$past", $P1971
-    find_lex $P1974, "$/"
-    unless_null $P1974, vivify_592
-    $P1974 = root_new ['parrot';'Hash']
-  vivify_592:
-    set $P1975, $P1974["pblock"]
-    unless_null $P1975, vivify_593
-    $P1975 = root_new ['parrot';'Hash']
-  vivify_593:
-    set $P1976, $P1975["blockoid"]
-    unless_null $P1976, vivify_594
-    $P1976 = root_new ['parrot';'Hash']
-  vivify_594:
-    set $P1977, $P1976["statementlist"]
-    unless_null $P1977, vivify_595
-    $P1977 = root_new ['parrot';'Hash']
-  vivify_595:
-    set $P1978, $P1977["statement"]
-    unless_null $P1978, vivify_596
-    new $P1978, "Undef"
-  vivify_596:
-    set $N1979, $P1978
-    isgt $I1980, $N1979, 0.0
-    if $I1980, if_1973
-.annotate 'line', 722
-    $P1984 = "vivitype"("%")
-    set $P1972, $P1984
-.annotate 'line', 720
-    goto if_1973_end
-  if_1973:
-.annotate 'line', 721
-    find_lex $P1981, "$/"
-    unless_null $P1981, vivify_597
-    $P1981 = root_new ['parrot';'Hash']
-  vivify_597:
-    set $P1982, $P1981["pblock"]
-    unless_null $P1982, vivify_598
-    new $P1982, "Undef"
-  vivify_598:
-    $P1983 = $P1982."ast"()
-    set $P1972, $P1983
-  if_1973_end:
-    store_lex "$past", $P1972
-.annotate 'line', 723
-    new $P1985, "Integer"
-    assign $P1985, 1
-    find_lex $P1986, "$past"
-    unless_null $P1986, vivify_599
-    $P1986 = root_new ['parrot';'Hash']
-    store_lex "$past", $P1986
-  vivify_599:
-    set $P1986["bareblock"], $P1985
-.annotate 'line', 724
-    find_lex $P1987, "$/"
-    find_lex $P1988, "$past"
-    $P1989 = $P1987."!make"($P1988)
-.annotate 'line', 719
-    .return ($P1989)
-  control_1968:
+.sub "circumfix:sym<{ }>"  :subid("111_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2076
+.annotate 'line', 745
+    new $P2075, 'ExceptionHandler'
+    set_addr $P2075, control_2074
+    $P2075."handle_types"(.CONTROL_RETURN)
+    push_eh $P2075
+    .lex "self", self
+    .lex "$/", param_2076
+.annotate 'line', 746
+    new $P2077, "Undef"
+    .lex "$past", $P2077
+    find_lex $P2080, "$/"
+    unless_null $P2080, vivify_619
+    $P2080 = root_new ['parrot';'Hash']
+  vivify_619:
+    set $P2081, $P2080["pblock"]
+    unless_null $P2081, vivify_620
+    $P2081 = root_new ['parrot';'Hash']
+  vivify_620:
+    set $P2082, $P2081["blockoid"]
+    unless_null $P2082, vivify_621
+    $P2082 = root_new ['parrot';'Hash']
+  vivify_621:
+    set $P2083, $P2082["statementlist"]
+    unless_null $P2083, vivify_622
+    $P2083 = root_new ['parrot';'Hash']
+  vivify_622:
+    set $P2084, $P2083["statement"]
+    unless_null $P2084, vivify_623
+    new $P2084, "Undef"
+  vivify_623:
+    set $N2085, $P2084
+    isgt $I2086, $N2085, 0.0
+    if $I2086, if_2079
+.annotate 'line', 748
+    $P2090 = "vivitype"("%")
+    set $P2078, $P2090
+.annotate 'line', 746
+    goto if_2079_end
+  if_2079:
+.annotate 'line', 747
+    find_lex $P2087, "$/"
+    unless_null $P2087, vivify_624
+    $P2087 = root_new ['parrot';'Hash']
+  vivify_624:
+    set $P2088, $P2087["pblock"]
+    unless_null $P2088, vivify_625
+    new $P2088, "Undef"
+  vivify_625:
+    $P2089 = $P2088."ast"()
+    set $P2078, $P2089
+  if_2079_end:
+    store_lex "$past", $P2078
+.annotate 'line', 749
+    new $P2091, "Integer"
+    assign $P2091, 1
+    find_lex $P2092, "$past"
+    unless_null $P2092, vivify_626
+    $P2092 = root_new ['parrot';'Hash']
+    store_lex "$past", $P2092
+  vivify_626:
+    set $P2092["bareblock"], $P2091
+.annotate 'line', 750
+    find_lex $P2093, "$/"
+    find_lex $P2094, "$past"
+    $P2095 = $P2093."!make"($P2094)
+.annotate 'line', 745
+    .return ($P2095)
+  control_2074:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1990, exception, "payload"
-    .return ($P1990)
+    getattribute $P2096, exception, "payload"
+    .return ($P2096)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "circumfix:sym<sigil>"  :subid("107_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_1994
-.annotate 'line', 727
-    new $P1993, 'ExceptionHandler'
-    set_addr $P1993, control_1992
-    $P1993."handle_types"(.CONTROL_RETURN)
-    push_eh $P1993
+.sub "circumfix:sym<sigil>"  :subid("112_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2100
+.annotate 'line', 753
+    new $P2099, 'ExceptionHandler'
+    set_addr $P2099, control_2098
+    $P2099."handle_types"(.CONTROL_RETURN)
+    push_eh $P2099
     .lex "self", self
-    .lex "$/", param_1994
-.annotate 'line', 728
-    new $P1995, "Undef"
-    .lex "$name", $P1995
-    find_lex $P1998, "$/"
-    unless_null $P1998, vivify_600
-    $P1998 = root_new ['parrot';'Hash']
-  vivify_600:
-    set $P1999, $P1998["sigil"]
-    unless_null $P1999, vivify_601
-    new $P1999, "Undef"
-  vivify_601:
-    set $S2000, $P1999
-    iseq $I2001, $S2000, "@"
-    if $I2001, if_1997
-.annotate 'line', 729
-    find_lex $P2005, "$/"
-    unless_null $P2005, vivify_602
-    $P2005 = root_new ['parrot';'Hash']
-  vivify_602:
-    set $P2006, $P2005["sigil"]
-    unless_null $P2006, vivify_603
-    new $P2006, "Undef"
-  vivify_603:
-    set $S2007, $P2006
-    iseq $I2008, $S2007, "%"
-    if $I2008, if_2004
-    new $P2010, "String"
-    assign $P2010, "item"
-    set $P2003, $P2010
-    goto if_2004_end
-  if_2004:
-    new $P2009, "String"
-    assign $P2009, "hash"
-    set $P2003, $P2009
-  if_2004_end:
-    set $P1996, $P2003
-.annotate 'line', 728
-    goto if_1997_end
-  if_1997:
-    new $P2002, "String"
-    assign $P2002, "list"
-    set $P1996, $P2002
-  if_1997_end:
-    store_lex "$name", $P1996
-.annotate 'line', 731
-    find_lex $P2011, "$/"
-    get_hll_global $P2012, ["PAST"], "Op"
-    find_lex $P2013, "$name"
-    find_lex $P2014, "$/"
-    unless_null $P2014, vivify_604
-    $P2014 = root_new ['parrot';'Hash']
-  vivify_604:
-    set $P2015, $P2014["semilist"]
-    unless_null $P2015, vivify_605
-    new $P2015, "Undef"
-  vivify_605:
-    $P2016 = $P2015."ast"()
-    $P2017 = $P2012."new"($P2016, "callmethod" :named("pasttype"), $P2013 :named("name"))
-    $P2018 = $P2011."!make"($P2017)
-.annotate 'line', 727
-    .return ($P2018)
-  control_1992:
+    .lex "$/", param_2100
+.annotate 'line', 754
+    new $P2101, "Undef"
+    .lex "$name", $P2101
+    find_lex $P2104, "$/"
+    unless_null $P2104, vivify_627
+    $P2104 = root_new ['parrot';'Hash']
+  vivify_627:
+    set $P2105, $P2104["sigil"]
+    unless_null $P2105, vivify_628
+    new $P2105, "Undef"
+  vivify_628:
+    set $S2106, $P2105
+    iseq $I2107, $S2106, "@"
+    if $I2107, if_2103
+.annotate 'line', 755
+    find_lex $P2111, "$/"
+    unless_null $P2111, vivify_629
+    $P2111 = root_new ['parrot';'Hash']
+  vivify_629:
+    set $P2112, $P2111["sigil"]
+    unless_null $P2112, vivify_630
+    new $P2112, "Undef"
+  vivify_630:
+    set $S2113, $P2112
+    iseq $I2114, $S2113, "%"
+    if $I2114, if_2110
+    new $P2116, "String"
+    assign $P2116, "item"
+    set $P2109, $P2116
+    goto if_2110_end
+  if_2110:
+    new $P2115, "String"
+    assign $P2115, "hash"
+    set $P2109, $P2115
+  if_2110_end:
+    set $P2102, $P2109
+.annotate 'line', 754
+    goto if_2103_end
+  if_2103:
+    new $P2108, "String"
+    assign $P2108, "list"
+    set $P2102, $P2108
+  if_2103_end:
+    store_lex "$name", $P2102
+.annotate 'line', 757
+    find_lex $P2117, "$/"
+    get_hll_global $P2118, ["PAST"], "Op"
+    find_lex $P2119, "$name"
+    find_lex $P2120, "$/"
+    unless_null $P2120, vivify_631
+    $P2120 = root_new ['parrot';'Hash']
+  vivify_631:
+    set $P2121, $P2120["semilist"]
+    unless_null $P2121, vivify_632
+    new $P2121, "Undef"
+  vivify_632:
+    $P2122 = $P2121."ast"()
+    $P2123 = $P2118."new"($P2122, "callmethod" :named("pasttype"), $P2119 :named("name"))
+    $P2124 = $P2117."!make"($P2123)
+.annotate 'line', 753
+    .return ($P2124)
+  control_2098:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2019, exception, "payload"
-    .return ($P2019)
+    getattribute $P2125, exception, "payload"
+    .return ($P2125)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "semilist"  :subid("108_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2023
-.annotate 'line', 734
-    new $P2022, 'ExceptionHandler'
-    set_addr $P2022, control_2021
-    $P2022."handle_types"(.CONTROL_RETURN)
-    push_eh $P2022
+.sub "semilist"  :subid("113_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2129
+.annotate 'line', 760
+    new $P2128, 'ExceptionHandler'
+    set_addr $P2128, control_2127
+    $P2128."handle_types"(.CONTROL_RETURN)
+    push_eh $P2128
     .lex "self", self
-    .lex "$/", param_2023
-    find_lex $P2024, "$/"
-    find_lex $P2025, "$/"
-    unless_null $P2025, vivify_606
-    $P2025 = root_new ['parrot';'Hash']
-  vivify_606:
-    set $P2026, $P2025["statement"]
-    unless_null $P2026, vivify_607
-    new $P2026, "Undef"
-  vivify_607:
-    $P2027 = $P2026."ast"()
-    $P2028 = $P2024."!make"($P2027)
-    .return ($P2028)
-  control_2021:
+    .lex "$/", param_2129
+    find_lex $P2130, "$/"
+    find_lex $P2131, "$/"
+    unless_null $P2131, vivify_633
+    $P2131 = root_new ['parrot';'Hash']
+  vivify_633:
+    set $P2132, $P2131["statement"]
+    unless_null $P2132, vivify_634
+    new $P2132, "Undef"
+  vivify_634:
+    $P2133 = $P2132."ast"()
+    $P2134 = $P2130."!make"($P2133)
+    .return ($P2134)
+  control_2127:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2029, exception, "payload"
-    .return ($P2029)
+    getattribute $P2135, exception, "payload"
+    .return ($P2135)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postcircumfix:sym<[ ]>"  :subid("109_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2033
-.annotate 'line', 736
-    new $P2032, 'ExceptionHandler'
-    set_addr $P2032, control_2031
-    $P2032."handle_types"(.CONTROL_RETURN)
-    push_eh $P2032
-    .lex "self", self
-    .lex "$/", param_2033
-.annotate 'line', 737
-    find_lex $P2034, "$/"
-    get_hll_global $P2035, ["PAST"], "Var"
-    find_lex $P2036, "$/"
-    unless_null $P2036, vivify_608
-    $P2036 = root_new ['parrot';'Hash']
-  vivify_608:
-    set $P2037, $P2036["EXPR"]
-    unless_null $P2037, vivify_609
-    new $P2037, "Undef"
-  vivify_609:
-    $P2038 = $P2037."ast"()
-.annotate 'line', 739
-    $P2039 = "vivitype"("@")
-    $P2040 = $P2035."new"($P2038, "keyed_int" :named("scope"), "Undef" :named("viviself"), $P2039 :named("vivibase"))
-.annotate 'line', 737
-    $P2041 = $P2034."!make"($P2040)
-.annotate 'line', 736
-    .return ($P2041)
-  control_2031:
+.sub "postcircumfix:sym<[ ]>"  :subid("114_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2139
+.annotate 'line', 762
+    new $P2138, 'ExceptionHandler'
+    set_addr $P2138, control_2137
+    $P2138."handle_types"(.CONTROL_RETURN)
+    push_eh $P2138
+    .lex "self", self
+    .lex "$/", param_2139
+.annotate 'line', 763
+    find_lex $P2140, "$/"
+    get_hll_global $P2141, ["PAST"], "Var"
+    find_lex $P2142, "$/"
+    unless_null $P2142, vivify_635
+    $P2142 = root_new ['parrot';'Hash']
+  vivify_635:
+    set $P2143, $P2142["EXPR"]
+    unless_null $P2143, vivify_636
+    new $P2143, "Undef"
+  vivify_636:
+    $P2144 = $P2143."ast"()
+.annotate 'line', 765
+    $P2145 = "vivitype"("@")
+    $P2146 = $P2141."new"($P2144, "keyed_int" :named("scope"), "Undef" :named("viviself"), $P2145 :named("vivibase"))
+.annotate 'line', 763
+    $P2147 = $P2140."!make"($P2146)
+.annotate 'line', 762
+    .return ($P2147)
+  control_2137:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2042, exception, "payload"
-    .return ($P2042)
+    getattribute $P2148, exception, "payload"
+    .return ($P2148)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postcircumfix:sym<{ }>"  :subid("110_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2046
-.annotate 'line', 742
-    new $P2045, 'ExceptionHandler'
-    set_addr $P2045, control_2044
-    $P2045."handle_types"(.CONTROL_RETURN)
-    push_eh $P2045
+.sub "postcircumfix:sym<{ }>"  :subid("115_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2152
+.annotate 'line', 768
+    new $P2151, 'ExceptionHandler'
+    set_addr $P2151, control_2150
+    $P2151."handle_types"(.CONTROL_RETURN)
+    push_eh $P2151
     .lex "self", self
-    .lex "$/", param_2046
-.annotate 'line', 743
-    find_lex $P2047, "$/"
-    get_hll_global $P2048, ["PAST"], "Var"
-    find_lex $P2049, "$/"
-    unless_null $P2049, vivify_610
-    $P2049 = root_new ['parrot';'Hash']
-  vivify_610:
-    set $P2050, $P2049["EXPR"]
-    unless_null $P2050, vivify_611
-    new $P2050, "Undef"
-  vivify_611:
-    $P2051 = $P2050."ast"()
-.annotate 'line', 745
-    $P2052 = "vivitype"("%")
-    $P2053 = $P2048."new"($P2051, "keyed" :named("scope"), "Undef" :named("viviself"), $P2052 :named("vivibase"))
-.annotate 'line', 743
-    $P2054 = $P2047."!make"($P2053)
-.annotate 'line', 742
-    .return ($P2054)
-  control_2044:
+    .lex "$/", param_2152
+.annotate 'line', 769
+    find_lex $P2153, "$/"
+    get_hll_global $P2154, ["PAST"], "Var"
+    find_lex $P2155, "$/"
+    unless_null $P2155, vivify_637
+    $P2155 = root_new ['parrot';'Hash']
+  vivify_637:
+    set $P2156, $P2155["EXPR"]
+    unless_null $P2156, vivify_638
+    new $P2156, "Undef"
+  vivify_638:
+    $P2157 = $P2156."ast"()
+.annotate 'line', 771
+    $P2158 = "vivitype"("%")
+    $P2159 = $P2154."new"($P2157, "keyed" :named("scope"), "Undef" :named("viviself"), $P2158 :named("vivibase"))
+.annotate 'line', 769
+    $P2160 = $P2153."!make"($P2159)
+.annotate 'line', 768
+    .return ($P2160)
+  control_2150:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2055, exception, "payload"
-    .return ($P2055)
+    getattribute $P2161, exception, "payload"
+    .return ($P2161)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postcircumfix:sym<ang>"  :subid("111_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2059
-.annotate 'line', 748
-    new $P2058, 'ExceptionHandler'
-    set_addr $P2058, control_2057
-    $P2058."handle_types"(.CONTROL_RETURN)
-    push_eh $P2058
-    .lex "self", self
-    .lex "$/", param_2059
-.annotate 'line', 749
-    find_lex $P2060, "$/"
-    get_hll_global $P2061, ["PAST"], "Var"
-    find_lex $P2062, "$/"
-    unless_null $P2062, vivify_612
-    $P2062 = root_new ['parrot';'Hash']
-  vivify_612:
-    set $P2063, $P2062["quote_EXPR"]
-    unless_null $P2063, vivify_613
-    new $P2063, "Undef"
-  vivify_613:
-    $P2064 = $P2063."ast"()
-.annotate 'line', 751
-    $P2065 = "vivitype"("%")
-    $P2066 = $P2061."new"($P2064, "keyed" :named("scope"), "Undef" :named("viviself"), $P2065 :named("vivibase"))
-.annotate 'line', 749
-    $P2067 = $P2060."!make"($P2066)
-.annotate 'line', 748
-    .return ($P2067)
-  control_2057:
+.sub "postcircumfix:sym<ang>"  :subid("116_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2165
+.annotate 'line', 774
+    new $P2164, 'ExceptionHandler'
+    set_addr $P2164, control_2163
+    $P2164."handle_types"(.CONTROL_RETURN)
+    push_eh $P2164
+    .lex "self", self
+    .lex "$/", param_2165
+.annotate 'line', 775
+    find_lex $P2166, "$/"
+    get_hll_global $P2167, ["PAST"], "Var"
+    find_lex $P2168, "$/"
+    unless_null $P2168, vivify_639
+    $P2168 = root_new ['parrot';'Hash']
+  vivify_639:
+    set $P2169, $P2168["quote_EXPR"]
+    unless_null $P2169, vivify_640
+    new $P2169, "Undef"
+  vivify_640:
+    $P2170 = $P2169."ast"()
+.annotate 'line', 777
+    $P2171 = "vivitype"("%")
+    $P2172 = $P2167."new"($P2170, "keyed" :named("scope"), "Undef" :named("viviself"), $P2171 :named("vivibase"))
+.annotate 'line', 775
+    $P2173 = $P2166."!make"($P2172)
+.annotate 'line', 774
+    .return ($P2173)
+  control_2163:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2068, exception, "payload"
-    .return ($P2068)
+    getattribute $P2174, exception, "payload"
+    .return ($P2174)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postcircumfix:sym<( )>"  :subid("112_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2072
-.annotate 'line', 754
-    new $P2071, 'ExceptionHandler'
-    set_addr $P2071, control_2070
-    $P2071."handle_types"(.CONTROL_RETURN)
-    push_eh $P2071
+.sub "postcircumfix:sym<( )>"  :subid("117_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2178
+.annotate 'line', 780
+    new $P2177, 'ExceptionHandler'
+    set_addr $P2177, control_2176
+    $P2177."handle_types"(.CONTROL_RETURN)
+    push_eh $P2177
     .lex "self", self
-    .lex "$/", param_2072
-.annotate 'line', 755
-    find_lex $P2073, "$/"
-    find_lex $P2074, "$/"
-    unless_null $P2074, vivify_614
-    $P2074 = root_new ['parrot';'Hash']
-  vivify_614:
-    set $P2075, $P2074["arglist"]
-    unless_null $P2075, vivify_615
-    new $P2075, "Undef"
-  vivify_615:
-    $P2076 = $P2075."ast"()
-    $P2077 = $P2073."!make"($P2076)
-.annotate 'line', 754
-    .return ($P2077)
-  control_2070:
+    .lex "$/", param_2178
+.annotate 'line', 781
+    find_lex $P2179, "$/"
+    find_lex $P2180, "$/"
+    unless_null $P2180, vivify_641
+    $P2180 = root_new ['parrot';'Hash']
+  vivify_641:
+    set $P2181, $P2180["arglist"]
+    unless_null $P2181, vivify_642
+    new $P2181, "Undef"
+  vivify_642:
+    $P2182 = $P2181."ast"()
+    $P2183 = $P2179."!make"($P2182)
+.annotate 'line', 780
+    .return ($P2183)
+  control_2176:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2078, exception, "payload"
-    .return ($P2078)
+    getattribute $P2184, exception, "payload"
+    .return ($P2184)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "value"  :subid("113_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2082
-.annotate 'line', 758
-    new $P2081, 'ExceptionHandler'
-    set_addr $P2081, control_2080
-    $P2081."handle_types"(.CONTROL_RETURN)
-    push_eh $P2081
+.sub "value"  :subid("118_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2188
+.annotate 'line', 784
+    new $P2187, 'ExceptionHandler'
+    set_addr $P2187, control_2186
+    $P2187."handle_types"(.CONTROL_RETURN)
+    push_eh $P2187
     .lex "self", self
-    .lex "$/", param_2082
-.annotate 'line', 759
-    find_lex $P2083, "$/"
-    find_lex $P2086, "$/"
-    unless_null $P2086, vivify_616
-    $P2086 = root_new ['parrot';'Hash']
-  vivify_616:
-    set $P2087, $P2086["quote"]
-    unless_null $P2087, vivify_617
-    new $P2087, "Undef"
-  vivify_617:
-    if $P2087, if_2085
-    find_lex $P2091, "$/"
-    unless_null $P2091, vivify_618
-    $P2091 = root_new ['parrot';'Hash']
-  vivify_618:
-    set $P2092, $P2091["number"]
-    unless_null $P2092, vivify_619
-    new $P2092, "Undef"
-  vivify_619:
-    $P2093 = $P2092."ast"()
-    set $P2084, $P2093
-    goto if_2085_end
-  if_2085:
-    find_lex $P2088, "$/"
-    unless_null $P2088, vivify_620
-    $P2088 = root_new ['parrot';'Hash']
-  vivify_620:
-    set $P2089, $P2088["quote"]
-    unless_null $P2089, vivify_621
-    new $P2089, "Undef"
-  vivify_621:
-    $P2090 = $P2089."ast"()
-    set $P2084, $P2090
-  if_2085_end:
-    $P2094 = $P2083."!make"($P2084)
-.annotate 'line', 758
-    .return ($P2094)
-  control_2080:
+    .lex "$/", param_2188
+.annotate 'line', 785
+    find_lex $P2189, "$/"
+    find_lex $P2192, "$/"
+    unless_null $P2192, vivify_643
+    $P2192 = root_new ['parrot';'Hash']
+  vivify_643:
+    set $P2193, $P2192["quote"]
+    unless_null $P2193, vivify_644
+    new $P2193, "Undef"
+  vivify_644:
+    if $P2193, if_2191
+    find_lex $P2197, "$/"
+    unless_null $P2197, vivify_645
+    $P2197 = root_new ['parrot';'Hash']
+  vivify_645:
+    set $P2198, $P2197["number"]
+    unless_null $P2198, vivify_646
+    new $P2198, "Undef"
+  vivify_646:
+    $P2199 = $P2198."ast"()
+    set $P2190, $P2199
+    goto if_2191_end
+  if_2191:
+    find_lex $P2194, "$/"
+    unless_null $P2194, vivify_647
+    $P2194 = root_new ['parrot';'Hash']
+  vivify_647:
+    set $P2195, $P2194["quote"]
+    unless_null $P2195, vivify_648
+    new $P2195, "Undef"
+  vivify_648:
+    $P2196 = $P2195."ast"()
+    set $P2190, $P2196
+  if_2191_end:
+    $P2200 = $P2189."!make"($P2190)
+.annotate 'line', 784
+    .return ($P2200)
+  control_2186:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2095, exception, "payload"
-    .return ($P2095)
+    getattribute $P2201, exception, "payload"
+    .return ($P2201)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "number"  :subid("114_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2099
-.annotate 'line', 762
-    new $P2098, 'ExceptionHandler'
-    set_addr $P2098, control_2097
-    $P2098."handle_types"(.CONTROL_RETURN)
-    push_eh $P2098
+.sub "number"  :subid("119_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2205
+.annotate 'line', 788
+    new $P2204, 'ExceptionHandler'
+    set_addr $P2204, control_2203
+    $P2204."handle_types"(.CONTROL_RETURN)
+    push_eh $P2204
     .lex "self", self
-    .lex "$/", param_2099
-.annotate 'line', 763
-    new $P2100, "Undef"
-    .lex "$value", $P2100
-    find_lex $P2103, "$/"
-    unless_null $P2103, vivify_622
-    $P2103 = root_new ['parrot';'Hash']
-  vivify_622:
-    set $P2104, $P2103["dec_number"]
-    unless_null $P2104, vivify_623
-    new $P2104, "Undef"
-  vivify_623:
-    if $P2104, if_2102
-    find_lex $P2108, "$/"
-    unless_null $P2108, vivify_624
-    $P2108 = root_new ['parrot';'Hash']
-  vivify_624:
-    set $P2109, $P2108["integer"]
-    unless_null $P2109, vivify_625
-    new $P2109, "Undef"
-  vivify_625:
-    $P2110 = $P2109."ast"()
-    set $P2101, $P2110
-    goto if_2102_end
-  if_2102:
-    find_lex $P2105, "$/"
-    unless_null $P2105, vivify_626
-    $P2105 = root_new ['parrot';'Hash']
-  vivify_626:
-    set $P2106, $P2105["dec_number"]
-    unless_null $P2106, vivify_627
-    new $P2106, "Undef"
-  vivify_627:
-    $P2107 = $P2106."ast"()
-    set $P2101, $P2107
-  if_2102_end:
-    store_lex "$value", $P2101
-.annotate 'line', 764
-    find_lex $P2112, "$/"
-    unless_null $P2112, vivify_628
-    $P2112 = root_new ['parrot';'Hash']
-  vivify_628:
-    set $P2113, $P2112["sign"]
-    unless_null $P2113, vivify_629
-    new $P2113, "Undef"
-  vivify_629:
-    set $S2114, $P2113
-    iseq $I2115, $S2114, "-"
-    unless $I2115, if_2111_end
-    find_lex $P2116, "$value"
-    neg $P2117, $P2116
-    store_lex "$value", $P2117
-  if_2111_end:
-.annotate 'line', 765
-    find_lex $P2118, "$/"
-    get_hll_global $P2119, ["PAST"], "Val"
-    find_lex $P2120, "$value"
-    $P2121 = $P2119."new"($P2120 :named("value"))
-    $P2122 = $P2118."!make"($P2121)
-.annotate 'line', 762
-    .return ($P2122)
-  control_2097:
+    .lex "$/", param_2205
+.annotate 'line', 789
+    new $P2206, "Undef"
+    .lex "$value", $P2206
+    find_lex $P2209, "$/"
+    unless_null $P2209, vivify_649
+    $P2209 = root_new ['parrot';'Hash']
+  vivify_649:
+    set $P2210, $P2209["dec_number"]
+    unless_null $P2210, vivify_650
+    new $P2210, "Undef"
+  vivify_650:
+    if $P2210, if_2208
+    find_lex $P2214, "$/"
+    unless_null $P2214, vivify_651
+    $P2214 = root_new ['parrot';'Hash']
+  vivify_651:
+    set $P2215, $P2214["integer"]
+    unless_null $P2215, vivify_652
+    new $P2215, "Undef"
+  vivify_652:
+    $P2216 = $P2215."ast"()
+    set $P2207, $P2216
+    goto if_2208_end
+  if_2208:
+    find_lex $P2211, "$/"
+    unless_null $P2211, vivify_653
+    $P2211 = root_new ['parrot';'Hash']
+  vivify_653:
+    set $P2212, $P2211["dec_number"]
+    unless_null $P2212, vivify_654
+    new $P2212, "Undef"
+  vivify_654:
+    $P2213 = $P2212."ast"()
+    set $P2207, $P2213
+  if_2208_end:
+    store_lex "$value", $P2207
+.annotate 'line', 790
+    find_lex $P2218, "$/"
+    unless_null $P2218, vivify_655
+    $P2218 = root_new ['parrot';'Hash']
+  vivify_655:
+    set $P2219, $P2218["sign"]
+    unless_null $P2219, vivify_656
+    new $P2219, "Undef"
+  vivify_656:
+    set $S2220, $P2219
+    iseq $I2221, $S2220, "-"
+    unless $I2221, if_2217_end
+    find_lex $P2222, "$value"
+    neg $P2223, $P2222
+    store_lex "$value", $P2223
+  if_2217_end:
+.annotate 'line', 791
+    find_lex $P2224, "$/"
+    get_hll_global $P2225, ["PAST"], "Val"
+    find_lex $P2226, "$value"
+    $P2227 = $P2225."new"($P2226 :named("value"))
+    $P2228 = $P2224."!make"($P2227)
+.annotate 'line', 788
+    .return ($P2228)
+  control_2203:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2123, exception, "payload"
-    .return ($P2123)
+    getattribute $P2229, exception, "payload"
+    .return ($P2229)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym<apos>"  :subid("115_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2127
-.annotate 'line', 768
-    new $P2126, 'ExceptionHandler'
-    set_addr $P2126, control_2125
-    $P2126."handle_types"(.CONTROL_RETURN)
-    push_eh $P2126
-    .lex "self", self
-    .lex "$/", param_2127
-    find_lex $P2128, "$/"
-    find_lex $P2129, "$/"
-    unless_null $P2129, vivify_630
-    $P2129 = root_new ['parrot';'Hash']
-  vivify_630:
-    set $P2130, $P2129["quote_EXPR"]
-    unless_null $P2130, vivify_631
-    new $P2130, "Undef"
-  vivify_631:
-    $P2131 = $P2130."ast"()
-    $P2132 = $P2128."!make"($P2131)
-    .return ($P2132)
-  control_2125:
+.sub "quote:sym<apos>"  :subid("120_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2233
+.annotate 'line', 794
+    new $P2232, 'ExceptionHandler'
+    set_addr $P2232, control_2231
+    $P2232."handle_types"(.CONTROL_RETURN)
+    push_eh $P2232
+    .lex "self", self
+    .lex "$/", param_2233
+    find_lex $P2234, "$/"
+    find_lex $P2235, "$/"
+    unless_null $P2235, vivify_657
+    $P2235 = root_new ['parrot';'Hash']
+  vivify_657:
+    set $P2236, $P2235["quote_EXPR"]
+    unless_null $P2236, vivify_658
+    new $P2236, "Undef"
+  vivify_658:
+    $P2237 = $P2236."ast"()
+    $P2238 = $P2234."!make"($P2237)
+    .return ($P2238)
+  control_2231:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2133, exception, "payload"
-    .return ($P2133)
+    getattribute $P2239, exception, "payload"
+    .return ($P2239)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym<dblq>"  :subid("116_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2137
-.annotate 'line', 769
-    new $P2136, 'ExceptionHandler'
-    set_addr $P2136, control_2135
-    $P2136."handle_types"(.CONTROL_RETURN)
-    push_eh $P2136
-    .lex "self", self
-    .lex "$/", param_2137
-    find_lex $P2138, "$/"
-    find_lex $P2139, "$/"
-    unless_null $P2139, vivify_632
-    $P2139 = root_new ['parrot';'Hash']
-  vivify_632:
-    set $P2140, $P2139["quote_EXPR"]
-    unless_null $P2140, vivify_633
-    new $P2140, "Undef"
-  vivify_633:
-    $P2141 = $P2140."ast"()
-    $P2142 = $P2138."!make"($P2141)
-    .return ($P2142)
-  control_2135:
+.sub "quote:sym<dblq>"  :subid("121_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2243
+.annotate 'line', 795
+    new $P2242, 'ExceptionHandler'
+    set_addr $P2242, control_2241
+    $P2242."handle_types"(.CONTROL_RETURN)
+    push_eh $P2242
+    .lex "self", self
+    .lex "$/", param_2243
+    find_lex $P2244, "$/"
+    find_lex $P2245, "$/"
+    unless_null $P2245, vivify_659
+    $P2245 = root_new ['parrot';'Hash']
+  vivify_659:
+    set $P2246, $P2245["quote_EXPR"]
+    unless_null $P2246, vivify_660
+    new $P2246, "Undef"
+  vivify_660:
+    $P2247 = $P2246."ast"()
+    $P2248 = $P2244."!make"($P2247)
+    .return ($P2248)
+  control_2241:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2143, exception, "payload"
-    .return ($P2143)
+    getattribute $P2249, exception, "payload"
+    .return ($P2249)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym<qq>"  :subid("117_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2147
-.annotate 'line', 770
-    new $P2146, 'ExceptionHandler'
-    set_addr $P2146, control_2145
-    $P2146."handle_types"(.CONTROL_RETURN)
-    push_eh $P2146
+.sub "quote:sym<qq>"  :subid("122_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2253
+.annotate 'line', 796
+    new $P2252, 'ExceptionHandler'
+    set_addr $P2252, control_2251
+    $P2252."handle_types"(.CONTROL_RETURN)
+    push_eh $P2252
     .lex "self", self
-    .lex "$/", param_2147
-    find_lex $P2148, "$/"
-    find_lex $P2149, "$/"
-    unless_null $P2149, vivify_634
-    $P2149 = root_new ['parrot';'Hash']
-  vivify_634:
-    set $P2150, $P2149["quote_EXPR"]
-    unless_null $P2150, vivify_635
-    new $P2150, "Undef"
-  vivify_635:
-    $P2151 = $P2150."ast"()
-    $P2152 = $P2148."!make"($P2151)
-    .return ($P2152)
-  control_2145:
+    .lex "$/", param_2253
+    find_lex $P2254, "$/"
+    find_lex $P2255, "$/"
+    unless_null $P2255, vivify_661
+    $P2255 = root_new ['parrot';'Hash']
+  vivify_661:
+    set $P2256, $P2255["quote_EXPR"]
+    unless_null $P2256, vivify_662
+    new $P2256, "Undef"
+  vivify_662:
+    $P2257 = $P2256."ast"()
+    $P2258 = $P2254."!make"($P2257)
+    .return ($P2258)
+  control_2251:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2153, exception, "payload"
-    .return ($P2153)
+    getattribute $P2259, exception, "payload"
+    .return ($P2259)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym<q>"  :subid("118_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2157
-.annotate 'line', 771
-    new $P2156, 'ExceptionHandler'
-    set_addr $P2156, control_2155
-    $P2156."handle_types"(.CONTROL_RETURN)
-    push_eh $P2156
-    .lex "self", self
-    .lex "$/", param_2157
-    find_lex $P2158, "$/"
-    find_lex $P2159, "$/"
-    unless_null $P2159, vivify_636
-    $P2159 = root_new ['parrot';'Hash']
-  vivify_636:
-    set $P2160, $P2159["quote_EXPR"]
-    unless_null $P2160, vivify_637
-    new $P2160, "Undef"
-  vivify_637:
-    $P2161 = $P2160."ast"()
-    $P2162 = $P2158."!make"($P2161)
-    .return ($P2162)
-  control_2155:
+.sub "quote:sym<q>"  :subid("123_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2263
+.annotate 'line', 797
+    new $P2262, 'ExceptionHandler'
+    set_addr $P2262, control_2261
+    $P2262."handle_types"(.CONTROL_RETURN)
+    push_eh $P2262
+    .lex "self", self
+    .lex "$/", param_2263
+    find_lex $P2264, "$/"
+    find_lex $P2265, "$/"
+    unless_null $P2265, vivify_663
+    $P2265 = root_new ['parrot';'Hash']
+  vivify_663:
+    set $P2266, $P2265["quote_EXPR"]
+    unless_null $P2266, vivify_664
+    new $P2266, "Undef"
+  vivify_664:
+    $P2267 = $P2266."ast"()
+    $P2268 = $P2264."!make"($P2267)
+    .return ($P2268)
+  control_2261:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2163, exception, "payload"
-    .return ($P2163)
+    getattribute $P2269, exception, "payload"
+    .return ($P2269)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym<Q>"  :subid("119_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2167
-.annotate 'line', 772
-    new $P2166, 'ExceptionHandler'
-    set_addr $P2166, control_2165
-    $P2166."handle_types"(.CONTROL_RETURN)
-    push_eh $P2166
-    .lex "self", self
-    .lex "$/", param_2167
-    find_lex $P2168, "$/"
-    find_lex $P2169, "$/"
-    unless_null $P2169, vivify_638
-    $P2169 = root_new ['parrot';'Hash']
-  vivify_638:
-    set $P2170, $P2169["quote_EXPR"]
-    unless_null $P2170, vivify_639
-    new $P2170, "Undef"
-  vivify_639:
-    $P2171 = $P2170."ast"()
-    $P2172 = $P2168."!make"($P2171)
-    .return ($P2172)
-  control_2165:
+.sub "quote:sym<Q>"  :subid("124_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2273
+.annotate 'line', 798
+    new $P2272, 'ExceptionHandler'
+    set_addr $P2272, control_2271
+    $P2272."handle_types"(.CONTROL_RETURN)
+    push_eh $P2272
+    .lex "self", self
+    .lex "$/", param_2273
+    find_lex $P2274, "$/"
+    find_lex $P2275, "$/"
+    unless_null $P2275, vivify_665
+    $P2275 = root_new ['parrot';'Hash']
+  vivify_665:
+    set $P2276, $P2275["quote_EXPR"]
+    unless_null $P2276, vivify_666
+    new $P2276, "Undef"
+  vivify_666:
+    $P2277 = $P2276."ast"()
+    $P2278 = $P2274."!make"($P2277)
+    .return ($P2278)
+  control_2271:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2173, exception, "payload"
-    .return ($P2173)
+    getattribute $P2279, exception, "payload"
+    .return ($P2279)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym<Q:PIR>"  :subid("120_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2177
-.annotate 'line', 773
-    new $P2176, 'ExceptionHandler'
-    set_addr $P2176, control_2175
-    $P2176."handle_types"(.CONTROL_RETURN)
-    push_eh $P2176
-    .lex "self", self
-    .lex "$/", param_2177
-.annotate 'line', 774
-    find_lex $P2178, "$/"
-    get_hll_global $P2179, ["PAST"], "Op"
-    find_lex $P2180, "$/"
-    unless_null $P2180, vivify_640
-    $P2180 = root_new ['parrot';'Hash']
-  vivify_640:
-    set $P2181, $P2180["quote_EXPR"]
-    unless_null $P2181, vivify_641
-    new $P2181, "Undef"
-  vivify_641:
-    $P2182 = $P2181."ast"()
-    $P2183 = $P2182."value"()
-    find_lex $P2184, "$/"
-    $P2185 = $P2179."new"($P2183 :named("inline"), "inline" :named("pasttype"), $P2184 :named("node"))
-    $P2186 = $P2178."!make"($P2185)
-.annotate 'line', 773
-    .return ($P2186)
-  control_2175:
+.sub "quote:sym<Q:PIR>"  :subid("125_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2283
+.annotate 'line', 799
+    new $P2282, 'ExceptionHandler'
+    set_addr $P2282, control_2281
+    $P2282."handle_types"(.CONTROL_RETURN)
+    push_eh $P2282
+    .lex "self", self
+    .lex "$/", param_2283
+.annotate 'line', 800
+    find_lex $P2284, "$/"
+    get_hll_global $P2285, ["PAST"], "Op"
+    find_lex $P2286, "$/"
+    unless_null $P2286, vivify_667
+    $P2286 = root_new ['parrot';'Hash']
+  vivify_667:
+    set $P2287, $P2286["quote_EXPR"]
+    unless_null $P2287, vivify_668
+    new $P2287, "Undef"
+  vivify_668:
+    $P2288 = $P2287."ast"()
+    $P2289 = $P2288."value"()
+    find_lex $P2290, "$/"
+    $P2291 = $P2285."new"($P2289 :named("inline"), "inline" :named("pasttype"), $P2290 :named("node"))
+    $P2292 = $P2284."!make"($P2291)
+.annotate 'line', 799
+    .return ($P2292)
+  control_2281:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2187, exception, "payload"
-    .return ($P2187)
+    getattribute $P2293, exception, "payload"
+    .return ($P2293)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote:sym</ />"  :subid("121_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2191
-    .param pmc param_2192 :optional
-    .param int has_param_2192 :opt_flag
-.annotate 'line', 779
-    new $P2190, 'ExceptionHandler'
-    set_addr $P2190, control_2189
-    $P2190."handle_types"(.CONTROL_RETURN)
-    push_eh $P2190
-    .lex "self", self
-    .lex "$/", param_2191
-    if has_param_2192, optparam_642
-    new $P2193, "Undef"
-    set param_2192, $P2193
-  optparam_642:
-    .lex "$key", param_2192
-.annotate 'line', 789
-    new $P2194, "Undef"
-    .lex "$regex", $P2194
-.annotate 'line', 791
-    new $P2195, "Undef"
-    .lex "$past", $P2195
-.annotate 'line', 780
-    find_lex $P2197, "$key"
-    set $S2198, $P2197
-    iseq $I2199, $S2198, "open"
-    unless $I2199, if_2196_end
-.annotate 'line', 781
+.sub "quote:sym</ />"  :subid("126_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2297
+    .param pmc param_2298 :optional
+    .param int has_param_2298 :opt_flag
+.annotate 'line', 805
+    new $P2296, 'ExceptionHandler'
+    set_addr $P2296, control_2295
+    $P2296."handle_types"(.CONTROL_RETURN)
+    push_eh $P2296
+    .lex "self", self
+    .lex "$/", param_2297
+    if has_param_2298, optparam_669
+    new $P2299, "Undef"
+    set param_2298, $P2299
+  optparam_669:
+    .lex "$key", param_2298
+.annotate 'line', 815
+    new $P2300, "Undef"
+    .lex "$regex", $P2300
+.annotate 'line', 817
+    new $P2301, "Undef"
+    .lex "$past", $P2301
+.annotate 'line', 806
+    find_lex $P2303, "$key"
+    set $S2304, $P2303
+    iseq $I2305, $S2304, "open"
+    unless $I2305, if_2302_end
+.annotate 'line', 807
 
             null $P0
             set_hll_global ['Regex';'P6Regex';'Actions'], '$REGEXNAME', $P0
         
-.annotate 'line', 785
-    get_global $P2200, "@BLOCK"
-    unless_null $P2200, vivify_643
-    $P2200 = root_new ['parrot';'ResizablePMCArray']
-  vivify_643:
-    set $P2201, $P2200[0]
-    unless_null $P2201, vivify_644
-    new $P2201, "Undef"
-  vivify_644:
-    $P2201."symbol"(unicode:"$\x{a2}", "lexical" :named("scope"))
-.annotate 'line', 786
-    get_global $P2202, "@BLOCK"
-    unless_null $P2202, vivify_645
-    $P2202 = root_new ['parrot';'ResizablePMCArray']
-  vivify_645:
-    set $P2203, $P2202[0]
-    unless_null $P2203, vivify_646
-    new $P2203, "Undef"
-  vivify_646:
-    $P2203."symbol"("$/", "lexical" :named("scope"))
-.annotate 'line', 787
-    new $P2204, "Exception"
-    set $P2204['type'], .CONTROL_RETURN
-    new $P2205, "Integer"
-    assign $P2205, 0
-    setattribute $P2204, 'payload', $P2205
-    throw $P2204
-  if_2196_end:
-.annotate 'line', 790
-    get_hll_global $P2206, ["Regex";"P6Regex";"Actions"], "buildsub"
-    find_lex $P2207, "$/"
-    unless_null $P2207, vivify_647
-    $P2207 = root_new ['parrot';'Hash']
-  vivify_647:
-    set $P2208, $P2207["p6regex"]
-    unless_null $P2208, vivify_648
-    new $P2208, "Undef"
-  vivify_648:
-    $P2209 = $P2208."ast"()
-    get_global $P2210, "@BLOCK"
-    $P2211 = $P2210."shift"()
-    $P2212 = $P2206($P2209, $P2211)
-    store_lex "$regex", $P2212
-.annotate 'line', 792
-    get_hll_global $P2213, ["PAST"], "Op"
-.annotate 'line', 794
-    get_hll_global $P2214, ["PAST"], "Var"
-    new $P2215, "ResizablePMCArray"
-    push $P2215, "Regex"
-    $P2216 = $P2214."new"("Regex" :named("name"), $P2215 :named("namespace"), "package" :named("scope"))
-    find_lex $P2217, "$regex"
-    $P2218 = $P2213."new"($P2216, $P2217, "callmethod" :named("pasttype"), "new" :named("name"))
-.annotate 'line', 792
-    store_lex "$past", $P2218
-.annotate 'line', 798
-    find_lex $P2219, "$regex"
-    find_lex $P2220, "$past"
-    unless_null $P2220, vivify_649
-    $P2220 = root_new ['parrot';'Hash']
-    store_lex "$past", $P2220
-  vivify_649:
-    set $P2220["sink"], $P2219
-.annotate 'line', 799
-    find_lex $P2221, "$/"
-    find_lex $P2222, "$past"
-    $P2223 = $P2221."!make"($P2222)
-.annotate 'line', 779
-    .return ($P2223)
-  control_2189:
+.annotate 'line', 811
+    get_global $P2306, "@BLOCK"
+    unless_null $P2306, vivify_670
+    $P2306 = root_new ['parrot';'ResizablePMCArray']
+  vivify_670:
+    set $P2307, $P2306[0]
+    unless_null $P2307, vivify_671
+    new $P2307, "Undef"
+  vivify_671:
+    $P2307."symbol"(unicode:"$\x{a2}", "lexical" :named("scope"))
+.annotate 'line', 812
+    get_global $P2308, "@BLOCK"
+    unless_null $P2308, vivify_672
+    $P2308 = root_new ['parrot';'ResizablePMCArray']
+  vivify_672:
+    set $P2309, $P2308[0]
+    unless_null $P2309, vivify_673
+    new $P2309, "Undef"
+  vivify_673:
+    $P2309."symbol"("$/", "lexical" :named("scope"))
+.annotate 'line', 813
+    new $P2310, "Exception"
+    set $P2310['type'], .CONTROL_RETURN
+    new $P2311, "Integer"
+    assign $P2311, 0
+    setattribute $P2310, 'payload', $P2311
+    throw $P2310
+  if_2302_end:
+.annotate 'line', 816
+    get_hll_global $P2312, ["Regex";"P6Regex";"Actions"], "buildsub"
+    find_lex $P2313, "$/"
+    unless_null $P2313, vivify_674
+    $P2313 = root_new ['parrot';'Hash']
+  vivify_674:
+    set $P2314, $P2313["p6regex"]
+    unless_null $P2314, vivify_675
+    new $P2314, "Undef"
+  vivify_675:
+    $P2315 = $P2314."ast"()
+    get_global $P2316, "@BLOCK"
+    $P2317 = $P2316."shift"()
+    $P2318 = $P2312($P2315, $P2317)
+    store_lex "$regex", $P2318
+.annotate 'line', 818
+    get_hll_global $P2319, ["PAST"], "Op"
+.annotate 'line', 820
+    get_hll_global $P2320, ["PAST"], "Var"
+    new $P2321, "ResizablePMCArray"
+    push $P2321, "Regex"
+    $P2322 = $P2320."new"("Regex" :named("name"), $P2321 :named("namespace"), "package" :named("scope"))
+    find_lex $P2323, "$regex"
+    $P2324 = $P2319."new"($P2322, $P2323, "callmethod" :named("pasttype"), "new" :named("name"))
+.annotate 'line', 818
+    store_lex "$past", $P2324
+.annotate 'line', 824
+    find_lex $P2325, "$regex"
+    find_lex $P2326, "$past"
+    unless_null $P2326, vivify_676
+    $P2326 = root_new ['parrot';'Hash']
+    store_lex "$past", $P2326
+  vivify_676:
+    set $P2326["sink"], $P2325
+.annotate 'line', 825
+    find_lex $P2327, "$/"
+    find_lex $P2328, "$past"
+    $P2329 = $P2327."!make"($P2328)
+.annotate 'line', 805
+    .return ($P2329)
+  control_2295:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2224, exception, "payload"
-    .return ($P2224)
+    getattribute $P2330, exception, "payload"
+    .return ($P2330)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<$>"  :subid("122_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2228
-.annotate 'line', 802
-    new $P2227, 'ExceptionHandler'
-    set_addr $P2227, control_2226
-    $P2227."handle_types"(.CONTROL_RETURN)
-    push_eh $P2227
-    .lex "self", self
-    .lex "$/", param_2228
-    find_lex $P2229, "$/"
-    find_lex $P2230, "$/"
-    unless_null $P2230, vivify_650
-    $P2230 = root_new ['parrot';'Hash']
-  vivify_650:
-    set $P2231, $P2230["variable"]
-    unless_null $P2231, vivify_651
-    new $P2231, "Undef"
-  vivify_651:
-    $P2232 = $P2231."ast"()
-    $P2233 = $P2229."!make"($P2232)
-    .return ($P2233)
-  control_2226:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P2234, exception, "payload"
-    .return ($P2234)
+.sub "quote_escape:sym<$>"  :subid("127_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2334
+.annotate 'line', 828
+    new $P2333, 'ExceptionHandler'
+    set_addr $P2333, control_2332
+    $P2333."handle_types"(.CONTROL_RETURN)
+    push_eh $P2333
+    .lex "self", self
+    .lex "$/", param_2334
+    find_lex $P2335, "$/"
+    find_lex $P2336, "$/"
+    unless_null $P2336, vivify_677
+    $P2336 = root_new ['parrot';'Hash']
+  vivify_677:
+    set $P2337, $P2336["variable"]
+    unless_null $P2337, vivify_678
+    new $P2337, "Undef"
+  vivify_678:
+    $P2338 = $P2337."ast"()
+    $P2339 = $P2335."!make"($P2338)
+    .return ($P2339)
+  control_2332:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P2340, exception, "payload"
+    .return ($P2340)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<{ }>"  :subid("123_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2238
-.annotate 'line', 803
-    new $P2237, 'ExceptionHandler'
-    set_addr $P2237, control_2236
-    $P2237."handle_types"(.CONTROL_RETURN)
-    push_eh $P2237
-    .lex "self", self
-    .lex "$/", param_2238
-.annotate 'line', 804
-    find_lex $P2239, "$/"
-    get_hll_global $P2240, ["PAST"], "Op"
-.annotate 'line', 805
-    find_lex $P2241, "$/"
-    unless_null $P2241, vivify_652
-    $P2241 = root_new ['parrot';'Hash']
-  vivify_652:
-    set $P2242, $P2241["block"]
-    unless_null $P2242, vivify_653
-    new $P2242, "Undef"
-  vivify_653:
-    $P2243 = $P2242."ast"()
-    $P2244 = "block_immediate"($P2243)
-    find_lex $P2245, "$/"
-    $P2246 = $P2240."new"($P2244, "set S*" :named("pirop"), $P2245 :named("node"))
-.annotate 'line', 804
-    $P2247 = $P2239."!make"($P2246)
-.annotate 'line', 803
-    .return ($P2247)
-  control_2236:
+.sub "quote_escape:sym<{ }>"  :subid("128_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2344
+.annotate 'line', 829
+    new $P2343, 'ExceptionHandler'
+    set_addr $P2343, control_2342
+    $P2343."handle_types"(.CONTROL_RETURN)
+    push_eh $P2343
+    .lex "self", self
+    .lex "$/", param_2344
+.annotate 'line', 830
+    find_lex $P2345, "$/"
+    get_hll_global $P2346, ["PAST"], "Op"
+.annotate 'line', 831
+    find_lex $P2347, "$/"
+    unless_null $P2347, vivify_679
+    $P2347 = root_new ['parrot';'Hash']
+  vivify_679:
+    set $P2348, $P2347["block"]
+    unless_null $P2348, vivify_680
+    new $P2348, "Undef"
+  vivify_680:
+    $P2349 = $P2348."ast"()
+    $P2350 = "block_immediate"($P2349)
+    find_lex $P2351, "$/"
+    $P2352 = $P2346."new"($P2350, "set S*" :named("pirop"), $P2351 :named("node"))
+.annotate 'line', 830
+    $P2353 = $P2345."!make"($P2352)
+.annotate 'line', 829
+    .return ($P2353)
+  control_2342:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2248, exception, "payload"
-    .return ($P2248)
+    getattribute $P2354, exception, "payload"
+    .return ($P2354)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "quote_escape:sym<esc>"  :subid("124_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2252
-.annotate 'line', 808
-    new $P2251, 'ExceptionHandler'
-    set_addr $P2251, control_2250
-    $P2251."handle_types"(.CONTROL_RETURN)
-    push_eh $P2251
+.sub "quote_escape:sym<esc>"  :subid("129_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2358
+.annotate 'line', 834
+    new $P2357, 'ExceptionHandler'
+    set_addr $P2357, control_2356
+    $P2357."handle_types"(.CONTROL_RETURN)
+    push_eh $P2357
     .lex "self", self
-    .lex "$/", param_2252
-    find_lex $P2253, "$/"
-    $P2254 = $P2253."!make"("\e")
-    .return ($P2254)
-  control_2250:
+    .lex "$/", param_2358
+    find_lex $P2359, "$/"
+    $P2360 = $P2359."!make"("\e")
+    .return ($P2360)
+  control_2356:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2255, exception, "payload"
-    .return ($P2255)
+    getattribute $P2361, exception, "payload"
+    .return ($P2361)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postfix:sym<.>"  :subid("125_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2259
-.annotate 'line', 812
-    new $P2258, 'ExceptionHandler'
-    set_addr $P2258, control_2257
-    $P2258."handle_types"(.CONTROL_RETURN)
-    push_eh $P2258
-    .lex "self", self
-    .lex "$/", param_2259
-    find_lex $P2260, "$/"
-    find_lex $P2261, "$/"
-    unless_null $P2261, vivify_654
-    $P2261 = root_new ['parrot';'Hash']
-  vivify_654:
-    set $P2262, $P2261["dotty"]
-    unless_null $P2262, vivify_655
-    new $P2262, "Undef"
-  vivify_655:
-    $P2263 = $P2262."ast"()
-    $P2264 = $P2260."!make"($P2263)
-    .return ($P2264)
-  control_2257:
+.sub "postfix:sym<.>"  :subid("130_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2365
+.annotate 'line', 838
+    new $P2364, 'ExceptionHandler'
+    set_addr $P2364, control_2363
+    $P2364."handle_types"(.CONTROL_RETURN)
+    push_eh $P2364
+    .lex "self", self
+    .lex "$/", param_2365
+    find_lex $P2366, "$/"
+    find_lex $P2367, "$/"
+    unless_null $P2367, vivify_681
+    $P2367 = root_new ['parrot';'Hash']
+  vivify_681:
+    set $P2368, $P2367["dotty"]
+    unless_null $P2368, vivify_682
+    new $P2368, "Undef"
+  vivify_682:
+    $P2369 = $P2368."ast"()
+    $P2370 = $P2366."!make"($P2369)
+    .return ($P2370)
+  control_2363:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2265, exception, "payload"
-    .return ($P2265)
+    getattribute $P2371, exception, "payload"
+    .return ($P2371)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postfix:sym<++>"  :subid("126_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2269
-.annotate 'line', 814
-    new $P2268, 'ExceptionHandler'
-    set_addr $P2268, control_2267
-    $P2268."handle_types"(.CONTROL_RETURN)
-    push_eh $P2268
-    .lex "self", self
-    .lex "$/", param_2269
-.annotate 'line', 815
-    find_lex $P2270, "$/"
-    get_hll_global $P2271, ["PAST"], "Op"
-.annotate 'line', 816
-    new $P2272, "ResizablePMCArray"
-    push $P2272, "    clone %r, %0"
-    push $P2272, "    inc %0"
-    $P2273 = $P2271."new"("postfix:<++>" :named("name"), $P2272 :named("inline"), "inline" :named("pasttype"))
-.annotate 'line', 815
-    $P2274 = $P2270."!make"($P2273)
-.annotate 'line', 814
-    .return ($P2274)
-  control_2267:
+.sub "postfix:sym<++>"  :subid("131_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2375
+.annotate 'line', 840
+    new $P2374, 'ExceptionHandler'
+    set_addr $P2374, control_2373
+    $P2374."handle_types"(.CONTROL_RETURN)
+    push_eh $P2374
+    .lex "self", self
+    .lex "$/", param_2375
+.annotate 'line', 841
+    find_lex $P2376, "$/"
+    get_hll_global $P2377, ["PAST"], "Op"
+.annotate 'line', 842
+    new $P2378, "ResizablePMCArray"
+    push $P2378, "    clone %r, %0"
+    push $P2378, "    inc %0"
+    $P2379 = $P2377."new"("postfix:<++>" :named("name"), $P2378 :named("inline"), "inline" :named("pasttype"))
+.annotate 'line', 841
+    $P2380 = $P2376."!make"($P2379)
+.annotate 'line', 840
+    .return ($P2380)
+  control_2373:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2275, exception, "payload"
-    .return ($P2275)
+    getattribute $P2381, exception, "payload"
+    .return ($P2381)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "postfix:sym<-->"  :subid("127_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2279
-.annotate 'line', 820
-    new $P2278, 'ExceptionHandler'
-    set_addr $P2278, control_2277
-    $P2278."handle_types"(.CONTROL_RETURN)
-    push_eh $P2278
-    .lex "self", self
-    .lex "$/", param_2279
-.annotate 'line', 821
-    find_lex $P2280, "$/"
-    get_hll_global $P2281, ["PAST"], "Op"
-.annotate 'line', 822
-    new $P2282, "ResizablePMCArray"
-    push $P2282, "    clone %r, %0"
-    push $P2282, "    dec %0"
-    $P2283 = $P2281."new"("postfix:<-->" :named("name"), $P2282 :named("inline"), "inline" :named("pasttype"))
-.annotate 'line', 821
-    $P2284 = $P2280."!make"($P2283)
-.annotate 'line', 820
-    .return ($P2284)
-  control_2277:
+.sub "postfix:sym<-->"  :subid("132_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2385
+.annotate 'line', 846
+    new $P2384, 'ExceptionHandler'
+    set_addr $P2384, control_2383
+    $P2384."handle_types"(.CONTROL_RETURN)
+    push_eh $P2384
+    .lex "self", self
+    .lex "$/", param_2385
+.annotate 'line', 847
+    find_lex $P2386, "$/"
+    get_hll_global $P2387, ["PAST"], "Op"
+.annotate 'line', 848
+    new $P2388, "ResizablePMCArray"
+    push $P2388, "    clone %r, %0"
+    push $P2388, "    dec %0"
+    $P2389 = $P2387."new"("postfix:<-->" :named("name"), $P2388 :named("inline"), "inline" :named("pasttype"))
+.annotate 'line', 847
+    $P2390 = $P2386."!make"($P2389)
+.annotate 'line', 846
+    .return ($P2390)
+  control_2383:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2285, exception, "payload"
-    .return ($P2285)
+    getattribute $P2391, exception, "payload"
+    .return ($P2391)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "prefix:sym<make>"  :subid("128_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2289
-.annotate 'line', 826
-    new $P2288, 'ExceptionHandler'
-    set_addr $P2288, control_2287
-    $P2288."handle_types"(.CONTROL_RETURN)
-    push_eh $P2288
+.sub "prefix:sym<make>"  :subid("133_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2395
+.annotate 'line', 852
+    new $P2394, 'ExceptionHandler'
+    set_addr $P2394, control_2393
+    $P2394."handle_types"(.CONTROL_RETURN)
+    push_eh $P2394
     .lex "self", self
-    .lex "$/", param_2289
-.annotate 'line', 827
-    find_lex $P2290, "$/"
-    get_hll_global $P2291, ["PAST"], "Op"
-.annotate 'line', 828
-    get_hll_global $P2292, ["PAST"], "Var"
-    $P2293 = $P2292."new"("$/" :named("name"), "contextual" :named("scope"))
-    find_lex $P2294, "$/"
-    $P2295 = $P2291."new"($P2293, "callmethod" :named("pasttype"), "!make" :named("name"), $P2294 :named("node"))
-.annotate 'line', 827
-    $P2296 = $P2290."!make"($P2295)
-.annotate 'line', 826
-    .return ($P2296)
-  control_2287:
+    .lex "$/", param_2395
+.annotate 'line', 853
+    find_lex $P2396, "$/"
+    get_hll_global $P2397, ["PAST"], "Op"
+.annotate 'line', 854
+    get_hll_global $P2398, ["PAST"], "Var"
+    $P2399 = $P2398."new"("$/" :named("name"), "contextual" :named("scope"))
+    find_lex $P2400, "$/"
+    $P2401 = $P2397."new"($P2399, "callmethod" :named("pasttype"), "!make" :named("name"), $P2400 :named("node"))
+.annotate 'line', 853
+    $P2402 = $P2396."!make"($P2401)
+.annotate 'line', 852
+    .return ($P2402)
+  control_2393:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2297, exception, "payload"
-    .return ($P2297)
+    getattribute $P2403, exception, "payload"
+    .return ($P2403)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<next>"  :subid("129_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2302
-.annotate 'line', 844
-    new $P2301, 'ExceptionHandler'
-    set_addr $P2301, control_2300
-    $P2301."handle_types"(.CONTROL_RETURN)
-    push_eh $P2301
+.sub "term:sym<next>"  :subid("134_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2408
+.annotate 'line', 870
+    new $P2407, 'ExceptionHandler'
+    set_addr $P2407, control_2406
+    $P2407."handle_types"(.CONTROL_RETURN)
+    push_eh $P2407
     .lex "self", self
-    .lex "$/", param_2302
-    find_lex $P2303, "$/"
-    $P2304 = "control"($P2303, "CONTROL_LOOP_NEXT")
-    .return ($P2304)
-  control_2300:
+    .lex "$/", param_2408
+    find_lex $P2409, "$/"
+    $P2410 = "control"($P2409, "CONTROL_LOOP_NEXT")
+    .return ($P2410)
+  control_2406:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2305, exception, "payload"
-    .return ($P2305)
+    getattribute $P2411, exception, "payload"
+    .return ($P2411)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<last>"  :subid("130_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2309
-.annotate 'line', 845
-    new $P2308, 'ExceptionHandler'
-    set_addr $P2308, control_2307
-    $P2308."handle_types"(.CONTROL_RETURN)
-    push_eh $P2308
+.sub "term:sym<last>"  :subid("135_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2415
+.annotate 'line', 871
+    new $P2414, 'ExceptionHandler'
+    set_addr $P2414, control_2413
+    $P2414."handle_types"(.CONTROL_RETURN)
+    push_eh $P2414
     .lex "self", self
-    .lex "$/", param_2309
-    find_lex $P2310, "$/"
-    $P2311 = "control"($P2310, "CONTROL_LOOP_LAST")
-    .return ($P2311)
-  control_2307:
+    .lex "$/", param_2415
+    find_lex $P2416, "$/"
+    $P2417 = "control"($P2416, "CONTROL_LOOP_LAST")
+    .return ($P2417)
+  control_2413:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2312, exception, "payload"
-    .return ($P2312)
+    getattribute $P2418, exception, "payload"
+    .return ($P2418)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "term:sym<redo>"  :subid("131_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2316
-.annotate 'line', 846
-    new $P2315, 'ExceptionHandler'
-    set_addr $P2315, control_2314
-    $P2315."handle_types"(.CONTROL_RETURN)
-    push_eh $P2315
+.sub "term:sym<redo>"  :subid("136_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2422
+.annotate 'line', 872
+    new $P2421, 'ExceptionHandler'
+    set_addr $P2421, control_2420
+    $P2421."handle_types"(.CONTROL_RETURN)
+    push_eh $P2421
     .lex "self", self
-    .lex "$/", param_2316
-    find_lex $P2317, "$/"
-    $P2318 = "control"($P2317, "CONTROL_LOOP_REDO")
-    .return ($P2318)
-  control_2314:
+    .lex "$/", param_2422
+    find_lex $P2423, "$/"
+    $P2424 = "control"($P2423, "CONTROL_LOOP_REDO")
+    .return ($P2424)
+  control_2420:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2319, exception, "payload"
-    .return ($P2319)
+    getattribute $P2425, exception, "payload"
+    .return ($P2425)
 .end
 
 
 .namespace ["NQP";"Actions"]
 .include "except_types.pasm"
-.sub "infix:sym<~~>"  :subid("132_1282324007.53935") :method :outer("11_1282324007.53935")
-    .param pmc param_2323
-.annotate 'line', 848
-    new $P2322, 'ExceptionHandler'
-    set_addr $P2322, control_2321
-    $P2322."handle_types"(.CONTROL_RETURN)
-    push_eh $P2322
-    .lex "self", self
-    .lex "$/", param_2323
-.annotate 'line', 849
-    find_lex $P2324, "$/"
-    get_hll_global $P2325, ["PAST"], "Op"
-    find_lex $P2326, "$/"
-    $P2327 = $P2325."new"("callmethod" :named("pasttype"), "ACCEPTS" :named("name"), $P2326 :named("node"))
-    $P2328 = $P2324."!make"($P2327)
-.annotate 'line', 848
-    .return ($P2328)
-  control_2321:
+.sub "infix:sym<~~>"  :subid("137_1284728484.24945") :method :outer("11_1284728484.24945")
+    .param pmc param_2429
+.annotate 'line', 874
+    new $P2428, 'ExceptionHandler'
+    set_addr $P2428, control_2427
+    $P2428."handle_types"(.CONTROL_RETURN)
+    push_eh $P2428
+    .lex "self", self
+    .lex "$/", param_2429
+.annotate 'line', 875
+    find_lex $P2430, "$/"
+    get_hll_global $P2431, ["PAST"], "Op"
+    find_lex $P2432, "$/"
+    $P2433 = $P2431."new"("callmethod" :named("pasttype"), "ACCEPTS" :named("name"), $P2432 :named("node"))
+    $P2434 = $P2430."!make"($P2433)
+.annotate 'line', 874
+    .return ($P2434)
+  control_2427:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2329, exception, "payload"
-    .return ($P2329)
+    getattribute $P2435, exception, "payload"
+    .return ($P2435)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "_block2330"  :subid("133_1282324007.53935") :outer("11_1282324007.53935")
-.annotate 'line', 853
-    .const 'Sub' $P2416 = "140_1282324007.53935" 
-    capture_lex $P2416
-    .const 'Sub' $P2403 = "139_1282324007.53935" 
-    capture_lex $P2403
-    .const 'Sub' $P2386 = "138_1282324007.53935" 
-    capture_lex $P2386
-    .const 'Sub' $P2373 = "137_1282324007.53935" 
-    capture_lex $P2373
-    .const 'Sub' $P2360 = "136_1282324007.53935" 
-    capture_lex $P2360
-    .const 'Sub' $P2347 = "135_1282324007.53935" 
-    capture_lex $P2347
-    .const 'Sub' $P2332 = "134_1282324007.53935" 
-    capture_lex $P2332
-.annotate 'line', 887
-    .const 'Sub' $P2416 = "140_1282324007.53935" 
-    newclosure $P2441, $P2416
-.annotate 'line', 853
-    .return ($P2441)
+.sub "_block2436"  :subid("138_1284728484.24945") :outer("11_1284728484.24945")
+.annotate 'line', 879
+    .const 'Sub' $P2522 = "145_1284728484.24945" 
+    capture_lex $P2522
+    .const 'Sub' $P2509 = "144_1284728484.24945" 
+    capture_lex $P2509
+    .const 'Sub' $P2492 = "143_1284728484.24945" 
+    capture_lex $P2492
+    .const 'Sub' $P2479 = "142_1284728484.24945" 
+    capture_lex $P2479
+    .const 'Sub' $P2466 = "141_1284728484.24945" 
+    capture_lex $P2466
+    .const 'Sub' $P2453 = "140_1284728484.24945" 
+    capture_lex $P2453
+    .const 'Sub' $P2438 = "139_1284728484.24945" 
+    capture_lex $P2438
+.annotate 'line', 913
+    .const 'Sub' $P2522 = "145_1284728484.24945" 
+    newclosure $P2547, $P2522
+.annotate 'line', 879
+    .return ($P2547)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "metachar:sym<:my>"  :subid("134_1282324007.53935") :method :outer("133_1282324007.53935")
-    .param pmc param_2335
-.annotate 'line', 855
-    new $P2334, 'ExceptionHandler'
-    set_addr $P2334, control_2333
-    $P2334."handle_types"(.CONTROL_RETURN)
-    push_eh $P2334
-    .lex "self", self
-    .lex "$/", param_2335
-.annotate 'line', 856
-    new $P2336, "Undef"
-    .lex "$past", $P2336
-    find_lex $P2337, "$/"
-    unless_null $P2337, vivify_656
-    $P2337 = root_new ['parrot';'Hash']
-  vivify_656:
-    set $P2338, $P2337["statement"]
-    unless_null $P2338, vivify_657
-    new $P2338, "Undef"
-  vivify_657:
-    $P2339 = $P2338."ast"()
-    store_lex "$past", $P2339
-.annotate 'line', 857
-    find_lex $P2340, "$/"
-    get_hll_global $P2341, ["PAST"], "Regex"
-    find_lex $P2342, "$past"
-    find_lex $P2343, "$/"
-    $P2344 = $P2341."new"($P2342, "pastnode" :named("pasttype"), "declarative" :named("subtype"), $P2343 :named("node"))
-    $P2345 = $P2340."!make"($P2344)
-.annotate 'line', 855
-    .return ($P2345)
-  control_2333:
+.sub "metachar:sym<:my>"  :subid("139_1284728484.24945") :method :outer("138_1284728484.24945")
+    .param pmc param_2441
+.annotate 'line', 881
+    new $P2440, 'ExceptionHandler'
+    set_addr $P2440, control_2439
+    $P2440."handle_types"(.CONTROL_RETURN)
+    push_eh $P2440
+    .lex "self", self
+    .lex "$/", param_2441
+.annotate 'line', 882
+    new $P2442, "Undef"
+    .lex "$past", $P2442
+    find_lex $P2443, "$/"
+    unless_null $P2443, vivify_683
+    $P2443 = root_new ['parrot';'Hash']
+  vivify_683:
+    set $P2444, $P2443["statement"]
+    unless_null $P2444, vivify_684
+    new $P2444, "Undef"
+  vivify_684:
+    $P2445 = $P2444."ast"()
+    store_lex "$past", $P2445
+.annotate 'line', 883
+    find_lex $P2446, "$/"
+    get_hll_global $P2447, ["PAST"], "Regex"
+    find_lex $P2448, "$past"
+    find_lex $P2449, "$/"
+    $P2450 = $P2447."new"($P2448, "pastnode" :named("pasttype"), "declarative" :named("subtype"), $P2449 :named("node"))
+    $P2451 = $P2446."!make"($P2450)
+.annotate 'line', 881
+    .return ($P2451)
+  control_2439:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2346, exception, "payload"
-    .return ($P2346)
+    getattribute $P2452, exception, "payload"
+    .return ($P2452)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "metachar:sym<{ }>"  :subid("135_1282324007.53935") :method :outer("133_1282324007.53935")
-    .param pmc param_2350
-.annotate 'line', 861
-    new $P2349, 'ExceptionHandler'
-    set_addr $P2349, control_2348
-    $P2349."handle_types"(.CONTROL_RETURN)
-    push_eh $P2349
+.sub "metachar:sym<{ }>"  :subid("140_1284728484.24945") :method :outer("138_1284728484.24945")
+    .param pmc param_2456
+.annotate 'line', 887
+    new $P2455, 'ExceptionHandler'
+    set_addr $P2455, control_2454
+    $P2455."handle_types"(.CONTROL_RETURN)
+    push_eh $P2455
     .lex "self", self
-    .lex "$/", param_2350
-.annotate 'line', 862
-    find_lex $P2351, "$/"
-    get_hll_global $P2352, ["PAST"], "Regex"
-    find_lex $P2353, "$/"
-    unless_null $P2353, vivify_658
-    $P2353 = root_new ['parrot';'Hash']
-  vivify_658:
-    set $P2354, $P2353["codeblock"]
-    unless_null $P2354, vivify_659
-    new $P2354, "Undef"
-  vivify_659:
-    $P2355 = $P2354."ast"()
-    find_lex $P2356, "$/"
-    $P2357 = $P2352."new"($P2355, "pastnode" :named("pasttype"), $P2356 :named("node"))
-    $P2358 = $P2351."!make"($P2357)
-.annotate 'line', 861
-    .return ($P2358)
-  control_2348:
+    .lex "$/", param_2456
+.annotate 'line', 888
+    find_lex $P2457, "$/"
+    get_hll_global $P2458, ["PAST"], "Regex"
+    find_lex $P2459, "$/"
+    unless_null $P2459, vivify_685
+    $P2459 = root_new ['parrot';'Hash']
+  vivify_685:
+    set $P2460, $P2459["codeblock"]
+    unless_null $P2460, vivify_686
+    new $P2460, "Undef"
+  vivify_686:
+    $P2461 = $P2460."ast"()
+    find_lex $P2462, "$/"
+    $P2463 = $P2458."new"($P2461, "pastnode" :named("pasttype"), $P2462 :named("node"))
+    $P2464 = $P2457."!make"($P2463)
+.annotate 'line', 887
+    .return ($P2464)
+  control_2454:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2359, exception, "payload"
-    .return ($P2359)
+    getattribute $P2465, exception, "payload"
+    .return ($P2465)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "metachar:sym<nqpvar>"  :subid("136_1282324007.53935") :method :outer("133_1282324007.53935")
-    .param pmc param_2363
-.annotate 'line', 866
-    new $P2362, 'ExceptionHandler'
-    set_addr $P2362, control_2361
-    $P2362."handle_types"(.CONTROL_RETURN)
-    push_eh $P2362
-    .lex "self", self
-    .lex "$/", param_2363
-.annotate 'line', 867
-    find_lex $P2364, "$/"
-    get_hll_global $P2365, ["PAST"], "Regex"
-    find_lex $P2366, "$/"
-    unless_null $P2366, vivify_660
-    $P2366 = root_new ['parrot';'Hash']
-  vivify_660:
-    set $P2367, $P2366["var"]
-    unless_null $P2367, vivify_661
-    new $P2367, "Undef"
-  vivify_661:
-    $P2368 = $P2367."ast"()
-    find_lex $P2369, "$/"
-    $P2370 = $P2365."new"("!INTERPOLATE", $P2368, "subrule" :named("pasttype"), "method" :named("subtype"), $P2369 :named("node"))
-    $P2371 = $P2364."!make"($P2370)
-.annotate 'line', 866
-    .return ($P2371)
-  control_2361:
+.sub "metachar:sym<nqpvar>"  :subid("141_1284728484.24945") :method :outer("138_1284728484.24945")
+    .param pmc param_2469
+.annotate 'line', 892
+    new $P2468, 'ExceptionHandler'
+    set_addr $P2468, control_2467
+    $P2468."handle_types"(.CONTROL_RETURN)
+    push_eh $P2468
+    .lex "self", self
+    .lex "$/", param_2469
+.annotate 'line', 893
+    find_lex $P2470, "$/"
+    get_hll_global $P2471, ["PAST"], "Regex"
+    find_lex $P2472, "$/"
+    unless_null $P2472, vivify_687
+    $P2472 = root_new ['parrot';'Hash']
+  vivify_687:
+    set $P2473, $P2472["var"]
+    unless_null $P2473, vivify_688
+    new $P2473, "Undef"
+  vivify_688:
+    $P2474 = $P2473."ast"()
+    find_lex $P2475, "$/"
+    $P2476 = $P2471."new"("!INTERPOLATE", $P2474, "subrule" :named("pasttype"), "method" :named("subtype"), $P2475 :named("node"))
+    $P2477 = $P2470."!make"($P2476)
+.annotate 'line', 892
+    .return ($P2477)
+  control_2467:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2372, exception, "payload"
-    .return ($P2372)
+    getattribute $P2478, exception, "payload"
+    .return ($P2478)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "assertion:sym<{ }>"  :subid("137_1282324007.53935") :method :outer("133_1282324007.53935")
-    .param pmc param_2376
-.annotate 'line', 871
-    new $P2375, 'ExceptionHandler'
-    set_addr $P2375, control_2374
-    $P2375."handle_types"(.CONTROL_RETURN)
-    push_eh $P2375
-    .lex "self", self
-    .lex "$/", param_2376
-.annotate 'line', 872
-    find_lex $P2377, "$/"
-    get_hll_global $P2378, ["PAST"], "Regex"
-    find_lex $P2379, "$/"
-    unless_null $P2379, vivify_662
-    $P2379 = root_new ['parrot';'Hash']
-  vivify_662:
-    set $P2380, $P2379["codeblock"]
-    unless_null $P2380, vivify_663
-    new $P2380, "Undef"
-  vivify_663:
-    $P2381 = $P2380."ast"()
-    find_lex $P2382, "$/"
-    $P2383 = $P2378."new"("!INTERPOLATE_REGEX", $P2381, "subrule" :named("pasttype"), "method" :named("subtype"), $P2382 :named("node"))
-    $P2384 = $P2377."!make"($P2383)
-.annotate 'line', 871
-    .return ($P2384)
-  control_2374:
+.sub "assertion:sym<{ }>"  :subid("142_1284728484.24945") :method :outer("138_1284728484.24945")
+    .param pmc param_2482
+.annotate 'line', 897
+    new $P2481, 'ExceptionHandler'
+    set_addr $P2481, control_2480
+    $P2481."handle_types"(.CONTROL_RETURN)
+    push_eh $P2481
+    .lex "self", self
+    .lex "$/", param_2482
+.annotate 'line', 898
+    find_lex $P2483, "$/"
+    get_hll_global $P2484, ["PAST"], "Regex"
+    find_lex $P2485, "$/"
+    unless_null $P2485, vivify_689
+    $P2485 = root_new ['parrot';'Hash']
+  vivify_689:
+    set $P2486, $P2485["codeblock"]
+    unless_null $P2486, vivify_690
+    new $P2486, "Undef"
+  vivify_690:
+    $P2487 = $P2486."ast"()
+    find_lex $P2488, "$/"
+    $P2489 = $P2484."new"("!INTERPOLATE_REGEX", $P2487, "subrule" :named("pasttype"), "method" :named("subtype"), $P2488 :named("node"))
+    $P2490 = $P2483."!make"($P2489)
+.annotate 'line', 897
+    .return ($P2490)
+  control_2480:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2385, exception, "payload"
-    .return ($P2385)
+    getattribute $P2491, exception, "payload"
+    .return ($P2491)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "assertion:sym<?{ }>"  :subid("138_1282324007.53935") :method :outer("133_1282324007.53935")
-    .param pmc param_2389
-.annotate 'line', 876
-    new $P2388, 'ExceptionHandler'
-    set_addr $P2388, control_2387
-    $P2388."handle_types"(.CONTROL_RETURN)
-    push_eh $P2388
-    .lex "self", self
-    .lex "$/", param_2389
-.annotate 'line', 877
-    find_lex $P2390, "$/"
-    get_hll_global $P2391, ["PAST"], "Regex"
-    find_lex $P2392, "$/"
-    unless_null $P2392, vivify_664
-    $P2392 = root_new ['parrot';'Hash']
-  vivify_664:
-    set $P2393, $P2392["codeblock"]
-    unless_null $P2393, vivify_665
-    new $P2393, "Undef"
-  vivify_665:
-    $P2394 = $P2393."ast"()
-.annotate 'line', 878
-    find_lex $P2395, "$/"
-    unless_null $P2395, vivify_666
-    $P2395 = root_new ['parrot';'Hash']
-  vivify_666:
-    set $P2396, $P2395["zw"]
-    unless_null $P2396, vivify_667
-    new $P2396, "Undef"
-  vivify_667:
-    set $S2397, $P2396
-    iseq $I2398, $S2397, "!"
-    find_lex $P2399, "$/"
-    $P2400 = $P2391."new"($P2394, "zerowidth" :named("subtype"), $I2398 :named("negate"), "pastnode" :named("pasttype"), $P2399 :named("node"))
-.annotate 'line', 877
-    $P2401 = $P2390."!make"($P2400)
-.annotate 'line', 876
-    .return ($P2401)
-  control_2387:
+.sub "assertion:sym<?{ }>"  :subid("143_1284728484.24945") :method :outer("138_1284728484.24945")
+    .param pmc param_2495
+.annotate 'line', 902
+    new $P2494, 'ExceptionHandler'
+    set_addr $P2494, control_2493
+    $P2494."handle_types"(.CONTROL_RETURN)
+    push_eh $P2494
+    .lex "self", self
+    .lex "$/", param_2495
+.annotate 'line', 903
+    find_lex $P2496, "$/"
+    get_hll_global $P2497, ["PAST"], "Regex"
+    find_lex $P2498, "$/"
+    unless_null $P2498, vivify_691
+    $P2498 = root_new ['parrot';'Hash']
+  vivify_691:
+    set $P2499, $P2498["codeblock"]
+    unless_null $P2499, vivify_692
+    new $P2499, "Undef"
+  vivify_692:
+    $P2500 = $P2499."ast"()
+.annotate 'line', 904
+    find_lex $P2501, "$/"
+    unless_null $P2501, vivify_693
+    $P2501 = root_new ['parrot';'Hash']
+  vivify_693:
+    set $P2502, $P2501["zw"]
+    unless_null $P2502, vivify_694
+    new $P2502, "Undef"
+  vivify_694:
+    set $S2503, $P2502
+    iseq $I2504, $S2503, "!"
+    find_lex $P2505, "$/"
+    $P2506 = $P2497."new"($P2500, "zerowidth" :named("subtype"), $I2504 :named("negate"), "pastnode" :named("pasttype"), $P2505 :named("node"))
+.annotate 'line', 903
+    $P2507 = $P2496."!make"($P2506)
+.annotate 'line', 902
+    .return ($P2507)
+  control_2493:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2402, exception, "payload"
-    .return ($P2402)
+    getattribute $P2508, exception, "payload"
+    .return ($P2508)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "assertion:sym<var>"  :subid("139_1282324007.53935") :method :outer("133_1282324007.53935")
-    .param pmc param_2406
-.annotate 'line', 882
-    new $P2405, 'ExceptionHandler'
-    set_addr $P2405, control_2404
-    $P2405."handle_types"(.CONTROL_RETURN)
-    push_eh $P2405
-    .lex "self", self
-    .lex "$/", param_2406
-.annotate 'line', 883
-    find_lex $P2407, "$/"
-    get_hll_global $P2408, ["PAST"], "Regex"
-    find_lex $P2409, "$/"
-    unless_null $P2409, vivify_668
-    $P2409 = root_new ['parrot';'Hash']
-  vivify_668:
-    set $P2410, $P2409["var"]
-    unless_null $P2410, vivify_669
-    new $P2410, "Undef"
-  vivify_669:
-    $P2411 = $P2410."ast"()
-    find_lex $P2412, "$/"
-    $P2413 = $P2408."new"("!INTERPOLATE_REGEX", $P2411, "subrule" :named("pasttype"), "method" :named("subtype"), $P2412 :named("node"))
-    $P2414 = $P2407."!make"($P2413)
-.annotate 'line', 882
-    .return ($P2414)
-  control_2404:
+.sub "assertion:sym<var>"  :subid("144_1284728484.24945") :method :outer("138_1284728484.24945")
+    .param pmc param_2512
+.annotate 'line', 908
+    new $P2511, 'ExceptionHandler'
+    set_addr $P2511, control_2510
+    $P2511."handle_types"(.CONTROL_RETURN)
+    push_eh $P2511
+    .lex "self", self
+    .lex "$/", param_2512
+.annotate 'line', 909
+    find_lex $P2513, "$/"
+    get_hll_global $P2514, ["PAST"], "Regex"
+    find_lex $P2515, "$/"
+    unless_null $P2515, vivify_695
+    $P2515 = root_new ['parrot';'Hash']
+  vivify_695:
+    set $P2516, $P2515["var"]
+    unless_null $P2516, vivify_696
+    new $P2516, "Undef"
+  vivify_696:
+    $P2517 = $P2516."ast"()
+    find_lex $P2518, "$/"
+    $P2519 = $P2514."new"("!INTERPOLATE_REGEX", $P2517, "subrule" :named("pasttype"), "method" :named("subtype"), $P2518 :named("node"))
+    $P2520 = $P2513."!make"($P2519)
+.annotate 'line', 908
+    .return ($P2520)
+  control_2510:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2415, exception, "payload"
-    .return ($P2415)
+    getattribute $P2521, exception, "payload"
+    .return ($P2521)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
 .include "except_types.pasm"
-.sub "codeblock"  :subid("140_1282324007.53935") :method :outer("133_1282324007.53935")
-    .param pmc param_2419
-.annotate 'line', 887
-    new $P2418, 'ExceptionHandler'
-    set_addr $P2418, control_2417
-    $P2418."handle_types"(.CONTROL_RETURN)
-    push_eh $P2418
-    .lex "self", self
-    .lex "$/", param_2419
-.annotate 'line', 888
-    new $P2420, "Undef"
-    .lex "$block", $P2420
-.annotate 'line', 890
-    new $P2421, "Undef"
-    .lex "$past", $P2421
-.annotate 'line', 888
-    find_lex $P2422, "$/"
-    unless_null $P2422, vivify_670
-    $P2422 = root_new ['parrot';'Hash']
-  vivify_670:
-    set $P2423, $P2422["block"]
-    unless_null $P2423, vivify_671
-    new $P2423, "Undef"
-  vivify_671:
-    $P2424 = $P2423."ast"()
-    store_lex "$block", $P2424
-.annotate 'line', 889
-    find_lex $P2425, "$block"
-    $P2425."blocktype"("immediate")
-.annotate 'line', 891
-    get_hll_global $P2426, ["PAST"], "Stmts"
-.annotate 'line', 892
-    get_hll_global $P2427, ["PAST"], "Op"
-.annotate 'line', 893
-    get_hll_global $P2428, ["PAST"], "Var"
-    $P2429 = $P2428."new"("$/" :named("name"))
-.annotate 'line', 894
-    get_hll_global $P2430, ["PAST"], "Op"
-.annotate 'line', 895
-    get_hll_global $P2431, ["PAST"], "Var"
-    $P2432 = $P2431."new"(unicode:"$\x{a2}" :named("name"))
-    $P2433 = $P2430."new"($P2432, "MATCH" :named("name"), "callmethod" :named("pasttype"))
-.annotate 'line', 894
-    $P2434 = $P2427."new"($P2429, $P2433, "bind" :named("pasttype"))
-.annotate 'line', 892
-    find_lex $P2435, "$block"
-    $P2436 = $P2426."new"($P2434, $P2435)
-.annotate 'line', 891
-    store_lex "$past", $P2436
-.annotate 'line', 903
-    find_lex $P2437, "$/"
-    find_lex $P2438, "$past"
-    $P2439 = $P2437."!make"($P2438)
-.annotate 'line', 887
-    .return ($P2439)
-  control_2417:
+.sub "codeblock"  :subid("145_1284728484.24945") :method :outer("138_1284728484.24945")
+    .param pmc param_2525
+.annotate 'line', 913
+    new $P2524, 'ExceptionHandler'
+    set_addr $P2524, control_2523
+    $P2524."handle_types"(.CONTROL_RETURN)
+    push_eh $P2524
+    .lex "self", self
+    .lex "$/", param_2525
+.annotate 'line', 914
+    new $P2526, "Undef"
+    .lex "$block", $P2526
+.annotate 'line', 916
+    new $P2527, "Undef"
+    .lex "$past", $P2527
+.annotate 'line', 914
+    find_lex $P2528, "$/"
+    unless_null $P2528, vivify_697
+    $P2528 = root_new ['parrot';'Hash']
+  vivify_697:
+    set $P2529, $P2528["block"]
+    unless_null $P2529, vivify_698
+    new $P2529, "Undef"
+  vivify_698:
+    $P2530 = $P2529."ast"()
+    store_lex "$block", $P2530
+.annotate 'line', 915
+    find_lex $P2531, "$block"
+    $P2531."blocktype"("immediate")
+.annotate 'line', 917
+    get_hll_global $P2532, ["PAST"], "Stmts"
+.annotate 'line', 918
+    get_hll_global $P2533, ["PAST"], "Op"
+.annotate 'line', 919
+    get_hll_global $P2534, ["PAST"], "Var"
+    $P2535 = $P2534."new"("$/" :named("name"))
+.annotate 'line', 920
+    get_hll_global $P2536, ["PAST"], "Op"
+.annotate 'line', 921
+    get_hll_global $P2537, ["PAST"], "Var"
+    $P2538 = $P2537."new"(unicode:"$\x{a2}" :named("name"))
+    $P2539 = $P2536."new"($P2538, "MATCH" :named("name"), "callmethod" :named("pasttype"))
+.annotate 'line', 920
+    $P2540 = $P2533."new"($P2535, $P2539, "bind" :named("pasttype"))
+.annotate 'line', 918
+    find_lex $P2541, "$block"
+    $P2542 = $P2532."new"($P2540, $P2541)
+.annotate 'line', 917
+    store_lex "$past", $P2542
+.annotate 'line', 929
+    find_lex $P2543, "$/"
+    find_lex $P2544, "$past"
+    $P2545 = $P2543."!make"($P2544)
+.annotate 'line', 913
+    .return ($P2545)
+  control_2523:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2440, exception, "payload"
-    .return ($P2440)
+    getattribute $P2546, exception, "payload"
+    .return ($P2546)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block2443" :load :anon :subid("141_1282324007.53935")
+.sub "_block2549" :load :anon :subid("146_1284728484.24945")
 .annotate 'line', 3
-    .const 'Sub' $P2445 = "11_1282324007.53935" 
-    $P2446 = $P2445()
-    .return ($P2446)
+    .const 'Sub' $P2551 = "11_1284728484.24945" 
+    $P2552 = $P2551()
+    .return ($P2552)
 .end
 
 
 .namespace []
-.sub "_block2453" :load :anon :subid("143_1282324007.53935")
+.sub "_block2559" :load :anon :subid("148_1284728484.24945")
 .annotate 'line', 1
-    .const 'Sub' $P2455 = "10_1282324007.53935" 
-    $P2456 = $P2455()
-    .return ($P2456)
+    .const 'Sub' $P2561 = "10_1284728484.24945" 
+    $P2562 = $P2561()
+    .return ($P2562)
 .end
 
 ### .include 'src/cheats/nqp-builtins.pir'

Modified: branches/html_cleanup/ext/nqp-rx/src/stage0/P6Regex-s0.pir
==============================================================================
--- branches/html_cleanup/ext/nqp-rx/src/stage0/P6Regex-s0.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/ext/nqp-rx/src/stage0/P6Regex-s0.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -16,7 +16,7 @@
 ### .include 'gen/p6regex-grammar.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1282323996.47527")
+.sub "_block11"  :anon :subid("10_1284728471.30547")
 .annotate 'line', 0
     get_hll_global $P14, ["Regex";"P6Regex";"Grammar"], "_block13" 
     capture_lex $P14
@@ -30,155 +30,161 @@
 .annotate 'line', 3
     get_hll_global $P14, ["Regex";"P6Regex";"Grammar"], "_block13" 
     capture_lex $P14
-    $P581 = $P14()
+    $P620 = $P14()
 .annotate 'line', 1
-    .return ($P581)
-    .const 'Sub' $P583 = "163_1282323996.47527" 
-    .return ($P583)
+    .return ($P620)
+    .const 'Sub' $P622 = "174_1284728471.30547" 
+    .return ($P622)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post164") :outer("10_1282323996.47527")
+.sub "" :load :init :subid("post175") :outer("10_1284728471.30547")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1282323996.47527" 
+    .const 'Sub' $P12 = "10_1284728471.30547" 
     .local pmc block
     set block, $P12
-    $P586 = get_root_global ["parrot"], "P6metaclass"
-    $P586."new_class"("Regex::P6Regex::Grammar", "HLL::Grammar" :named("parent"))
+    $P625 = get_root_global ["parrot"], "P6metaclass"
+    $P625."new_class"("Regex::P6Regex::Grammar", "HLL::Grammar" :named("parent"))
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block13"  :subid("11_1282323996.47527") :outer("10_1282323996.47527")
+.sub "_block13"  :subid("11_1284728471.30547") :outer("10_1284728471.30547")
 .annotate 'line', 3
-    .const 'Sub' $P570 = "160_1282323996.47527" 
-    capture_lex $P570
-    .const 'Sub' $P563 = "158_1282323996.47527" 
-    capture_lex $P563
-    .const 'Sub' $P556 = "156_1282323996.47527" 
-    capture_lex $P556
-    .const 'Sub' $P536 = "151_1282323996.47527" 
-    capture_lex $P536
-    .const 'Sub' $P502 = "145_1282323996.47527" 
-    capture_lex $P502
-    .const 'Sub' $P490 = "142_1282323996.47527" 
-    capture_lex $P490
-    .const 'Sub' $P478 = "139_1282323996.47527" 
-    capture_lex $P478
-    .const 'Sub' $P472 = "137_1282323996.47527" 
-    capture_lex $P472
-    .const 'Sub' $P461 = "134_1282323996.47527" 
-    capture_lex $P461
-    .const 'Sub' $P450 = "131_1282323996.47527" 
-    capture_lex $P450
-    .const 'Sub' $P441 = "127_1282323996.47527" 
-    capture_lex $P441
-    .const 'Sub' $P435 = "125_1282323996.47527" 
-    capture_lex $P435
-    .const 'Sub' $P429 = "123_1282323996.47527" 
-    capture_lex $P429
-    .const 'Sub' $P423 = "121_1282323996.47527" 
-    capture_lex $P423
-    .const 'Sub' $P417 = "119_1282323996.47527" 
-    capture_lex $P417
-    .const 'Sub' $P409 = "117_1282323996.47527" 
-    capture_lex $P409
-    .const 'Sub' $P398 = "115_1282323996.47527" 
+    .const 'Sub' $P609 = "171_1284728471.30547" 
+    capture_lex $P609
+    .const 'Sub' $P602 = "169_1284728471.30547" 
+    capture_lex $P602
+    .const 'Sub' $P595 = "167_1284728471.30547" 
+    capture_lex $P595
+    .const 'Sub' $P575 = "162_1284728471.30547" 
+    capture_lex $P575
+    .const 'Sub' $P541 = "156_1284728471.30547" 
+    capture_lex $P541
+    .const 'Sub' $P529 = "153_1284728471.30547" 
+    capture_lex $P529
+    .const 'Sub' $P517 = "150_1284728471.30547" 
+    capture_lex $P517
+    .const 'Sub' $P511 = "148_1284728471.30547" 
+    capture_lex $P511
+    .const 'Sub' $P500 = "145_1284728471.30547" 
+    capture_lex $P500
+    .const 'Sub' $P489 = "142_1284728471.30547" 
+    capture_lex $P489
+    .const 'Sub' $P480 = "138_1284728471.30547" 
+    capture_lex $P480
+    .const 'Sub' $P470 = "135_1284728471.30547" 
+    capture_lex $P470
+    .const 'Sub' $P464 = "133_1284728471.30547" 
+    capture_lex $P464
+    .const 'Sub' $P458 = "131_1284728471.30547" 
+    capture_lex $P458
+    .const 'Sub' $P452 = "129_1284728471.30547" 
+    capture_lex $P452
+    .const 'Sub' $P446 = "127_1284728471.30547" 
+    capture_lex $P446
+    .const 'Sub' $P438 = "125_1284728471.30547" 
+    capture_lex $P438
+    .const 'Sub' $P427 = "123_1284728471.30547" 
+    capture_lex $P427
+    .const 'Sub' $P416 = "121_1284728471.30547" 
+    capture_lex $P416
+    .const 'Sub' $P410 = "119_1284728471.30547" 
+    capture_lex $P410
+    .const 'Sub' $P404 = "117_1284728471.30547" 
+    capture_lex $P404
+    .const 'Sub' $P398 = "115_1284728471.30547" 
     capture_lex $P398
-    .const 'Sub' $P387 = "113_1282323996.47527" 
-    capture_lex $P387
-    .const 'Sub' $P381 = "111_1282323996.47527" 
-    capture_lex $P381
-    .const 'Sub' $P375 = "109_1282323996.47527" 
-    capture_lex $P375
-    .const 'Sub' $P369 = "107_1282323996.47527" 
-    capture_lex $P369
-    .const 'Sub' $P363 = "105_1282323996.47527" 
-    capture_lex $P363
-    .const 'Sub' $P357 = "103_1282323996.47527" 
-    capture_lex $P357
-    .const 'Sub' $P351 = "101_1282323996.47527" 
-    capture_lex $P351
-    .const 'Sub' $P345 = "99_1282323996.47527" 
-    capture_lex $P345
-    .const 'Sub' $P339 = "97_1282323996.47527" 
+    .const 'Sub' $P392 = "113_1284728471.30547" 
+    capture_lex $P392
+    .const 'Sub' $P386 = "111_1284728471.30547" 
+    capture_lex $P386
+    .const 'Sub' $P380 = "109_1284728471.30547" 
+    capture_lex $P380
+    .const 'Sub' $P374 = "107_1284728471.30547" 
+    capture_lex $P374
+    .const 'Sub' $P368 = "105_1284728471.30547" 
+    capture_lex $P368
+    .const 'Sub' $P356 = "101_1284728471.30547" 
+    capture_lex $P356
+    .const 'Sub' $P346 = "99_1284728471.30547" 
+    capture_lex $P346
+    .const 'Sub' $P339 = "97_1284728471.30547" 
     capture_lex $P339
-    .const 'Sub' $P327 = "93_1282323996.47527" 
+    .const 'Sub' $P327 = "95_1284728471.30547" 
     capture_lex $P327
-    .const 'Sub' $P317 = "91_1282323996.47527" 
-    capture_lex $P317
-    .const 'Sub' $P310 = "89_1282323996.47527" 
-    capture_lex $P310
-    .const 'Sub' $P298 = "87_1282323996.47527" 
-    capture_lex $P298
-    .const 'Sub' $P291 = "85_1282323996.47527" 
-    capture_lex $P291
-    .const 'Sub' $P285 = "83_1282323996.47527" 
-    capture_lex $P285
-    .const 'Sub' $P279 = "81_1282323996.47527" 
-    capture_lex $P279
-    .const 'Sub' $P272 = "79_1282323996.47527" 
-    capture_lex $P272
-    .const 'Sub' $P265 = "77_1282323996.47527" 
-    capture_lex $P265
-    .const 'Sub' $P258 = "75_1282323996.47527" 
-    capture_lex $P258
-    .const 'Sub' $P251 = "73_1282323996.47527" 
-    capture_lex $P251
-    .const 'Sub' $P245 = "71_1282323996.47527" 
-    capture_lex $P245
-    .const 'Sub' $P239 = "69_1282323996.47527" 
+    .const 'Sub' $P320 = "93_1284728471.30547" 
+    capture_lex $P320
+    .const 'Sub' $P314 = "91_1284728471.30547" 
+    capture_lex $P314
+    .const 'Sub' $P308 = "89_1284728471.30547" 
+    capture_lex $P308
+    .const 'Sub' $P302 = "87_1284728471.30547" 
+    capture_lex $P302
+    .const 'Sub' $P295 = "85_1284728471.30547" 
+    capture_lex $P295
+    .const 'Sub' $P288 = "83_1284728471.30547" 
+    capture_lex $P288
+    .const 'Sub' $P281 = "81_1284728471.30547" 
+    capture_lex $P281
+    .const 'Sub' $P274 = "79_1284728471.30547" 
+    capture_lex $P274
+    .const 'Sub' $P268 = "77_1284728471.30547" 
+    capture_lex $P268
+    .const 'Sub' $P262 = "75_1284728471.30547" 
+    capture_lex $P262
+    .const 'Sub' $P256 = "73_1284728471.30547" 
+    capture_lex $P256
+    .const 'Sub' $P250 = "71_1284728471.30547" 
+    capture_lex $P250
+    .const 'Sub' $P244 = "69_1284728471.30547" 
+    capture_lex $P244
+    .const 'Sub' $P239 = "67_1284728471.30547" 
     capture_lex $P239
-    .const 'Sub' $P233 = "67_1282323996.47527" 
-    capture_lex $P233
-    .const 'Sub' $P227 = "65_1282323996.47527" 
-    capture_lex $P227
-    .const 'Sub' $P221 = "63_1282323996.47527" 
-    capture_lex $P221
-    .const 'Sub' $P216 = "61_1282323996.47527" 
+    .const 'Sub' $P234 = "65_1284728471.30547" 
+    capture_lex $P234
+    .const 'Sub' $P228 = "63_1284728471.30547" 
+    capture_lex $P228
+    .const 'Sub' $P222 = "61_1284728471.30547" 
+    capture_lex $P222
+    .const 'Sub' $P216 = "59_1284728471.30547" 
     capture_lex $P216
-    .const 'Sub' $P211 = "59_1282323996.47527" 
-    capture_lex $P211
-    .const 'Sub' $P205 = "57_1282323996.47527" 
-    capture_lex $P205
-    .const 'Sub' $P199 = "55_1282323996.47527" 
-    capture_lex $P199
-    .const 'Sub' $P193 = "53_1282323996.47527" 
-    capture_lex $P193
-    .const 'Sub' $P178 = "48_1282323996.47527" 
-    capture_lex $P178
-    .const 'Sub' $P163 = "46_1282323996.47527" 
+    .const 'Sub' $P201 = "54_1284728471.30547" 
+    capture_lex $P201
+    .const 'Sub' $P186 = "52_1284728471.30547" 
+    capture_lex $P186
+    .const 'Sub' $P163 = "46_1284728471.30547" 
     capture_lex $P163
-    .const 'Sub' $P156 = "44_1282323996.47527" 
+    .const 'Sub' $P156 = "44_1284728471.30547" 
     capture_lex $P156
-    .const 'Sub' $P149 = "42_1282323996.47527" 
+    .const 'Sub' $P149 = "42_1284728471.30547" 
     capture_lex $P149
-    .const 'Sub' $P142 = "40_1282323996.47527" 
+    .const 'Sub' $P142 = "40_1284728471.30547" 
     capture_lex $P142
-    .const 'Sub' $P125 = "35_1282323996.47527" 
+    .const 'Sub' $P125 = "35_1284728471.30547" 
     capture_lex $P125
-    .const 'Sub' $P113 = "32_1282323996.47527" 
+    .const 'Sub' $P113 = "32_1284728471.30547" 
     capture_lex $P113
-    .const 'Sub' $P106 = "30_1282323996.47527" 
+    .const 'Sub' $P106 = "30_1284728471.30547" 
     capture_lex $P106
-    .const 'Sub' $P97 = "28_1282323996.47527" 
+    .const 'Sub' $P97 = "28_1284728471.30547" 
     capture_lex $P97
-    .const 'Sub' $P87 = "26_1282323996.47527" 
+    .const 'Sub' $P87 = "26_1284728471.30547" 
     capture_lex $P87
-    .const 'Sub' $P80 = "24_1282323996.47527" 
+    .const 'Sub' $P80 = "24_1284728471.30547" 
     capture_lex $P80
-    .const 'Sub' $P68 = "22_1282323996.47527" 
+    .const 'Sub' $P68 = "22_1284728471.30547" 
     capture_lex $P68
-    .const 'Sub' $P61 = "20_1282323996.47527" 
+    .const 'Sub' $P61 = "20_1284728471.30547" 
     capture_lex $P61
-    .const 'Sub' $P54 = "18_1282323996.47527" 
+    .const 'Sub' $P54 = "18_1284728471.30547" 
     capture_lex $P54
-    .const 'Sub' $P44 = "15_1282323996.47527" 
+    .const 'Sub' $P44 = "15_1284728471.30547" 
     capture_lex $P44
-    .const 'Sub' $P37 = "13_1282323996.47527" 
+    .const 'Sub' $P37 = "13_1284728471.30547" 
     capture_lex $P37
-    .const 'Sub' $P15 = "12_1282323996.47527" 
+    .const 'Sub' $P15 = "12_1284728471.30547" 
     capture_lex $P15
     $P0 = find_dynamic_lex "$*CTXSAVE"
     if null $P0 goto ctxsave_done
@@ -186,17 +192,17 @@
     unless $I0 goto ctxsave_done
     $P0."ctxsave"()
   ctxsave_done:
-    .const 'Sub' $P570 = "160_1282323996.47527" 
-    capture_lex $P570
-    .return ($P570)
-    .const 'Sub' $P578 = "162_1282323996.47527" 
-    .return ($P578)
+    .const 'Sub' $P609 = "171_1284728471.30547" 
+    capture_lex $P609
+    .return ($P609)
+    .const 'Sub' $P617 = "173_1284728471.30547" 
+    .return ($P617)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
 .include "except_types.pasm"
-.sub "obs"  :subid("12_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "obs"  :subid("12_1284728471.30547") :method :outer("11_1284728471.30547")
     .param pmc param_18
     .param pmc param_19
     .param pmc param_20 :optional
@@ -209,11 +215,11 @@
     .lex "self", self
     .lex "$old", param_18
     .lex "$new", param_19
-    if has_param_20, optparam_165
+    if has_param_20, optparam_176
     new $P21, "String"
     assign $P21, "in Perl 6"
     set param_20, $P21
-  optparam_165:
+  optparam_176:
     .lex "$when", param_20
 .annotate 'line', 4
     find_lex $P22, "self"
@@ -243,7 +249,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "ws"  :subid("13_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "ws"  :subid("13_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
     .local string rx38_tgt
     .local int rx38_pos
@@ -265,9 +271,9 @@
     substr rx38_tgt, rx38_tgt, rx38_off
   rx38_start:
     eq $I10, 1, rx38_restart
-    if_null rx38_debug, debug_166
+    if_null rx38_debug, debug_177
     rx38_cur."!cursor_debug"("START", "ws")
-  debug_166:
+  debug_177:
     $I10 = self.'from'()
     ne $I10, -1, rxscan41_done
     goto rxscan41_scan
@@ -316,15 +322,15 @@
   rxquantr42_done:
   # rx pass
     rx38_cur."!cursor_pass"(rx38_pos, "ws")
-    if_null rx38_debug, debug_167
+    if_null rx38_debug, debug_178
     rx38_cur."!cursor_debug"("PASS", "ws", " at pos=", rx38_pos)
-  debug_167:
+  debug_178:
     .return (rx38_cur)
   rx38_restart:
 .annotate 'line', 3
-    if_null rx38_debug, debug_168
+    if_null rx38_debug, debug_179
     rx38_cur."!cursor_debug"("NEXT", "ws")
-  debug_168:
+  debug_179:
   rx38_fail:
     (rx38_rep, rx38_pos, $I10, $P10) = rx38_cur."!mark_fail"(0)
     lt rx38_pos, -1, rx38_done
@@ -332,16 +338,16 @@
     jump $I10
   rx38_done:
     rx38_cur."!cursor_fail"()
-    if_null rx38_debug, debug_169
+    if_null rx38_debug, debug_180
     rx38_cur."!cursor_debug"("FAIL", "ws")
-  debug_169:
+  debug_180:
     .return (rx38_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__ws"  :subid("14_1282323996.47527") :method
+.sub "!PREFIX__ws"  :subid("14_1284728471.30547") :method
 .annotate 'line', 3
     new $P40, "ResizablePMCArray"
     push $P40, ""
@@ -350,9 +356,9 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "normspace"  :subid("15_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "normspace"  :subid("15_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .const 'Sub' $P50 = "17_1282323996.47527" 
+    .const 'Sub' $P50 = "17_1284728471.30547" 
     capture_lex $P50
     .local string rx45_tgt
     .local int rx45_pos
@@ -374,9 +380,9 @@
     substr rx45_tgt, rx45_tgt, rx45_off
   rx45_start:
     eq $I10, 1, rx45_restart
-    if_null rx45_debug, debug_170
+    if_null rx45_debug, debug_181
     rx45_cur."!cursor_debug"("START", "normspace")
-  debug_170:
+  debug_181:
     $I10 = self.'from'()
     ne $I10, -1, rxscan48_done
     goto rxscan48_scan
@@ -392,7 +398,7 @@
 .annotate 'line', 10
   # rx subrule "before" subtype=zerowidth negate=
     rx45_cur."!cursor_pos"(rx45_pos)
-    .const 'Sub' $P50 = "17_1282323996.47527" 
+    .const 'Sub' $P50 = "17_1284728471.30547" 
     capture_lex $P50
     $P10 = rx45_cur."before"($P50)
     unless $P10, rx45_fail
@@ -403,15 +409,15 @@
     rx45_pos = $P10."pos"()
   # rx pass
     rx45_cur."!cursor_pass"(rx45_pos, "normspace")
-    if_null rx45_debug, debug_175
+    if_null rx45_debug, debug_186
     rx45_cur."!cursor_debug"("PASS", "normspace", " at pos=", rx45_pos)
-  debug_175:
+  debug_186:
     .return (rx45_cur)
   rx45_restart:
 .annotate 'line', 3
-    if_null rx45_debug, debug_176
+    if_null rx45_debug, debug_187
     rx45_cur."!cursor_debug"("NEXT", "normspace")
-  debug_176:
+  debug_187:
   rx45_fail:
     (rx45_rep, rx45_pos, $I10, $P10) = rx45_cur."!mark_fail"(0)
     lt rx45_pos, -1, rx45_done
@@ -419,16 +425,16 @@
     jump $I10
   rx45_done:
     rx45_cur."!cursor_fail"()
-    if_null rx45_debug, debug_177
+    if_null rx45_debug, debug_188
     rx45_cur."!cursor_debug"("FAIL", "normspace")
-  debug_177:
+  debug_188:
     .return (rx45_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__normspace"  :subid("16_1282323996.47527") :method
+.sub "!PREFIX__normspace"  :subid("16_1284728471.30547") :method
 .annotate 'line', 3
     new $P47, "ResizablePMCArray"
     push $P47, ""
@@ -437,7 +443,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block49"  :anon :subid("17_1282323996.47527") :method :outer("15_1282323996.47527")
+.sub "_block49"  :anon :subid("17_1284728471.30547") :method :outer("15_1284728471.30547")
 .annotate 'line', 10
     .local string rx51_tgt
     .local int rx51_pos
@@ -459,9 +465,9 @@
     substr rx51_tgt, rx51_tgt, rx51_off
   rx51_start:
     eq $I10, 1, rx51_restart
-    if_null rx51_debug, debug_171
+    if_null rx51_debug, debug_182
     rx51_cur."!cursor_debug"("START", "")
-  debug_171:
+  debug_182:
     $I10 = self.'from'()
     ne $I10, -1, rxscan52_done
     goto rxscan52_scan
@@ -495,14 +501,14 @@
   alt53_end:
   # rx pass
     rx51_cur."!cursor_pass"(rx51_pos, "")
-    if_null rx51_debug, debug_172
+    if_null rx51_debug, debug_183
     rx51_cur."!cursor_debug"("PASS", "", " at pos=", rx51_pos)
-  debug_172:
+  debug_183:
     .return (rx51_cur)
   rx51_restart:
-    if_null rx51_debug, debug_173
+    if_null rx51_debug, debug_184
     rx51_cur."!cursor_debug"("NEXT", "")
-  debug_173:
+  debug_184:
   rx51_fail:
     (rx51_rep, rx51_pos, $I10, $P10) = rx51_cur."!mark_fail"(0)
     lt rx51_pos, -1, rx51_done
@@ -510,16 +516,16 @@
     jump $I10
   rx51_done:
     rx51_cur."!cursor_fail"()
-    if_null rx51_debug, debug_174
+    if_null rx51_debug, debug_185
     rx51_cur."!cursor_debug"("FAIL", "")
-  debug_174:
+  debug_185:
     .return (rx51_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "identifier"  :subid("18_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "identifier"  :subid("18_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
     .local string rx55_tgt
     .local int rx55_pos
@@ -541,9 +547,9 @@
     substr rx55_tgt, rx55_tgt, rx55_off
   rx55_start:
     eq $I10, 1, rx55_restart
-    if_null rx55_debug, debug_178
+    if_null rx55_debug, debug_189
     rx55_cur."!cursor_debug"("START", "identifier")
-  debug_178:
+  debug_189:
     $I10 = self.'from'()
     ne $I10, -1, rxscan59_done
     goto rxscan59_scan
@@ -586,15 +592,15 @@
   rxquantr60_done:
   # rx pass
     rx55_cur."!cursor_pass"(rx55_pos, "identifier")
-    if_null rx55_debug, debug_179
+    if_null rx55_debug, debug_190
     rx55_cur."!cursor_debug"("PASS", "identifier", " at pos=", rx55_pos)
-  debug_179:
+  debug_190:
     .return (rx55_cur)
   rx55_restart:
 .annotate 'line', 3
-    if_null rx55_debug, debug_180
+    if_null rx55_debug, debug_191
     rx55_cur."!cursor_debug"("NEXT", "identifier")
-  debug_180:
+  debug_191:
   rx55_fail:
     (rx55_rep, rx55_pos, $I10, $P10) = rx55_cur."!mark_fail"(0)
     lt rx55_pos, -1, rx55_done
@@ -602,16 +608,16 @@
     jump $I10
   rx55_done:
     rx55_cur."!cursor_fail"()
-    if_null rx55_debug, debug_181
+    if_null rx55_debug, debug_192
     rx55_cur."!cursor_debug"("FAIL", "identifier")
-  debug_181:
+  debug_192:
     .return (rx55_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__identifier"  :subid("19_1282323996.47527") :method
+.sub "!PREFIX__identifier"  :subid("19_1284728471.30547") :method
 .annotate 'line', 3
     $P57 = self."!PREFIX__!subrule"("ident", "")
     new $P58, "ResizablePMCArray"
@@ -621,7 +627,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "arg"  :subid("20_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "arg"  :subid("20_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
     .local string rx62_tgt
     .local int rx62_pos
@@ -643,9 +649,9 @@
     substr rx62_tgt, rx62_tgt, rx62_off
   rx62_start:
     eq $I10, 1, rx62_restart
-    if_null rx62_debug, debug_182
+    if_null rx62_debug, debug_193
     rx62_cur."!cursor_debug"("START", "arg")
-  debug_182:
+  debug_193:
     $I10 = self.'from'()
     ne $I10, -1, rxscan65_done
     goto rxscan65_scan
@@ -664,7 +670,6 @@
     rx62_cur."!mark_push"(0, rx62_pos, $I10)
 .annotate 'line', 16
   # rx enumcharlist negate=0 zerowidth
-    ge rx62_pos, rx62_eos, rx62_fail
     sub $I10, rx62_pos, rx62_off
     substr $S10, rx62_tgt, $I10, 1
     index $I11, "'", $S10
@@ -682,7 +687,6 @@
     rx62_cur."!mark_push"(0, rx62_pos, $I10)
 .annotate 'line', 17
   # rx enumcharlist negate=0 zerowidth
-    ge rx62_pos, rx62_eos, rx62_fail
     sub $I10, rx62_pos, rx62_off
     substr $S10, rx62_tgt, $I10, 1
     index $I11, "\"", $S10
@@ -721,15 +725,15 @@
 .annotate 'line', 14
   # rx pass
     rx62_cur."!cursor_pass"(rx62_pos, "arg")
-    if_null rx62_debug, debug_183
+    if_null rx62_debug, debug_194
     rx62_cur."!cursor_debug"("PASS", "arg", " at pos=", rx62_pos)
-  debug_183:
+  debug_194:
     .return (rx62_cur)
   rx62_restart:
 .annotate 'line', 3
-    if_null rx62_debug, debug_184
+    if_null rx62_debug, debug_195
     rx62_cur."!cursor_debug"("NEXT", "arg")
-  debug_184:
+  debug_195:
   rx62_fail:
     (rx62_rep, rx62_pos, $I10, $P10) = rx62_cur."!mark_fail"(0)
     lt rx62_pos, -1, rx62_done
@@ -737,16 +741,16 @@
     jump $I10
   rx62_done:
     rx62_cur."!cursor_fail"()
-    if_null rx62_debug, debug_185
+    if_null rx62_debug, debug_196
     rx62_cur."!cursor_debug"("FAIL", "arg")
-  debug_185:
+  debug_196:
     .return (rx62_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__arg"  :subid("21_1282323996.47527") :method
+.sub "!PREFIX__arg"  :subid("21_1284728471.30547") :method
 .annotate 'line', 3
     new $P64, "ResizablePMCArray"
     push $P64, ""
@@ -757,7 +761,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "arglist"  :subid("22_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "arglist"  :subid("22_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
     .local string rx69_tgt
     .local int rx69_pos
@@ -780,9 +784,9 @@
     substr rx69_tgt, rx69_tgt, rx69_off
   rx69_start:
     eq $I10, 1, rx69_restart
-    if_null rx69_debug, debug_186
+    if_null rx69_debug, debug_197
     rx69_cur."!cursor_debug"("START", "arglist")
-  debug_186:
+  debug_197:
     $I10 = self.'from'()
     ne $I10, -1, rxscan73_done
     goto rxscan73_scan
@@ -854,15 +858,15 @@
     rx69_pos = $P10."pos"()
   # rx pass
     rx69_cur."!cursor_pass"(rx69_pos, "arglist")
-    if_null rx69_debug, debug_187
+    if_null rx69_debug, debug_198
     rx69_cur."!cursor_debug"("PASS", "arglist", " at pos=", rx69_pos)
-  debug_187:
+  debug_198:
     .return (rx69_cur)
   rx69_restart:
 .annotate 'line', 3
-    if_null rx69_debug, debug_188
+    if_null rx69_debug, debug_199
     rx69_cur."!cursor_debug"("NEXT", "arglist")
-  debug_188:
+  debug_199:
   rx69_fail:
     (rx69_rep, rx69_pos, $I10, $P10) = rx69_cur."!mark_fail"(0)
     lt rx69_pos, -1, rx69_done
@@ -870,16 +874,16 @@
     jump $I10
   rx69_done:
     rx69_cur."!cursor_fail"()
-    if_null rx69_debug, debug_189
+    if_null rx69_debug, debug_200
     rx69_cur."!cursor_debug"("FAIL", "arglist")
-  debug_189:
+  debug_200:
     .return (rx69_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__arglist"  :subid("23_1282323996.47527") :method
+.sub "!PREFIX__arglist"  :subid("23_1284728471.30547") :method
 .annotate 'line', 3
     $P71 = self."!PREFIX__!subrule"("ws", "")
     new $P72, "ResizablePMCArray"
@@ -889,7 +893,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "TOP"  :subid("24_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "TOP"  :subid("24_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
     .local string rx81_tgt
     .local int rx81_pos
@@ -911,9 +915,9 @@
     substr rx81_tgt, rx81_tgt, rx81_off
   rx81_start:
     eq $I10, 1, rx81_restart
-    if_null rx81_debug, debug_190
+    if_null rx81_debug, debug_201
     rx81_cur."!cursor_debug"("START", "TOP")
-  debug_190:
+  debug_201:
     $I10 = self.'from'()
     ne $I10, -1, rxscan85_done
     goto rxscan85_scan
@@ -951,15 +955,15 @@
 .annotate 'line', 24
   # rx pass
     rx81_cur."!cursor_pass"(rx81_pos, "TOP")
-    if_null rx81_debug, debug_191
+    if_null rx81_debug, debug_202
     rx81_cur."!cursor_debug"("PASS", "TOP", " at pos=", rx81_pos)
-  debug_191:
+  debug_202:
     .return (rx81_cur)
   rx81_restart:
 .annotate 'line', 3
-    if_null rx81_debug, debug_192
+    if_null rx81_debug, debug_203
     rx81_cur."!cursor_debug"("NEXT", "TOP")
-  debug_192:
+  debug_203:
   rx81_fail:
     (rx81_rep, rx81_pos, $I10, $P10) = rx81_cur."!mark_fail"(0)
     lt rx81_pos, -1, rx81_done
@@ -967,16 +971,16 @@
     jump $I10
   rx81_done:
     rx81_cur."!cursor_fail"()
-    if_null rx81_debug, debug_193
+    if_null rx81_debug, debug_204
     rx81_cur."!cursor_debug"("FAIL", "TOP")
-  debug_193:
+  debug_204:
     .return (rx81_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__TOP"  :subid("25_1282323996.47527") :method
+.sub "!PREFIX__TOP"  :subid("25_1284728471.30547") :method
 .annotate 'line', 3
     $P83 = self."!PREFIX__!subrule"("nibbler", "")
     new $P84, "ResizablePMCArray"
@@ -986,7 +990,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "nibbler"  :subid("26_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "nibbler"  :subid("26_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
     .local string rx88_tgt
     .local int rx88_pos
@@ -1009,9 +1013,9 @@
     substr rx88_tgt, rx88_tgt, rx88_off
   rx88_start:
     eq $I10, 1, rx88_restart
-    if_null rx88_debug, debug_194
+    if_null rx88_debug, debug_205
     rx88_cur."!cursor_debug"("START", "nibbler")
-  debug_194:
+  debug_205:
     $I10 = self.'from'()
     ne $I10, -1, rxscan91_done
     goto rxscan91_scan
@@ -1146,15 +1150,15 @@
 .annotate 'line', 29
   # rx pass
     rx88_cur."!cursor_pass"(rx88_pos, "nibbler")
-    if_null rx88_debug, debug_195
+    if_null rx88_debug, debug_206
     rx88_cur."!cursor_debug"("PASS", "nibbler", " at pos=", rx88_pos)
-  debug_195:
+  debug_206:
     .return (rx88_cur)
   rx88_restart:
 .annotate 'line', 3
-    if_null rx88_debug, debug_196
+    if_null rx88_debug, debug_207
     rx88_cur."!cursor_debug"("NEXT", "nibbler")
-  debug_196:
+  debug_207:
   rx88_fail:
     (rx88_rep, rx88_pos, $I10, $P10) = rx88_cur."!mark_fail"(0)
     lt rx88_pos, -1, rx88_done
@@ -1162,16 +1166,16 @@
     jump $I10
   rx88_done:
     rx88_cur."!cursor_fail"()
-    if_null rx88_debug, debug_197
+    if_null rx88_debug, debug_208
     rx88_cur."!cursor_debug"("FAIL", "nibbler")
-  debug_197:
+  debug_208:
     .return (rx88_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__nibbler"  :subid("27_1282323996.47527") :method
+.sub "!PREFIX__nibbler"  :subid("27_1284728471.30547") :method
 .annotate 'line', 3
     new $P90, "ResizablePMCArray"
     push $P90, ""
@@ -1180,7 +1184,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "termconj"  :subid("28_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "termconj"  :subid("28_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
     .local string rx98_tgt
     .local int rx98_pos
@@ -1203,9 +1207,9 @@
     substr rx98_tgt, rx98_tgt, rx98_off
   rx98_start:
     eq $I10, 1, rx98_restart
-    if_null rx98_debug, debug_198
+    if_null rx98_debug, debug_209
     rx98_cur."!cursor_debug"("START", "termconj")
-  debug_198:
+  debug_209:
     $I10 = self.'from'()
     ne $I10, -1, rxscan102_done
     goto rxscan102_scan
@@ -1281,15 +1285,15 @@
 .annotate 'line', 38
   # rx pass
     rx98_cur."!cursor_pass"(rx98_pos, "termconj")
-    if_null rx98_debug, debug_199
+    if_null rx98_debug, debug_210
     rx98_cur."!cursor_debug"("PASS", "termconj", " at pos=", rx98_pos)
-  debug_199:
+  debug_210:
     .return (rx98_cur)
   rx98_restart:
 .annotate 'line', 3
-    if_null rx98_debug, debug_200
+    if_null rx98_debug, debug_211
     rx98_cur."!cursor_debug"("NEXT", "termconj")
-  debug_200:
+  debug_211:
   rx98_fail:
     (rx98_rep, rx98_pos, $I10, $P10) = rx98_cur."!mark_fail"(0)
     lt rx98_pos, -1, rx98_done
@@ -1297,16 +1301,16 @@
     jump $I10
   rx98_done:
     rx98_cur."!cursor_fail"()
-    if_null rx98_debug, debug_201
+    if_null rx98_debug, debug_212
     rx98_cur."!cursor_debug"("FAIL", "termconj")
-  debug_201:
+  debug_212:
     .return (rx98_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__termconj"  :subid("29_1282323996.47527") :method
+.sub "!PREFIX__termconj"  :subid("29_1284728471.30547") :method
 .annotate 'line', 3
     $P100 = self."!PREFIX__!subrule"("termish", "")
     new $P101, "ResizablePMCArray"
@@ -1316,7 +1320,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "termish"  :subid("30_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "termish"  :subid("30_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
     .local string rx107_tgt
     .local int rx107_pos
@@ -1339,9 +1343,9 @@
     substr rx107_tgt, rx107_tgt, rx107_off
   rx107_start:
     eq $I10, 1, rx107_restart
-    if_null rx107_debug, debug_202
+    if_null rx107_debug, debug_213
     rx107_cur."!cursor_debug"("START", "termish")
-  debug_202:
+  debug_213:
     $I10 = self.'from'()
     ne $I10, -1, rxscan110_done
     goto rxscan110_scan
@@ -1381,15 +1385,15 @@
 .annotate 'line', 45
   # rx pass
     rx107_cur."!cursor_pass"(rx107_pos, "termish")
-    if_null rx107_debug, debug_203
+    if_null rx107_debug, debug_214
     rx107_cur."!cursor_debug"("PASS", "termish", " at pos=", rx107_pos)
-  debug_203:
+  debug_214:
     .return (rx107_cur)
   rx107_restart:
 .annotate 'line', 3
-    if_null rx107_debug, debug_204
+    if_null rx107_debug, debug_215
     rx107_cur."!cursor_debug"("NEXT", "termish")
-  debug_204:
+  debug_215:
   rx107_fail:
     (rx107_rep, rx107_pos, $I10, $P10) = rx107_cur."!mark_fail"(0)
     lt rx107_pos, -1, rx107_done
@@ -1397,16 +1401,16 @@
     jump $I10
   rx107_done:
     rx107_cur."!cursor_fail"()
-    if_null rx107_debug, debug_205
+    if_null rx107_debug, debug_216
     rx107_cur."!cursor_debug"("FAIL", "termish")
-  debug_205:
+  debug_216:
     .return (rx107_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__termish"  :subid("31_1282323996.47527") :method
+.sub "!PREFIX__termish"  :subid("31_1284728471.30547") :method
 .annotate 'line', 3
     new $P109, "ResizablePMCArray"
     push $P109, ""
@@ -1415,9 +1419,9 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantified_atom"  :subid("32_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "quantified_atom"  :subid("32_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .const 'Sub' $P122 = "34_1282323996.47527" 
+    .const 'Sub' $P122 = "34_1284728471.30547" 
     capture_lex $P122
     .local string rx114_tgt
     .local int rx114_pos
@@ -1440,9 +1444,9 @@
     substr rx114_tgt, rx114_tgt, rx114_off
   rx114_start:
     eq $I10, 1, rx114_restart
-    if_null rx114_debug, debug_206
+    if_null rx114_debug, debug_217
     rx114_cur."!cursor_debug"("START", "quantified_atom")
-  debug_206:
+  debug_217:
     $I10 = self.'from'()
     ne $I10, -1, rxscan118_done
     goto rxscan118_scan
@@ -1486,7 +1490,7 @@
   alt120_1:
   # rx subrule "before" subtype=zerowidth negate=
     rx114_cur."!cursor_pos"(rx114_pos)
-    .const 'Sub' $P122 = "34_1282323996.47527" 
+    .const 'Sub' $P122 = "34_1284728471.30547" 
     capture_lex $P122
     $P10 = rx114_cur."before"($P122)
     unless $P10, rx114_fail
@@ -1508,15 +1512,15 @@
 .annotate 'line', 49
   # rx pass
     rx114_cur."!cursor_pass"(rx114_pos, "quantified_atom")
-    if_null rx114_debug, debug_211
+    if_null rx114_debug, debug_222
     rx114_cur."!cursor_debug"("PASS", "quantified_atom", " at pos=", rx114_pos)
-  debug_211:
+  debug_222:
     .return (rx114_cur)
   rx114_restart:
 .annotate 'line', 3
-    if_null rx114_debug, debug_212
+    if_null rx114_debug, debug_223
     rx114_cur."!cursor_debug"("NEXT", "quantified_atom")
-  debug_212:
+  debug_223:
   rx114_fail:
     (rx114_rep, rx114_pos, $I10, $P10) = rx114_cur."!mark_fail"(0)
     lt rx114_pos, -1, rx114_done
@@ -1524,16 +1528,16 @@
     jump $I10
   rx114_done:
     rx114_cur."!cursor_fail"()
-    if_null rx114_debug, debug_213
+    if_null rx114_debug, debug_224
     rx114_cur."!cursor_debug"("FAIL", "quantified_atom")
-  debug_213:
+  debug_224:
     .return (rx114_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantified_atom"  :subid("33_1282323996.47527") :method
+.sub "!PREFIX__quantified_atom"  :subid("33_1284728471.30547") :method
 .annotate 'line', 3
     $P116 = self."!PREFIX__!subrule"("atom", "")
     new $P117, "ResizablePMCArray"
@@ -1543,7 +1547,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block121"  :anon :subid("34_1282323996.47527") :method :outer("32_1282323996.47527")
+.sub "_block121"  :anon :subid("34_1284728471.30547") :method :outer("32_1284728471.30547")
 .annotate 'line', 50
     .local string rx123_tgt
     .local int rx123_pos
@@ -1565,9 +1569,9 @@
     substr rx123_tgt, rx123_tgt, rx123_off
   rx123_start:
     eq $I10, 1, rx123_restart
-    if_null rx123_debug, debug_207
+    if_null rx123_debug, debug_218
     rx123_cur."!cursor_debug"("START", "")
-  debug_207:
+  debug_218:
     $I10 = self.'from'()
     ne $I10, -1, rxscan124_done
     goto rxscan124_scan
@@ -1589,14 +1593,14 @@
     add rx123_pos, 1
   # rx pass
     rx123_cur."!cursor_pass"(rx123_pos, "")
-    if_null rx123_debug, debug_208
+    if_null rx123_debug, debug_219
     rx123_cur."!cursor_debug"("PASS", "", " at pos=", rx123_pos)
-  debug_208:
+  debug_219:
     .return (rx123_cur)
   rx123_restart:
-    if_null rx123_debug, debug_209
+    if_null rx123_debug, debug_220
     rx123_cur."!cursor_debug"("NEXT", "")
-  debug_209:
+  debug_220:
   rx123_fail:
     (rx123_rep, rx123_pos, $I10, $P10) = rx123_cur."!mark_fail"(0)
     lt rx123_pos, -1, rx123_done
@@ -1604,18 +1608,18 @@
     jump $I10
   rx123_done:
     rx123_cur."!cursor_fail"()
-    if_null rx123_debug, debug_210
+    if_null rx123_debug, debug_221
     rx123_cur."!cursor_debug"("FAIL", "")
-  debug_210:
+  debug_221:
     .return (rx123_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "atom"  :subid("35_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "atom"  :subid("35_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .const 'Sub' $P135 = "37_1282323996.47527" 
+    .const 'Sub' $P135 = "37_1284728471.30547" 
     capture_lex $P135
     .local string rx126_tgt
     .local int rx126_pos
@@ -1637,9 +1641,9 @@
     substr rx126_tgt, rx126_tgt, rx126_off
   rx126_start:
     eq $I10, 1, rx126_restart
-    if_null rx126_debug, debug_214
+    if_null rx126_debug, debug_225
     rx126_cur."!cursor_debug"("START", "atom")
-  debug_214:
+  debug_225:
     $I10 = self.'from'()
     ne $I10, -1, rxscan130_done
     goto rxscan130_scan
@@ -1681,7 +1685,7 @@
   rxquantg133_done:
   # rx subrule "before" subtype=zerowidth negate=
     rx126_cur."!cursor_pos"(rx126_pos)
-    .const 'Sub' $P135 = "37_1282323996.47527" 
+    .const 'Sub' $P135 = "37_1284728471.30547" 
     capture_lex $P135
     $P10 = rx126_cur."before"($P135)
     unless $P10, rx126_fail
@@ -1702,15 +1706,15 @@
 .annotate 'line', 53
   # rx pass
     rx126_cur."!cursor_pass"(rx126_pos, "atom")
-    if_null rx126_debug, debug_219
+    if_null rx126_debug, debug_230
     rx126_cur."!cursor_debug"("PASS", "atom", " at pos=", rx126_pos)
-  debug_219:
+  debug_230:
     .return (rx126_cur)
   rx126_restart:
 .annotate 'line', 3
-    if_null rx126_debug, debug_220
+    if_null rx126_debug, debug_231
     rx126_cur."!cursor_debug"("NEXT", "atom")
-  debug_220:
+  debug_231:
   rx126_fail:
     (rx126_rep, rx126_pos, $I10, $P10) = rx126_cur."!mark_fail"(0)
     lt rx126_pos, -1, rx126_done
@@ -1718,16 +1722,16 @@
     jump $I10
   rx126_done:
     rx126_cur."!cursor_fail"()
-    if_null rx126_debug, debug_221
+    if_null rx126_debug, debug_232
     rx126_cur."!cursor_debug"("FAIL", "atom")
-  debug_221:
+  debug_232:
     .return (rx126_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__atom"  :subid("36_1282323996.47527") :method
+.sub "!PREFIX__atom"  :subid("36_1284728471.30547") :method
 .annotate 'line', 3
     $P128 = self."!PREFIX__!subrule"("metachar", "")
     new $P129, "ResizablePMCArray"
@@ -1738,7 +1742,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block134"  :anon :subid("37_1282323996.47527") :method :outer("35_1282323996.47527")
+.sub "_block134"  :anon :subid("37_1284728471.30547") :method :outer("35_1284728471.30547")
 .annotate 'line', 56
     .local string rx136_tgt
     .local int rx136_pos
@@ -1760,9 +1764,9 @@
     substr rx136_tgt, rx136_tgt, rx136_off
   rx136_start:
     eq $I10, 1, rx136_restart
-    if_null rx136_debug, debug_215
+    if_null rx136_debug, debug_226
     rx136_cur."!cursor_debug"("START", "")
-  debug_215:
+  debug_226:
     $I10 = self.'from'()
     ne $I10, -1, rxscan137_done
     goto rxscan137_scan
@@ -1783,14 +1787,14 @@
     inc rx136_pos
   # rx pass
     rx136_cur."!cursor_pass"(rx136_pos, "")
-    if_null rx136_debug, debug_216
+    if_null rx136_debug, debug_227
     rx136_cur."!cursor_debug"("PASS", "", " at pos=", rx136_pos)
-  debug_216:
+  debug_227:
     .return (rx136_cur)
   rx136_restart:
-    if_null rx136_debug, debug_217
+    if_null rx136_debug, debug_228
     rx136_cur."!cursor_debug"("NEXT", "")
-  debug_217:
+  debug_228:
   rx136_fail:
     (rx136_rep, rx136_pos, $I10, $P10) = rx136_cur."!mark_fail"(0)
     lt rx136_pos, -1, rx136_done
@@ -1798,16 +1802,16 @@
     jump $I10
   rx136_done:
     rx136_cur."!cursor_fail"()
-    if_null rx136_debug, debug_218
+    if_null rx136_debug, debug_229
     rx136_cur."!cursor_debug"("FAIL", "")
-  debug_218:
+  debug_229:
     .return (rx136_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier"  :subid("38_1282323996.47527") :method
+.sub "quantifier"  :subid("38_1284728471.30547") :method
 .annotate 'line', 61
     $P139 = self."!protoregex"("quantifier")
     .return ($P139)
@@ -1815,7 +1819,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier"  :subid("39_1282323996.47527") :method
+.sub "!PREFIX__quantifier"  :subid("39_1284728471.30547") :method
 .annotate 'line', 61
     $P141 = self."!PREFIX__!protoregex"("quantifier")
     .return ($P141)
@@ -1823,7 +1827,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier:sym<*>"  :subid("40_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "quantifier:sym<*>"  :subid("40_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
     .local string rx143_tgt
     .local int rx143_pos
@@ -1845,9 +1849,9 @@
     substr rx143_tgt, rx143_tgt, rx143_off
   rx143_start:
     eq $I10, 1, rx143_restart
-    if_null rx143_debug, debug_222
+    if_null rx143_debug, debug_233
     rx143_cur."!cursor_debug"("START", "quantifier:sym<*>")
-  debug_222:
+  debug_233:
     $I10 = self.'from'()
     ne $I10, -1, rxscan147_done
     goto rxscan147_scan
@@ -1891,15 +1895,15 @@
     rx143_pos = $P10."pos"()
   # rx pass
     rx143_cur."!cursor_pass"(rx143_pos, "quantifier:sym<*>")
-    if_null rx143_debug, debug_223
+    if_null rx143_debug, debug_234
     rx143_cur."!cursor_debug"("PASS", "quantifier:sym<*>", " at pos=", rx143_pos)
-  debug_223:
+  debug_234:
     .return (rx143_cur)
   rx143_restart:
 .annotate 'line', 3
-    if_null rx143_debug, debug_224
+    if_null rx143_debug, debug_235
     rx143_cur."!cursor_debug"("NEXT", "quantifier:sym<*>")
-  debug_224:
+  debug_235:
   rx143_fail:
     (rx143_rep, rx143_pos, $I10, $P10) = rx143_cur."!mark_fail"(0)
     lt rx143_pos, -1, rx143_done
@@ -1907,16 +1911,16 @@
     jump $I10
   rx143_done:
     rx143_cur."!cursor_fail"()
-    if_null rx143_debug, debug_225
+    if_null rx143_debug, debug_236
     rx143_cur."!cursor_debug"("FAIL", "quantifier:sym<*>")
-  debug_225:
+  debug_236:
     .return (rx143_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier:sym<*>"  :subid("41_1282323996.47527") :method
+.sub "!PREFIX__quantifier:sym<*>"  :subid("41_1284728471.30547") :method
 .annotate 'line', 3
     $P145 = self."!PREFIX__!subrule"("backmod", "*")
     new $P146, "ResizablePMCArray"
@@ -1926,7 +1930,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier:sym<+>"  :subid("42_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "quantifier:sym<+>"  :subid("42_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
     .local string rx150_tgt
     .local int rx150_pos
@@ -1948,9 +1952,9 @@
     substr rx150_tgt, rx150_tgt, rx150_off
   rx150_start:
     eq $I10, 1, rx150_restart
-    if_null rx150_debug, debug_226
+    if_null rx150_debug, debug_237
     rx150_cur."!cursor_debug"("START", "quantifier:sym<+>")
-  debug_226:
+  debug_237:
     $I10 = self.'from'()
     ne $I10, -1, rxscan154_done
     goto rxscan154_scan
@@ -1994,15 +1998,15 @@
     rx150_pos = $P10."pos"()
   # rx pass
     rx150_cur."!cursor_pass"(rx150_pos, "quantifier:sym<+>")
-    if_null rx150_debug, debug_227
+    if_null rx150_debug, debug_238
     rx150_cur."!cursor_debug"("PASS", "quantifier:sym<+>", " at pos=", rx150_pos)
-  debug_227:
+  debug_238:
     .return (rx150_cur)
   rx150_restart:
 .annotate 'line', 3
-    if_null rx150_debug, debug_228
+    if_null rx150_debug, debug_239
     rx150_cur."!cursor_debug"("NEXT", "quantifier:sym<+>")
-  debug_228:
+  debug_239:
   rx150_fail:
     (rx150_rep, rx150_pos, $I10, $P10) = rx150_cur."!mark_fail"(0)
     lt rx150_pos, -1, rx150_done
@@ -2010,16 +2014,16 @@
     jump $I10
   rx150_done:
     rx150_cur."!cursor_fail"()
-    if_null rx150_debug, debug_229
+    if_null rx150_debug, debug_240
     rx150_cur."!cursor_debug"("FAIL", "quantifier:sym<+>")
-  debug_229:
+  debug_240:
     .return (rx150_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier:sym<+>"  :subid("43_1282323996.47527") :method
+.sub "!PREFIX__quantifier:sym<+>"  :subid("43_1284728471.30547") :method
 .annotate 'line', 3
     $P152 = self."!PREFIX__!subrule"("backmod", "+")
     new $P153, "ResizablePMCArray"
@@ -2029,7 +2033,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier:sym<?>"  :subid("44_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "quantifier:sym<?>"  :subid("44_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
     .local string rx157_tgt
     .local int rx157_pos
@@ -2051,9 +2055,9 @@
     substr rx157_tgt, rx157_tgt, rx157_off
   rx157_start:
     eq $I10, 1, rx157_restart
-    if_null rx157_debug, debug_230
+    if_null rx157_debug, debug_241
     rx157_cur."!cursor_debug"("START", "quantifier:sym<?>")
-  debug_230:
+  debug_241:
     $I10 = self.'from'()
     ne $I10, -1, rxscan161_done
     goto rxscan161_scan
@@ -2097,15 +2101,15 @@
     rx157_pos = $P10."pos"()
   # rx pass
     rx157_cur."!cursor_pass"(rx157_pos, "quantifier:sym<?>")
-    if_null rx157_debug, debug_231
+    if_null rx157_debug, debug_242
     rx157_cur."!cursor_debug"("PASS", "quantifier:sym<?>", " at pos=", rx157_pos)
-  debug_231:
+  debug_242:
     .return (rx157_cur)
   rx157_restart:
 .annotate 'line', 3
-    if_null rx157_debug, debug_232
+    if_null rx157_debug, debug_243
     rx157_cur."!cursor_debug"("NEXT", "quantifier:sym<?>")
-  debug_232:
+  debug_243:
   rx157_fail:
     (rx157_rep, rx157_pos, $I10, $P10) = rx157_cur."!mark_fail"(0)
     lt rx157_pos, -1, rx157_done
@@ -2113,16 +2117,16 @@
     jump $I10
   rx157_done:
     rx157_cur."!cursor_fail"()
-    if_null rx157_debug, debug_233
+    if_null rx157_debug, debug_244
     rx157_cur."!cursor_debug"("FAIL", "quantifier:sym<?>")
-  debug_233:
+  debug_244:
     .return (rx157_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier:sym<?>"  :subid("45_1282323996.47527") :method
+.sub "!PREFIX__quantifier:sym<?>"  :subid("45_1284728471.30547") :method
 .annotate 'line', 3
     $P159 = self."!PREFIX__!subrule"("backmod", "?")
     new $P160, "ResizablePMCArray"
@@ -2132,8 +2136,16 @@
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "quantifier:sym<**>"  :subid("46_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "quantifier:sym<{N,M}>"  :subid("46_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
+    .const 'Sub' $P183 = "51_1284728471.30547" 
+    capture_lex $P183
+    .const 'Sub' $P178 = "50_1284728471.30547" 
+    capture_lex $P178
+    .const 'Sub' $P174 = "49_1284728471.30547" 
+    capture_lex $P174
+    .const 'Sub' $P171 = "48_1284728471.30547" 
+    capture_lex $P171
     .local string rx164_tgt
     .local int rx164_pos
     .local int rx164_off
@@ -2142,7 +2154,6 @@
     .local pmc rx164_cur
     .local pmc rx164_debug
     (rx164_cur, rx164_pos, rx164_tgt, $I10) = self."!cursor_start"()
-    rx164_cur."!cursor_caparray"("max", "normspace")
     getattribute rx164_debug, rx164_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx164_cur
     .local pmc match
@@ -2155,9 +2166,9 @@
     substr rx164_tgt, rx164_tgt, rx164_off
   rx164_start:
     eq $I10, 1, rx164_restart
-    if_null rx164_debug, debug_234
-    rx164_cur."!cursor_debug"("START", "quantifier:sym<**>")
-  debug_234:
+    if_null rx164_debug, debug_245
+    rx164_cur."!cursor_debug"("START", "quantifier:sym<{N,M}>")
+  debug_245:
     $I10 = self.'from'()
     ne $I10, -1, rxscan167_done
     goto rxscan167_scan
@@ -2170,188 +2181,73 @@
     set_addr $I10, rxscan167_loop
     rx164_cur."!mark_push"(0, rx164_pos, $I10)
   rxscan167_done:
-.annotate 'line', 66
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_168_fail
-    rx164_cur."!mark_push"(0, rx164_pos, $I10)
-  # rx literal  "**"
-    add $I11, rx164_pos, 2
+.annotate 'line', 65
+    rx164_cur."!cursor_pos"(rx164_pos)
+    find_lex $P168, unicode:"$\x{a2}"
+    $P169 = $P168."MATCH"()
+    store_lex "$/", $P169
+    .const 'Sub' $P171 = "48_1284728471.30547" 
+    capture_lex $P171
+    $P172 = $P171()
+  # rx literal  "{"
+    add $I11, rx164_pos, 1
     gt $I11, rx164_eos, rx164_fail
     sub $I11, rx164_pos, rx164_off
-    substr $S10, rx164_tgt, $I11, 2
-    ne $S10, "**", rx164_fail
-    add rx164_pos, 2
-    set_addr $I10, rxcap_168_fail
-    ($I12, $I11) = rx164_cur."!mark_peek"($I10)
-    rx164_cur."!cursor_pos"($I11)
-    ($P10) = rx164_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx164_pos, "")
-    rx164_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_168_done
-  rxcap_168_fail:
-    goto rx164_fail
-  rxcap_168_done:
-  # rx rxquantr169 ** 0..1
-    set_addr $I10, rxquantr169_done
-    rx164_cur."!mark_push"(0, rx164_pos, $I10)
-  rxquantr169_loop:
-  # rx subrule "normspace" subtype=capture negate=
+    ord $I11, rx164_tgt, $I11
+    ne $I11, 123, rx164_fail
+    add rx164_pos, 1
+  # rx subrule $P174 subtype=capture negate=
     rx164_cur."!cursor_pos"(rx164_pos)
-    $P10 = rx164_cur."normspace"()
-    unless $P10, rx164_fail
-    goto rxsubrule170_pass
-  rxsubrule170_back:
-    $P10 = $P10."!cursor_next"()
+    .const 'Sub' $P174 = "49_1284728471.30547" 
+    capture_lex $P174
+    $P10 = rx164_cur.$P174()
     unless $P10, rx164_fail
-  rxsubrule170_pass:
-    set_addr $I10, rxsubrule170_back
-    rx164_cur."!mark_push"(0, rx164_pos, $I10, $P10)
-    $P10."!cursor_names"("normspace")
+    rx164_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"(0)
     rx164_pos = $P10."pos"()
-    set_addr $I10, rxquantr169_done
-    (rx164_rep) = rx164_cur."!mark_commit"($I10)
-  rxquantr169_done:
-  # rx subrule "backmod" subtype=capture negate=
+  # rx subrule $P178 subtype=capture negate=
     rx164_cur."!cursor_pos"(rx164_pos)
-    $P10 = rx164_cur."backmod"()
+    .const 'Sub' $P178 = "50_1284728471.30547" 
+    capture_lex $P178
+    $P10 = rx164_cur.$P178()
     unless $P10, rx164_fail
     rx164_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("backmod")
+    $P10."!cursor_names"("1")
     rx164_pos = $P10."pos"()
-  # rx rxquantr171 ** 0..1
-    set_addr $I10, rxquantr171_done
-    rx164_cur."!mark_push"(0, rx164_pos, $I10)
-  rxquantr171_loop:
-  # rx subrule "normspace" subtype=capture negate=
+  # rx subrule $P183 subtype=capture negate=
     rx164_cur."!cursor_pos"(rx164_pos)
-    $P10 = rx164_cur."normspace"()
+    .const 'Sub' $P183 = "51_1284728471.30547" 
+    capture_lex $P183
+    $P10 = rx164_cur.$P183()
     unless $P10, rx164_fail
-    goto rxsubrule172_pass
-  rxsubrule172_back:
-    $P10 = $P10."!cursor_next"()
-    unless $P10, rx164_fail
-  rxsubrule172_pass:
-    set_addr $I10, rxsubrule172_back
-    rx164_cur."!mark_push"(0, rx164_pos, $I10, $P10)
-    $P10."!cursor_names"("normspace")
-    rx164_pos = $P10."pos"()
-    set_addr $I10, rxquantr171_done
-    (rx164_rep) = rx164_cur."!mark_commit"($I10)
-  rxquantr171_done:
-  alt173_0:
-.annotate 'line', 67
-    set_addr $I10, alt173_1
-    rx164_cur."!mark_push"(0, rx164_pos, $I10)
-.annotate 'line', 68
-  # rx subcapture "min"
-    set_addr $I10, rxcap_174_fail
-    rx164_cur."!mark_push"(0, rx164_pos, $I10)
-  # rx charclass_q d r 1..-1
-    sub $I10, rx164_pos, rx164_off
-    find_not_cclass $I11, 8, rx164_tgt, $I10, rx164_eos
-    add $I12, $I10, 1
-    lt $I11, $I12, rx164_fail
-    add rx164_pos, rx164_off, $I11
-    set_addr $I10, rxcap_174_fail
-    ($I12, $I11) = rx164_cur."!mark_peek"($I10)
-    rx164_cur."!cursor_pos"($I11)
-    ($P10) = rx164_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx164_pos, "")
     rx164_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("min")
-    goto rxcap_174_done
-  rxcap_174_fail:
-    goto rx164_fail
-  rxcap_174_done:
-.annotate 'line', 75
-  # rx rxquantr175 ** 0..1
-    set_addr $I10, rxquantr175_done
-    rx164_cur."!mark_push"(0, rx164_pos, $I10)
-  rxquantr175_loop:
-.annotate 'line', 69
-  # rx literal  ".."
-    add $I11, rx164_pos, 2
-    gt $I11, rx164_eos, rx164_fail
-    sub $I11, rx164_pos, rx164_off
-    substr $S10, rx164_tgt, $I11, 2
-    ne $S10, "..", rx164_fail
-    add rx164_pos, 2
-.annotate 'line', 70
-  # rx subcapture "max"
-    set_addr $I10, rxcap_177_fail
-    rx164_cur."!mark_push"(0, rx164_pos, $I10)
-  alt176_0:
-    set_addr $I10, alt176_1
-    rx164_cur."!mark_push"(0, rx164_pos, $I10)
-.annotate 'line', 71
-  # rx charclass_q d r 1..-1
-    sub $I10, rx164_pos, rx164_off
-    find_not_cclass $I11, 8, rx164_tgt, $I10, rx164_eos
-    add $I12, $I10, 1
-    lt $I11, $I12, rx164_fail
-    add rx164_pos, rx164_off, $I11
-    goto alt176_end
-  alt176_1:
-    set_addr $I10, alt176_2
-    rx164_cur."!mark_push"(0, rx164_pos, $I10)
-.annotate 'line', 72
-  # rx literal  "*"
+    $P10."!cursor_names"("2")
+    rx164_pos = $P10."pos"()
+  # rx literal  "}"
     add $I11, rx164_pos, 1
     gt $I11, rx164_eos, rx164_fail
     sub $I11, rx164_pos, rx164_off
     ord $I11, rx164_tgt, $I11
-    ne $I11, 42, rx164_fail
+    ne $I11, 125, rx164_fail
     add rx164_pos, 1
-    goto alt176_end
-  alt176_2:
-.annotate 'line', 73
-  # rx subrule "panic" subtype=method negate=
-    rx164_cur."!cursor_pos"(rx164_pos)
-    $P10 = rx164_cur."panic"("Only integers or '*' allowed as range quantifier endpoint")
-    unless $P10, rx164_fail
-    rx164_pos = $P10."pos"()
-  alt176_end:
-.annotate 'line', 70
-    set_addr $I10, rxcap_177_fail
-    ($I12, $I11) = rx164_cur."!mark_peek"($I10)
-    rx164_cur."!cursor_pos"($I11)
-    ($P10) = rx164_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx164_pos, "")
-    rx164_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("max")
-    goto rxcap_177_done
-  rxcap_177_fail:
-    goto rx164_fail
-  rxcap_177_done:
-.annotate 'line', 75
-    set_addr $I10, rxquantr175_done
-    (rx164_rep) = rx164_cur."!mark_commit"($I10)
-  rxquantr175_done:
-.annotate 'line', 68
-    goto alt173_end
-  alt173_1:
-.annotate 'line', 76
-  # rx subrule "quantified_atom" subtype=capture negate=
+.annotate 'line', 66
+  # rx subrule "obs" subtype=method negate=
     rx164_cur."!cursor_pos"(rx164_pos)
-    $P10 = rx164_cur."quantified_atom"()
+    $P10 = rx164_cur."obs"("{N,M} as general quantifier", "** N..M (or ** N..*)")
     unless $P10, rx164_fail
-    rx164_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quantified_atom")
     rx164_pos = $P10."pos"()
-  alt173_end:
 .annotate 'line', 65
   # rx pass
-    rx164_cur."!cursor_pass"(rx164_pos, "quantifier:sym<**>")
-    if_null rx164_debug, debug_235
-    rx164_cur."!cursor_debug"("PASS", "quantifier:sym<**>", " at pos=", rx164_pos)
-  debug_235:
+    rx164_cur."!cursor_pass"(rx164_pos, "quantifier:sym<{N,M}>")
+    if_null rx164_debug, debug_258
+    rx164_cur."!cursor_debug"("PASS", "quantifier:sym<{N,M}>", " at pos=", rx164_pos)
+  debug_258:
     .return (rx164_cur)
   rx164_restart:
 .annotate 'line', 3
-    if_null rx164_debug, debug_236
-    rx164_cur."!cursor_debug"("NEXT", "quantifier:sym<**>")
-  debug_236:
+    if_null rx164_debug, debug_259
+    rx164_cur."!cursor_debug"("NEXT", "quantifier:sym<{N,M}>")
+  debug_259:
   rx164_fail:
     (rx164_rep, rx164_pos, $I10, $P10) = rx164_cur."!mark_fail"(0)
     lt rx164_pos, -1, rx164_done
@@ -2359,28 +2255,102 @@
     jump $I10
   rx164_done:
     rx164_cur."!cursor_fail"()
-    if_null rx164_debug, debug_237
-    rx164_cur."!cursor_debug"("FAIL", "quantifier:sym<**>")
-  debug_237:
+    if_null rx164_debug, debug_260
+    rx164_cur."!cursor_debug"("FAIL", "quantifier:sym<{N,M}>")
+  debug_260:
     .return (rx164_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__quantifier:sym<**>"  :subid("47_1282323996.47527") :method
+.sub "!PREFIX__quantifier:sym<{N,M}>"  :subid("47_1284728471.30547") :method
 .annotate 'line', 3
     new $P166, "ResizablePMCArray"
-    push $P166, "**"
+    push $P166, ""
     .return ($P166)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backmod"  :subid("48_1282323996.47527") :method :outer("11_1282323996.47527")
-.annotate 'line', 3
-    .const 'Sub' $P186 = "50_1282323996.47527" 
-    capture_lex $P186
+.sub "_block170"  :anon :subid("48_1284728471.30547") :outer("46_1284728471.30547")
+.annotate 'line', 65
+    .return ()
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "_block173"  :anon :subid("49_1284728471.30547") :method :outer("46_1284728471.30547")
+.annotate 'line', 65
+    .local string rx175_tgt
+    .local int rx175_pos
+    .local int rx175_off
+    .local int rx175_eos
+    .local int rx175_rep
+    .local pmc rx175_cur
+    .local pmc rx175_debug
+    (rx175_cur, rx175_pos, rx175_tgt, $I10) = self."!cursor_start"()
+    getattribute rx175_debug, rx175_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx175_cur
+    .local pmc match
+    .lex "$/", match
+    length rx175_eos, rx175_tgt
+    gt rx175_pos, rx175_eos, rx175_done
+    set rx175_off, 0
+    lt rx175_pos, 2, rx175_start
+    sub rx175_off, rx175_pos, 1
+    substr rx175_tgt, rx175_tgt, rx175_off
+  rx175_start:
+    eq $I10, 1, rx175_restart
+    if_null rx175_debug, debug_246
+    rx175_cur."!cursor_debug"("START", "")
+  debug_246:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan176_done
+    goto rxscan176_scan
+  rxscan176_loop:
+    ($P10) = rx175_cur."from"()
+    inc $P10
+    set rx175_pos, $P10
+    ge rx175_pos, rx175_eos, rxscan176_done
+  rxscan176_scan:
+    set_addr $I10, rxscan176_loop
+    rx175_cur."!mark_push"(0, rx175_pos, $I10)
+  rxscan176_done:
+  # rx charclass_q d r 1..-1
+    sub $I10, rx175_pos, rx175_off
+    find_not_cclass $I11, 8, rx175_tgt, $I10, rx175_eos
+    add $I12, $I10, 1
+    lt $I11, $I12, rx175_fail
+    add rx175_pos, rx175_off, $I11
+  # rx pass
+    rx175_cur."!cursor_pass"(rx175_pos, "")
+    if_null rx175_debug, debug_247
+    rx175_cur."!cursor_debug"("PASS", "", " at pos=", rx175_pos)
+  debug_247:
+    .return (rx175_cur)
+  rx175_restart:
+    if_null rx175_debug, debug_248
+    rx175_cur."!cursor_debug"("NEXT", "")
+  debug_248:
+  rx175_fail:
+    (rx175_rep, rx175_pos, $I10, $P10) = rx175_cur."!mark_fail"(0)
+    lt rx175_pos, -1, rx175_done
+    eq rx175_pos, -1, rx175_fail
+    jump $I10
+  rx175_done:
+    rx175_cur."!cursor_fail"()
+    if_null rx175_debug, debug_249
+    rx175_cur."!cursor_debug"("FAIL", "")
+  debug_249:
+    .return (rx175_cur)
+    .return ()
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "_block177"  :anon :subid("50_1284728471.30547") :method :outer("46_1284728471.30547")
+.annotate 'line', 65
     .local string rx179_tgt
     .local int rx179_pos
     .local int rx179_off
@@ -2401,77 +2371,45 @@
     substr rx179_tgt, rx179_tgt, rx179_off
   rx179_start:
     eq $I10, 1, rx179_restart
-    if_null rx179_debug, debug_238
-    rx179_cur."!cursor_debug"("START", "backmod")
-  debug_238:
+    if_null rx179_debug, debug_250
+    rx179_cur."!cursor_debug"("START", "")
+  debug_250:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan182_done
-    goto rxscan182_scan
-  rxscan182_loop:
+    ne $I10, -1, rxscan180_done
+    goto rxscan180_scan
+  rxscan180_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
+    ge rx179_pos, rx179_eos, rxscan180_done
+  rxscan180_scan:
+    set_addr $I10, rxscan180_loop
     rx179_cur."!mark_push"(0, rx179_pos, $I10)
-  rxscan182_done:
-.annotate 'line', 80
-  # rx rxquantr183 ** 0..1
-    set_addr $I10, rxquantr183_done
+  rxscan180_done:
+  # rx rxquantr181 ** 0..1
+    set_addr $I10, rxquantr181_done
     rx179_cur."!mark_push"(0, rx179_pos, $I10)
-  rxquantr183_loop:
-  # rx literal  ":"
+  rxquantr181_loop:
+  # rx literal  ","
     add $I11, rx179_pos, 1
     gt $I11, rx179_eos, rx179_fail
     sub $I11, rx179_pos, rx179_off
     ord $I11, rx179_tgt, $I11
-    ne $I11, 58, rx179_fail
+    ne $I11, 44, rx179_fail
     add rx179_pos, 1
-    set_addr $I10, rxquantr183_done
+    set_addr $I10, rxquantr181_done
     (rx179_rep) = rx179_cur."!mark_commit"($I10)
-  rxquantr183_done:
-  alt184_0:
-    set_addr $I10, alt184_1
-    rx179_cur."!mark_push"(0, rx179_pos, $I10)
-  # rx literal  "?"
-    add $I11, rx179_pos, 1
-    gt $I11, rx179_eos, rx179_fail
-    sub $I11, rx179_pos, rx179_off
-    ord $I11, rx179_tgt, $I11
-    ne $I11, 63, rx179_fail
-    add rx179_pos, 1
-    goto alt184_end
-  alt184_1:
-    set_addr $I10, alt184_2
-    rx179_cur."!mark_push"(0, rx179_pos, $I10)
-  # rx literal  "!"
-    add $I11, rx179_pos, 1
-    gt $I11, rx179_eos, rx179_fail
-    sub $I11, rx179_pos, rx179_off
-    ord $I11, rx179_tgt, $I11
-    ne $I11, 33, rx179_fail
-    add rx179_pos, 1
-    goto alt184_end
-  alt184_2:
-  # rx subrule "before" subtype=zerowidth negate=1
-    rx179_cur."!cursor_pos"(rx179_pos)
-    .const 'Sub' $P186 = "50_1282323996.47527" 
-    capture_lex $P186
-    $P10 = rx179_cur."before"($P186)
-    if $P10, rx179_fail
-  alt184_end:
-  # rx pass
-    rx179_cur."!cursor_pass"(rx179_pos, "backmod")
-    if_null rx179_debug, debug_243
-    rx179_cur."!cursor_debug"("PASS", "backmod", " at pos=", rx179_pos)
-  debug_243:
+  rxquantr181_done:
+  # rx pass
+    rx179_cur."!cursor_pass"(rx179_pos, "")
+    if_null rx179_debug, debug_251
+    rx179_cur."!cursor_debug"("PASS", "", " at pos=", rx179_pos)
+  debug_251:
     .return (rx179_cur)
   rx179_restart:
-.annotate 'line', 3
-    if_null rx179_debug, debug_244
-    rx179_cur."!cursor_debug"("NEXT", "backmod")
-  debug_244:
+    if_null rx179_debug, debug_252
+    rx179_cur."!cursor_debug"("NEXT", "")
+  debug_252:
   rx179_fail:
     (rx179_rep, rx179_pos, $I10, $P10) = rx179_cur."!mark_fail"(0)
     lt rx179_pos, -1, rx179_done
@@ -2479,26 +2417,84 @@
     jump $I10
   rx179_done:
     rx179_cur."!cursor_fail"()
-    if_null rx179_debug, debug_245
-    rx179_cur."!cursor_debug"("FAIL", "backmod")
-  debug_245:
+    if_null rx179_debug, debug_253
+    rx179_cur."!cursor_debug"("FAIL", "")
+  debug_253:
     .return (rx179_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backmod"  :subid("49_1282323996.47527") :method
-.annotate 'line', 3
-    new $P181, "ResizablePMCArray"
-    push $P181, ""
-    .return ($P181)
+.sub "_block182"  :anon :subid("51_1284728471.30547") :method :outer("46_1284728471.30547")
+.annotate 'line', 65
+    .local string rx184_tgt
+    .local int rx184_pos
+    .local int rx184_off
+    .local int rx184_eos
+    .local int rx184_rep
+    .local pmc rx184_cur
+    .local pmc rx184_debug
+    (rx184_cur, rx184_pos, rx184_tgt, $I10) = self."!cursor_start"()
+    getattribute rx184_debug, rx184_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx184_cur
+    .local pmc match
+    .lex "$/", match
+    length rx184_eos, rx184_tgt
+    gt rx184_pos, rx184_eos, rx184_done
+    set rx184_off, 0
+    lt rx184_pos, 2, rx184_start
+    sub rx184_off, rx184_pos, 1
+    substr rx184_tgt, rx184_tgt, rx184_off
+  rx184_start:
+    eq $I10, 1, rx184_restart
+    if_null rx184_debug, debug_254
+    rx184_cur."!cursor_debug"("START", "")
+  debug_254:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan185_done
+    goto rxscan185_scan
+  rxscan185_loop:
+    ($P10) = rx184_cur."from"()
+    inc $P10
+    set rx184_pos, $P10
+    ge rx184_pos, rx184_eos, rxscan185_done
+  rxscan185_scan:
+    set_addr $I10, rxscan185_loop
+    rx184_cur."!mark_push"(0, rx184_pos, $I10)
+  rxscan185_done:
+  # rx charclass_q d r 0..-1
+    sub $I10, rx184_pos, rx184_off
+    find_not_cclass $I11, 8, rx184_tgt, $I10, rx184_eos
+    add rx184_pos, rx184_off, $I11
+  # rx pass
+    rx184_cur."!cursor_pass"(rx184_pos, "")
+    if_null rx184_debug, debug_255
+    rx184_cur."!cursor_debug"("PASS", "", " at pos=", rx184_pos)
+  debug_255:
+    .return (rx184_cur)
+  rx184_restart:
+    if_null rx184_debug, debug_256
+    rx184_cur."!cursor_debug"("NEXT", "")
+  debug_256:
+  rx184_fail:
+    (rx184_rep, rx184_pos, $I10, $P10) = rx184_cur."!mark_fail"(0)
+    lt rx184_pos, -1, rx184_done
+    eq rx184_pos, -1, rx184_fail
+    jump $I10
+  rx184_done:
+    rx184_cur."!cursor_fail"()
+    if_null rx184_debug, debug_257
+    rx184_cur."!cursor_debug"("FAIL", "")
+  debug_257:
+    .return (rx184_cur)
+    .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block185"  :anon :subid("50_1282323996.47527") :method :outer("48_1282323996.47527")
-.annotate 'line', 80
+.sub "quantifier:sym<**>"  :subid("52_1284728471.30547") :method :outer("11_1284728471.30547")
+.annotate 'line', 3
     .local string rx187_tgt
     .local int rx187_pos
     .local int rx187_off
@@ -2507,6 +2503,7 @@
     .local pmc rx187_cur
     .local pmc rx187_debug
     (rx187_cur, rx187_pos, rx187_tgt, $I10) = self."!cursor_start"()
+    rx187_cur."!cursor_caparray"("max", "normspace")
     getattribute rx187_debug, rx187_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx187_cur
     .local pmc match
@@ -2519,38 +2516,203 @@
     substr rx187_tgt, rx187_tgt, rx187_off
   rx187_start:
     eq $I10, 1, rx187_restart
-    if_null rx187_debug, debug_239
-    rx187_cur."!cursor_debug"("START", "")
-  debug_239:
+    if_null rx187_debug, debug_261
+    rx187_cur."!cursor_debug"("START", "quantifier:sym<**>")
+  debug_261:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan188_done
-    goto rxscan188_scan
-  rxscan188_loop:
+    ne $I10, -1, rxscan190_done
+    goto rxscan190_scan
+  rxscan190_loop:
     ($P10) = rx187_cur."from"()
     inc $P10
     set rx187_pos, $P10
-    ge rx187_pos, rx187_eos, rxscan188_done
-  rxscan188_scan:
-    set_addr $I10, rxscan188_loop
+    ge rx187_pos, rx187_eos, rxscan190_done
+  rxscan190_scan:
+    set_addr $I10, rxscan190_loop
     rx187_cur."!mark_push"(0, rx187_pos, $I10)
-  rxscan188_done:
-  # rx literal  ":"
+  rxscan190_done:
+.annotate 'line', 69
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_191_fail
+    rx187_cur."!mark_push"(0, rx187_pos, $I10)
+  # rx literal  "**"
+    add $I11, rx187_pos, 2
+    gt $I11, rx187_eos, rx187_fail
+    sub $I11, rx187_pos, rx187_off
+    substr $S10, rx187_tgt, $I11, 2
+    ne $S10, "**", rx187_fail
+    add rx187_pos, 2
+    set_addr $I10, rxcap_191_fail
+    ($I12, $I11) = rx187_cur."!mark_peek"($I10)
+    rx187_cur."!cursor_pos"($I11)
+    ($P10) = rx187_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx187_pos, "")
+    rx187_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_191_done
+  rxcap_191_fail:
+    goto rx187_fail
+  rxcap_191_done:
+  # rx rxquantr192 ** 0..1
+    set_addr $I10, rxquantr192_done
+    rx187_cur."!mark_push"(0, rx187_pos, $I10)
+  rxquantr192_loop:
+  # rx subrule "normspace" subtype=capture negate=
+    rx187_cur."!cursor_pos"(rx187_pos)
+    $P10 = rx187_cur."normspace"()
+    unless $P10, rx187_fail
+    goto rxsubrule193_pass
+  rxsubrule193_back:
+    $P10 = $P10."!cursor_next"()
+    unless $P10, rx187_fail
+  rxsubrule193_pass:
+    set_addr $I10, rxsubrule193_back
+    rx187_cur."!mark_push"(0, rx187_pos, $I10, $P10)
+    $P10."!cursor_names"("normspace")
+    rx187_pos = $P10."pos"()
+    set_addr $I10, rxquantr192_done
+    (rx187_rep) = rx187_cur."!mark_commit"($I10)
+  rxquantr192_done:
+  # rx subrule "backmod" subtype=capture negate=
+    rx187_cur."!cursor_pos"(rx187_pos)
+    $P10 = rx187_cur."backmod"()
+    unless $P10, rx187_fail
+    rx187_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("backmod")
+    rx187_pos = $P10."pos"()
+  # rx rxquantr194 ** 0..1
+    set_addr $I10, rxquantr194_done
+    rx187_cur."!mark_push"(0, rx187_pos, $I10)
+  rxquantr194_loop:
+  # rx subrule "normspace" subtype=capture negate=
+    rx187_cur."!cursor_pos"(rx187_pos)
+    $P10 = rx187_cur."normspace"()
+    unless $P10, rx187_fail
+    goto rxsubrule195_pass
+  rxsubrule195_back:
+    $P10 = $P10."!cursor_next"()
+    unless $P10, rx187_fail
+  rxsubrule195_pass:
+    set_addr $I10, rxsubrule195_back
+    rx187_cur."!mark_push"(0, rx187_pos, $I10, $P10)
+    $P10."!cursor_names"("normspace")
+    rx187_pos = $P10."pos"()
+    set_addr $I10, rxquantr194_done
+    (rx187_rep) = rx187_cur."!mark_commit"($I10)
+  rxquantr194_done:
+  alt196_0:
+.annotate 'line', 70
+    set_addr $I10, alt196_1
+    rx187_cur."!mark_push"(0, rx187_pos, $I10)
+.annotate 'line', 71
+  # rx subcapture "min"
+    set_addr $I10, rxcap_197_fail
+    rx187_cur."!mark_push"(0, rx187_pos, $I10)
+  # rx charclass_q d r 1..-1
+    sub $I10, rx187_pos, rx187_off
+    find_not_cclass $I11, 8, rx187_tgt, $I10, rx187_eos
+    add $I12, $I10, 1
+    lt $I11, $I12, rx187_fail
+    add rx187_pos, rx187_off, $I11
+    set_addr $I10, rxcap_197_fail
+    ($I12, $I11) = rx187_cur."!mark_peek"($I10)
+    rx187_cur."!cursor_pos"($I11)
+    ($P10) = rx187_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx187_pos, "")
+    rx187_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("min")
+    goto rxcap_197_done
+  rxcap_197_fail:
+    goto rx187_fail
+  rxcap_197_done:
+.annotate 'line', 78
+  # rx rxquantr198 ** 0..1
+    set_addr $I10, rxquantr198_done
+    rx187_cur."!mark_push"(0, rx187_pos, $I10)
+  rxquantr198_loop:
+.annotate 'line', 72
+  # rx literal  ".."
+    add $I11, rx187_pos, 2
+    gt $I11, rx187_eos, rx187_fail
+    sub $I11, rx187_pos, rx187_off
+    substr $S10, rx187_tgt, $I11, 2
+    ne $S10, "..", rx187_fail
+    add rx187_pos, 2
+.annotate 'line', 73
+  # rx subcapture "max"
+    set_addr $I10, rxcap_200_fail
+    rx187_cur."!mark_push"(0, rx187_pos, $I10)
+  alt199_0:
+    set_addr $I10, alt199_1
+    rx187_cur."!mark_push"(0, rx187_pos, $I10)
+.annotate 'line', 74
+  # rx charclass_q d r 1..-1
+    sub $I10, rx187_pos, rx187_off
+    find_not_cclass $I11, 8, rx187_tgt, $I10, rx187_eos
+    add $I12, $I10, 1
+    lt $I11, $I12, rx187_fail
+    add rx187_pos, rx187_off, $I11
+    goto alt199_end
+  alt199_1:
+    set_addr $I10, alt199_2
+    rx187_cur."!mark_push"(0, rx187_pos, $I10)
+.annotate 'line', 75
+  # rx literal  "*"
     add $I11, rx187_pos, 1
     gt $I11, rx187_eos, rx187_fail
     sub $I11, rx187_pos, rx187_off
     ord $I11, rx187_tgt, $I11
-    ne $I11, 58, rx187_fail
+    ne $I11, 42, rx187_fail
     add rx187_pos, 1
+    goto alt199_end
+  alt199_2:
+.annotate 'line', 76
+  # rx subrule "panic" subtype=method negate=
+    rx187_cur."!cursor_pos"(rx187_pos)
+    $P10 = rx187_cur."panic"("Only integers or '*' allowed as range quantifier endpoint")
+    unless $P10, rx187_fail
+    rx187_pos = $P10."pos"()
+  alt199_end:
+.annotate 'line', 73
+    set_addr $I10, rxcap_200_fail
+    ($I12, $I11) = rx187_cur."!mark_peek"($I10)
+    rx187_cur."!cursor_pos"($I11)
+    ($P10) = rx187_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx187_pos, "")
+    rx187_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("max")
+    goto rxcap_200_done
+  rxcap_200_fail:
+    goto rx187_fail
+  rxcap_200_done:
+.annotate 'line', 78
+    set_addr $I10, rxquantr198_done
+    (rx187_rep) = rx187_cur."!mark_commit"($I10)
+  rxquantr198_done:
+.annotate 'line', 71
+    goto alt196_end
+  alt196_1:
+.annotate 'line', 79
+  # rx subrule "quantified_atom" subtype=capture negate=
+    rx187_cur."!cursor_pos"(rx187_pos)
+    $P10 = rx187_cur."quantified_atom"()
+    unless $P10, rx187_fail
+    rx187_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quantified_atom")
+    rx187_pos = $P10."pos"()
+  alt196_end:
+.annotate 'line', 68
   # rx pass
-    rx187_cur."!cursor_pass"(rx187_pos, "")
-    if_null rx187_debug, debug_240
-    rx187_cur."!cursor_debug"("PASS", "", " at pos=", rx187_pos)
-  debug_240:
+    rx187_cur."!cursor_pass"(rx187_pos, "quantifier:sym<**>")
+    if_null rx187_debug, debug_262
+    rx187_cur."!cursor_debug"("PASS", "quantifier:sym<**>", " at pos=", rx187_pos)
+  debug_262:
     .return (rx187_cur)
   rx187_restart:
-    if_null rx187_debug, debug_241
-    rx187_cur."!cursor_debug"("NEXT", "")
-  debug_241:
+.annotate 'line', 3
+    if_null rx187_debug, debug_263
+    rx187_cur."!cursor_debug"("NEXT", "quantifier:sym<**>")
+  debug_263:
   rx187_fail:
     (rx187_rep, rx187_pos, $I10, $P10) = rx187_cur."!mark_fail"(0)
     lt rx187_pos, -1, rx187_done
@@ -2558,391 +2720,231 @@
     jump $I10
   rx187_done:
     rx187_cur."!cursor_fail"()
-    if_null rx187_debug, debug_242
-    rx187_cur."!cursor_debug"("FAIL", "")
-  debug_242:
+    if_null rx187_debug, debug_264
+    rx187_cur."!cursor_debug"("FAIL", "quantifier:sym<**>")
+  debug_264:
     .return (rx187_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar"  :subid("51_1282323996.47527") :method
-.annotate 'line', 82
-    $P190 = self."!protoregex"("metachar")
-    .return ($P190)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar"  :subid("52_1282323996.47527") :method
-.annotate 'line', 82
-    $P192 = self."!PREFIX__!protoregex"("metachar")
-    .return ($P192)
+.sub "!PREFIX__quantifier:sym<**>"  :subid("53_1284728471.30547") :method
+.annotate 'line', 3
+    new $P189, "ResizablePMCArray"
+    push $P189, "**"
+    .return ($P189)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<ws>"  :subid("53_1282323996.47527") :method :outer("11_1282323996.47527")
-.annotate 'line', 3
-    .local string rx194_tgt
-    .local int rx194_pos
-    .local int rx194_off
-    .local int rx194_eos
-    .local int rx194_rep
-    .local pmc rx194_cur
-    .local pmc rx194_debug
-    (rx194_cur, rx194_pos, rx194_tgt, $I10) = self."!cursor_start"()
-    getattribute rx194_debug, rx194_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx194_cur
-    .local pmc match
-    .lex "$/", match
-    length rx194_eos, rx194_tgt
-    gt rx194_pos, rx194_eos, rx194_done
-    set rx194_off, 0
-    lt rx194_pos, 2, rx194_start
-    sub rx194_off, rx194_pos, 1
-    substr rx194_tgt, rx194_tgt, rx194_off
-  rx194_start:
-    eq $I10, 1, rx194_restart
-    if_null rx194_debug, debug_246
-    rx194_cur."!cursor_debug"("START", "metachar:sym<ws>")
-  debug_246:
+.sub "backmod"  :subid("54_1284728471.30547") :method :outer("11_1284728471.30547")
+.annotate 'line', 3
+    .const 'Sub' $P209 = "56_1284728471.30547" 
+    capture_lex $P209
+    .local string rx202_tgt
+    .local int rx202_pos
+    .local int rx202_off
+    .local int rx202_eos
+    .local int rx202_rep
+    .local pmc rx202_cur
+    .local pmc rx202_debug
+    (rx202_cur, rx202_pos, rx202_tgt, $I10) = self."!cursor_start"()
+    getattribute rx202_debug, rx202_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx202_cur
+    .local pmc match
+    .lex "$/", match
+    length rx202_eos, rx202_tgt
+    gt rx202_pos, rx202_eos, rx202_done
+    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:
+    eq $I10, 1, rx202_restart
+    if_null rx202_debug, debug_265
+    rx202_cur."!cursor_debug"("START", "backmod")
+  debug_265:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan198_done
-    goto rxscan198_scan
-  rxscan198_loop:
-    ($P10) = rx194_cur."from"()
-    inc $P10
-    set rx194_pos, $P10
-    ge rx194_pos, rx194_eos, rxscan198_done
-  rxscan198_scan:
-    set_addr $I10, rxscan198_loop
-    rx194_cur."!mark_push"(0, rx194_pos, $I10)
-  rxscan198_done:
+    ne $I10, -1, rxscan205_done
+    goto rxscan205_scan
+  rxscan205_loop:
+    ($P10) = rx202_cur."from"()
+    inc $P10
+    set rx202_pos, $P10
+    ge rx202_pos, rx202_eos, rxscan205_done
+  rxscan205_scan:
+    set_addr $I10, rxscan205_loop
+    rx202_cur."!mark_push"(0, rx202_pos, $I10)
+  rxscan205_done:
 .annotate 'line', 83
-  # rx subrule "normspace" subtype=method negate=
-    rx194_cur."!cursor_pos"(rx194_pos)
-    $P10 = rx194_cur."normspace"()
-    unless $P10, rx194_fail
-    rx194_pos = $P10."pos"()
-  # rx pass
-    rx194_cur."!cursor_pass"(rx194_pos, "metachar:sym<ws>")
-    if_null rx194_debug, debug_247
-    rx194_cur."!cursor_debug"("PASS", "metachar:sym<ws>", " at pos=", rx194_pos)
-  debug_247:
-    .return (rx194_cur)
-  rx194_restart:
+  # rx rxquantr206 ** 0..1
+    set_addr $I10, rxquantr206_done
+    rx202_cur."!mark_push"(0, rx202_pos, $I10)
+  rxquantr206_loop:
+  # rx literal  ":"
+    add $I11, rx202_pos, 1
+    gt $I11, rx202_eos, rx202_fail
+    sub $I11, rx202_pos, rx202_off
+    ord $I11, rx202_tgt, $I11
+    ne $I11, 58, rx202_fail
+    add rx202_pos, 1
+    set_addr $I10, rxquantr206_done
+    (rx202_rep) = rx202_cur."!mark_commit"($I10)
+  rxquantr206_done:
+  alt207_0:
+    set_addr $I10, alt207_1
+    rx202_cur."!mark_push"(0, rx202_pos, $I10)
+  # rx literal  "?"
+    add $I11, rx202_pos, 1
+    gt $I11, rx202_eos, rx202_fail
+    sub $I11, rx202_pos, rx202_off
+    ord $I11, rx202_tgt, $I11
+    ne $I11, 63, rx202_fail
+    add rx202_pos, 1
+    goto alt207_end
+  alt207_1:
+    set_addr $I10, alt207_2
+    rx202_cur."!mark_push"(0, rx202_pos, $I10)
+  # rx literal  "!"
+    add $I11, rx202_pos, 1
+    gt $I11, rx202_eos, rx202_fail
+    sub $I11, rx202_pos, rx202_off
+    ord $I11, rx202_tgt, $I11
+    ne $I11, 33, rx202_fail
+    add rx202_pos, 1
+    goto alt207_end
+  alt207_2:
+  # rx subrule "before" subtype=zerowidth negate=1
+    rx202_cur."!cursor_pos"(rx202_pos)
+    .const 'Sub' $P209 = "56_1284728471.30547" 
+    capture_lex $P209
+    $P10 = rx202_cur."before"($P209)
+    if $P10, rx202_fail
+  alt207_end:
+  # rx pass
+    rx202_cur."!cursor_pass"(rx202_pos, "backmod")
+    if_null rx202_debug, debug_270
+    rx202_cur."!cursor_debug"("PASS", "backmod", " at pos=", rx202_pos)
+  debug_270:
+    .return (rx202_cur)
+  rx202_restart:
 .annotate 'line', 3
-    if_null rx194_debug, debug_248
-    rx194_cur."!cursor_debug"("NEXT", "metachar:sym<ws>")
-  debug_248:
-  rx194_fail:
-    (rx194_rep, rx194_pos, $I10, $P10) = rx194_cur."!mark_fail"(0)
-    lt rx194_pos, -1, rx194_done
-    eq rx194_pos, -1, rx194_fail
-    jump $I10
-  rx194_done:
-    rx194_cur."!cursor_fail"()
-    if_null rx194_debug, debug_249
-    rx194_cur."!cursor_debug"("FAIL", "metachar:sym<ws>")
-  debug_249:
-    .return (rx194_cur)
+    if_null rx202_debug, debug_271
+    rx202_cur."!cursor_debug"("NEXT", "backmod")
+  debug_271:
+  rx202_fail:
+    (rx202_rep, rx202_pos, $I10, $P10) = rx202_cur."!mark_fail"(0)
+    lt rx202_pos, -1, rx202_done
+    eq rx202_pos, -1, rx202_fail
+    jump $I10
+  rx202_done:
+    rx202_cur."!cursor_fail"()
+    if_null rx202_debug, debug_272
+    rx202_cur."!cursor_debug"("FAIL", "backmod")
+  debug_272:
+    .return (rx202_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<ws>"  :subid("54_1282323996.47527") :method
+.sub "!PREFIX__backmod"  :subid("55_1284728471.30547") :method
 .annotate 'line', 3
-    $P196 = self."!PREFIX__!subrule"("normspace", "")
-    new $P197, "ResizablePMCArray"
-    push $P197, $P196
-    .return ($P197)
+    new $P204, "ResizablePMCArray"
+    push $P204, ""
+    .return ($P204)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<[ ]>"  :subid("55_1282323996.47527") :method :outer("11_1282323996.47527")
-.annotate 'line', 3
-    .local string rx200_tgt
-    .local int rx200_pos
-    .local int rx200_off
-    .local int rx200_eos
-    .local int rx200_rep
-    .local pmc rx200_cur
-    .local pmc rx200_debug
-    (rx200_cur, rx200_pos, rx200_tgt, $I10) = self."!cursor_start"()
-    getattribute rx200_debug, rx200_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx200_cur
-    .local pmc match
-    .lex "$/", match
-    length rx200_eos, rx200_tgt
-    gt rx200_pos, rx200_eos, rx200_done
-    set rx200_off, 0
-    lt rx200_pos, 2, rx200_start
-    sub rx200_off, rx200_pos, 1
-    substr rx200_tgt, rx200_tgt, rx200_off
-  rx200_start:
-    eq $I10, 1, rx200_restart
-    if_null rx200_debug, debug_250
-    rx200_cur."!cursor_debug"("START", "metachar:sym<[ ]>")
-  debug_250:
+.sub "_block208"  :anon :subid("56_1284728471.30547") :method :outer("54_1284728471.30547")
+.annotate 'line', 83
+    .local string rx210_tgt
+    .local int rx210_pos
+    .local int rx210_off
+    .local int rx210_eos
+    .local int rx210_rep
+    .local pmc rx210_cur
+    .local pmc rx210_debug
+    (rx210_cur, rx210_pos, rx210_tgt, $I10) = self."!cursor_start"()
+    getattribute rx210_debug, rx210_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx210_cur
+    .local pmc match
+    .lex "$/", match
+    length rx210_eos, rx210_tgt
+    gt rx210_pos, rx210_eos, rx210_done
+    set rx210_off, 0
+    lt rx210_pos, 2, rx210_start
+    sub rx210_off, rx210_pos, 1
+    substr rx210_tgt, rx210_tgt, rx210_off
+  rx210_start:
+    eq $I10, 1, rx210_restart
+    if_null rx210_debug, debug_266
+    rx210_cur."!cursor_debug"("START", "")
+  debug_266:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan204_done
-    goto rxscan204_scan
-  rxscan204_loop:
-    ($P10) = rx200_cur."from"()
-    inc $P10
-    set rx200_pos, $P10
-    ge rx200_pos, rx200_eos, rxscan204_done
-  rxscan204_scan:
-    set_addr $I10, rxscan204_loop
-    rx200_cur."!mark_push"(0, rx200_pos, $I10)
-  rxscan204_done:
-.annotate 'line', 84
-  # rx literal  "["
-    add $I11, rx200_pos, 1
-    gt $I11, rx200_eos, rx200_fail
-    sub $I11, rx200_pos, rx200_off
-    ord $I11, rx200_tgt, $I11
-    ne $I11, 91, rx200_fail
-    add rx200_pos, 1
-  # rx subrule "nibbler" subtype=capture negate=
-    rx200_cur."!cursor_pos"(rx200_pos)
-    $P10 = rx200_cur."nibbler"()
-    unless $P10, rx200_fail
-    rx200_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("nibbler")
-    rx200_pos = $P10."pos"()
-  # rx literal  "]"
-    add $I11, rx200_pos, 1
-    gt $I11, rx200_eos, rx200_fail
-    sub $I11, rx200_pos, rx200_off
-    ord $I11, rx200_tgt, $I11
-    ne $I11, 93, rx200_fail
-    add rx200_pos, 1
-  # rx pass
-    rx200_cur."!cursor_pass"(rx200_pos, "metachar:sym<[ ]>")
-    if_null rx200_debug, debug_251
-    rx200_cur."!cursor_debug"("PASS", "metachar:sym<[ ]>", " at pos=", rx200_pos)
-  debug_251:
-    .return (rx200_cur)
-  rx200_restart:
-.annotate 'line', 3
-    if_null rx200_debug, debug_252
-    rx200_cur."!cursor_debug"("NEXT", "metachar:sym<[ ]>")
-  debug_252:
-  rx200_fail:
-    (rx200_rep, rx200_pos, $I10, $P10) = rx200_cur."!mark_fail"(0)
-    lt rx200_pos, -1, rx200_done
-    eq rx200_pos, -1, rx200_fail
-    jump $I10
-  rx200_done:
-    rx200_cur."!cursor_fail"()
-    if_null rx200_debug, debug_253
-    rx200_cur."!cursor_debug"("FAIL", "metachar:sym<[ ]>")
-  debug_253:
-    .return (rx200_cur)
+    ne $I10, -1, rxscan211_done
+    goto rxscan211_scan
+  rxscan211_loop:
+    ($P10) = rx210_cur."from"()
+    inc $P10
+    set rx210_pos, $P10
+    ge rx210_pos, rx210_eos, rxscan211_done
+  rxscan211_scan:
+    set_addr $I10, rxscan211_loop
+    rx210_cur."!mark_push"(0, rx210_pos, $I10)
+  rxscan211_done:
+  # rx literal  ":"
+    add $I11, rx210_pos, 1
+    gt $I11, rx210_eos, rx210_fail
+    sub $I11, rx210_pos, rx210_off
+    ord $I11, rx210_tgt, $I11
+    ne $I11, 58, rx210_fail
+    add rx210_pos, 1
+  # rx pass
+    rx210_cur."!cursor_pass"(rx210_pos, "")
+    if_null rx210_debug, debug_267
+    rx210_cur."!cursor_debug"("PASS", "", " at pos=", rx210_pos)
+  debug_267:
+    .return (rx210_cur)
+  rx210_restart:
+    if_null rx210_debug, debug_268
+    rx210_cur."!cursor_debug"("NEXT", "")
+  debug_268:
+  rx210_fail:
+    (rx210_rep, rx210_pos, $I10, $P10) = rx210_cur."!mark_fail"(0)
+    lt rx210_pos, -1, rx210_done
+    eq rx210_pos, -1, rx210_fail
+    jump $I10
+  rx210_done:
+    rx210_cur."!cursor_fail"()
+    if_null rx210_debug, debug_269
+    rx210_cur."!cursor_debug"("FAIL", "")
+  debug_269:
+    .return (rx210_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<[ ]>"  :subid("56_1282323996.47527") :method
-.annotate 'line', 3
-    $P202 = self."!PREFIX__!subrule"("nibbler", "[")
-    new $P203, "ResizablePMCArray"
-    push $P203, $P202
-    .return ($P203)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<( )>"  :subid("57_1282323996.47527") :method :outer("11_1282323996.47527")
-.annotate 'line', 3
-    .local string rx206_tgt
-    .local int rx206_pos
-    .local int rx206_off
-    .local int rx206_eos
-    .local int rx206_rep
-    .local pmc rx206_cur
-    .local pmc rx206_debug
-    (rx206_cur, rx206_pos, rx206_tgt, $I10) = self."!cursor_start"()
-    getattribute rx206_debug, rx206_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx206_cur
-    .local pmc match
-    .lex "$/", match
-    length rx206_eos, rx206_tgt
-    gt rx206_pos, rx206_eos, rx206_done
-    set rx206_off, 0
-    lt rx206_pos, 2, rx206_start
-    sub rx206_off, rx206_pos, 1
-    substr rx206_tgt, rx206_tgt, rx206_off
-  rx206_start:
-    eq $I10, 1, rx206_restart
-    if_null rx206_debug, debug_254
-    rx206_cur."!cursor_debug"("START", "metachar:sym<( )>")
-  debug_254:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan210_done
-    goto rxscan210_scan
-  rxscan210_loop:
-    ($P10) = rx206_cur."from"()
-    inc $P10
-    set rx206_pos, $P10
-    ge rx206_pos, rx206_eos, rxscan210_done
-  rxscan210_scan:
-    set_addr $I10, rxscan210_loop
-    rx206_cur."!mark_push"(0, rx206_pos, $I10)
-  rxscan210_done:
+.sub "metachar"  :subid("57_1284728471.30547") :method
 .annotate 'line', 85
-  # rx literal  "("
-    add $I11, rx206_pos, 1
-    gt $I11, rx206_eos, rx206_fail
-    sub $I11, rx206_pos, rx206_off
-    ord $I11, rx206_tgt, $I11
-    ne $I11, 40, rx206_fail
-    add rx206_pos, 1
-  # rx subrule "nibbler" subtype=capture negate=
-    rx206_cur."!cursor_pos"(rx206_pos)
-    $P10 = rx206_cur."nibbler"()
-    unless $P10, rx206_fail
-    rx206_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("nibbler")
-    rx206_pos = $P10."pos"()
-  # rx literal  ")"
-    add $I11, rx206_pos, 1
-    gt $I11, rx206_eos, rx206_fail
-    sub $I11, rx206_pos, rx206_off
-    ord $I11, rx206_tgt, $I11
-    ne $I11, 41, rx206_fail
-    add rx206_pos, 1
-  # rx pass
-    rx206_cur."!cursor_pass"(rx206_pos, "metachar:sym<( )>")
-    if_null rx206_debug, debug_255
-    rx206_cur."!cursor_debug"("PASS", "metachar:sym<( )>", " at pos=", rx206_pos)
-  debug_255:
-    .return (rx206_cur)
-  rx206_restart:
-.annotate 'line', 3
-    if_null rx206_debug, debug_256
-    rx206_cur."!cursor_debug"("NEXT", "metachar:sym<( )>")
-  debug_256:
-  rx206_fail:
-    (rx206_rep, rx206_pos, $I10, $P10) = rx206_cur."!mark_fail"(0)
-    lt rx206_pos, -1, rx206_done
-    eq rx206_pos, -1, rx206_fail
-    jump $I10
-  rx206_done:
-    rx206_cur."!cursor_fail"()
-    if_null rx206_debug, debug_257
-    rx206_cur."!cursor_debug"("FAIL", "metachar:sym<( )>")
-  debug_257:
-    .return (rx206_cur)
-    .return ()
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<( )>"  :subid("58_1282323996.47527") :method
-.annotate 'line', 3
-    $P208 = self."!PREFIX__!subrule"("nibbler", "(")
-    new $P209, "ResizablePMCArray"
-    push $P209, $P208
-    .return ($P209)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<'>"  :subid("59_1282323996.47527") :method :outer("11_1282323996.47527")
-.annotate 'line', 3
-    .local string rx212_tgt
-    .local int rx212_pos
-    .local int rx212_off
-    .local int rx212_eos
-    .local int rx212_rep
-    .local pmc rx212_cur
-    .local pmc rx212_debug
-    (rx212_cur, rx212_pos, rx212_tgt, $I10) = self."!cursor_start"()
-    getattribute rx212_debug, rx212_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx212_cur
-    .local pmc match
-    .lex "$/", match
-    length rx212_eos, rx212_tgt
-    gt rx212_pos, rx212_eos, rx212_done
-    set rx212_off, 0
-    lt rx212_pos, 2, rx212_start
-    sub rx212_off, rx212_pos, 1
-    substr rx212_tgt, rx212_tgt, rx212_off
-  rx212_start:
-    eq $I10, 1, rx212_restart
-    if_null rx212_debug, debug_258
-    rx212_cur."!cursor_debug"("START", "metachar:sym<'>")
-  debug_258:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan215_done
-    goto rxscan215_scan
-  rxscan215_loop:
-    ($P10) = rx212_cur."from"()
-    inc $P10
-    set rx212_pos, $P10
-    ge rx212_pos, rx212_eos, rxscan215_done
-  rxscan215_scan:
-    set_addr $I10, rxscan215_loop
-    rx212_cur."!mark_push"(0, rx212_pos, $I10)
-  rxscan215_done:
-.annotate 'line', 86
-  # rx enumcharlist negate=0 zerowidth
-    ge rx212_pos, rx212_eos, rx212_fail
-    sub $I10, rx212_pos, rx212_off
-    substr $S10, rx212_tgt, $I10, 1
-    index $I11, "'", $S10
-    lt $I11, 0, rx212_fail
-  # rx subrule "quote_EXPR" subtype=capture negate=
-    rx212_cur."!cursor_pos"(rx212_pos)
-    $P10 = rx212_cur."quote_EXPR"(":q")
-    unless $P10, rx212_fail
-    rx212_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote_EXPR")
-    rx212_pos = $P10."pos"()
-  # rx pass
-    rx212_cur."!cursor_pass"(rx212_pos, "metachar:sym<'>")
-    if_null rx212_debug, debug_259
-    rx212_cur."!cursor_debug"("PASS", "metachar:sym<'>", " at pos=", rx212_pos)
-  debug_259:
-    .return (rx212_cur)
-  rx212_restart:
-.annotate 'line', 3
-    if_null rx212_debug, debug_260
-    rx212_cur."!cursor_debug"("NEXT", "metachar:sym<'>")
-  debug_260:
-  rx212_fail:
-    (rx212_rep, rx212_pos, $I10, $P10) = rx212_cur."!mark_fail"(0)
-    lt rx212_pos, -1, rx212_done
-    eq rx212_pos, -1, rx212_fail
-    jump $I10
-  rx212_done:
-    rx212_cur."!cursor_fail"()
-    if_null rx212_debug, debug_261
-    rx212_cur."!cursor_debug"("FAIL", "metachar:sym<'>")
-  debug_261:
-    .return (rx212_cur)
-    .return ()
+    $P213 = self."!protoregex"("metachar")
+    .return ($P213)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<'>"  :subid("60_1282323996.47527") :method
-.annotate 'line', 3
-    new $P214, "ResizablePMCArray"
-    push $P214, "'"
-    .return ($P214)
+.sub "!PREFIX__metachar"  :subid("58_1284728471.30547") :method
+.annotate 'line', 85
+    $P215 = self."!PREFIX__!protoregex"("metachar")
+    .return ($P215)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<\">"  :subid("61_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "metachar:sym<ws>"  :subid("59_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
     .local string rx217_tgt
     .local int rx217_pos
@@ -2964,46 +2966,38 @@
     substr rx217_tgt, rx217_tgt, rx217_off
   rx217_start:
     eq $I10, 1, rx217_restart
-    if_null rx217_debug, debug_262
-    rx217_cur."!cursor_debug"("START", "metachar:sym<\">")
-  debug_262:
+    if_null rx217_debug, debug_273
+    rx217_cur."!cursor_debug"("START", "metachar:sym<ws>")
+  debug_273:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan220_done
-    goto rxscan220_scan
-  rxscan220_loop:
+    ne $I10, -1, rxscan221_done
+    goto rxscan221_scan
+  rxscan221_loop:
     ($P10) = rx217_cur."from"()
     inc $P10
     set rx217_pos, $P10
-    ge rx217_pos, rx217_eos, rxscan220_done
-  rxscan220_scan:
-    set_addr $I10, rxscan220_loop
+    ge rx217_pos, rx217_eos, rxscan221_done
+  rxscan221_scan:
+    set_addr $I10, rxscan221_loop
     rx217_cur."!mark_push"(0, rx217_pos, $I10)
-  rxscan220_done:
-.annotate 'line', 87
-  # rx enumcharlist negate=0 zerowidth
-    ge rx217_pos, rx217_eos, rx217_fail
-    sub $I10, rx217_pos, rx217_off
-    substr $S10, rx217_tgt, $I10, 1
-    index $I11, "\"", $S10
-    lt $I11, 0, rx217_fail
-  # rx subrule "quote_EXPR" subtype=capture negate=
+  rxscan221_done:
+.annotate 'line', 86
+  # rx subrule "normspace" subtype=method negate=
     rx217_cur."!cursor_pos"(rx217_pos)
-    $P10 = rx217_cur."quote_EXPR"(":qq")
+    $P10 = rx217_cur."normspace"()
     unless $P10, rx217_fail
-    rx217_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote_EXPR")
     rx217_pos = $P10."pos"()
   # rx pass
-    rx217_cur."!cursor_pass"(rx217_pos, "metachar:sym<\">")
-    if_null rx217_debug, debug_263
-    rx217_cur."!cursor_debug"("PASS", "metachar:sym<\">", " at pos=", rx217_pos)
-  debug_263:
+    rx217_cur."!cursor_pass"(rx217_pos, "metachar:sym<ws>")
+    if_null rx217_debug, debug_274
+    rx217_cur."!cursor_debug"("PASS", "metachar:sym<ws>", " at pos=", rx217_pos)
+  debug_274:
     .return (rx217_cur)
   rx217_restart:
 .annotate 'line', 3
-    if_null rx217_debug, debug_264
-    rx217_cur."!cursor_debug"("NEXT", "metachar:sym<\">")
-  debug_264:
+    if_null rx217_debug, debug_275
+    rx217_cur."!cursor_debug"("NEXT", "metachar:sym<ws>")
+  debug_275:
   rx217_fail:
     (rx217_rep, rx217_pos, $I10, $P10) = rx217_cur."!mark_fail"(0)
     lt rx217_pos, -1, rx217_done
@@ -3011,310 +3005,304 @@
     jump $I10
   rx217_done:
     rx217_cur."!cursor_fail"()
-    if_null rx217_debug, debug_265
-    rx217_cur."!cursor_debug"("FAIL", "metachar:sym<\">")
-  debug_265:
+    if_null rx217_debug, debug_276
+    rx217_cur."!cursor_debug"("FAIL", "metachar:sym<ws>")
+  debug_276:
     .return (rx217_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<\">"  :subid("62_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<ws>"  :subid("60_1284728471.30547") :method
 .annotate 'line', 3
-    new $P219, "ResizablePMCArray"
-    push $P219, "\""
-    .return ($P219)
+    $P219 = self."!PREFIX__!subrule"("normspace", "")
+    new $P220, "ResizablePMCArray"
+    push $P220, $P219
+    .return ($P220)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<.>"  :subid("63_1282323996.47527") :method :outer("11_1282323996.47527")
-.annotate 'line', 3
-    .local string rx222_tgt
-    .local int rx222_pos
-    .local int rx222_off
-    .local int rx222_eos
-    .local int rx222_rep
-    .local pmc rx222_cur
-    .local pmc rx222_debug
-    (rx222_cur, rx222_pos, rx222_tgt, $I10) = self."!cursor_start"()
-    getattribute rx222_debug, rx222_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx222_cur
-    .local pmc match
-    .lex "$/", match
-    length rx222_eos, rx222_tgt
-    gt rx222_pos, rx222_eos, rx222_done
-    set rx222_off, 0
-    lt rx222_pos, 2, rx222_start
-    sub rx222_off, rx222_pos, 1
-    substr rx222_tgt, rx222_tgt, rx222_off
-  rx222_start:
-    eq $I10, 1, rx222_restart
-    if_null rx222_debug, debug_266
-    rx222_cur."!cursor_debug"("START", "metachar:sym<.>")
-  debug_266:
+.sub "metachar:sym<[ ]>"  :subid("61_1284728471.30547") :method :outer("11_1284728471.30547")
+.annotate 'line', 3
+    .local string rx223_tgt
+    .local int rx223_pos
+    .local int rx223_off
+    .local int rx223_eos
+    .local int rx223_rep
+    .local pmc rx223_cur
+    .local pmc rx223_debug
+    (rx223_cur, rx223_pos, rx223_tgt, $I10) = self."!cursor_start"()
+    getattribute rx223_debug, rx223_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx223_cur
+    .local pmc match
+    .lex "$/", match
+    length rx223_eos, rx223_tgt
+    gt rx223_pos, rx223_eos, rx223_done
+    set rx223_off, 0
+    lt rx223_pos, 2, rx223_start
+    sub rx223_off, rx223_pos, 1
+    substr rx223_tgt, rx223_tgt, rx223_off
+  rx223_start:
+    eq $I10, 1, rx223_restart
+    if_null rx223_debug, debug_277
+    rx223_cur."!cursor_debug"("START", "metachar:sym<[ ]>")
+  debug_277:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan225_done
-    goto rxscan225_scan
-  rxscan225_loop:
-    ($P10) = rx222_cur."from"()
-    inc $P10
-    set rx222_pos, $P10
-    ge rx222_pos, rx222_eos, rxscan225_done
-  rxscan225_scan:
-    set_addr $I10, rxscan225_loop
-    rx222_cur."!mark_push"(0, rx222_pos, $I10)
-  rxscan225_done:
-.annotate 'line', 88
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_226_fail
-    rx222_cur."!mark_push"(0, rx222_pos, $I10)
-  # rx literal  "."
-    add $I11, rx222_pos, 1
-    gt $I11, rx222_eos, rx222_fail
-    sub $I11, rx222_pos, rx222_off
-    ord $I11, rx222_tgt, $I11
-    ne $I11, 46, rx222_fail
-    add rx222_pos, 1
-    set_addr $I10, rxcap_226_fail
-    ($I12, $I11) = rx222_cur."!mark_peek"($I10)
-    rx222_cur."!cursor_pos"($I11)
-    ($P10) = rx222_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx222_pos, "")
-    rx222_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_226_done
-  rxcap_226_fail:
-    goto rx222_fail
-  rxcap_226_done:
-  # rx pass
-    rx222_cur."!cursor_pass"(rx222_pos, "metachar:sym<.>")
-    if_null rx222_debug, debug_267
-    rx222_cur."!cursor_debug"("PASS", "metachar:sym<.>", " at pos=", rx222_pos)
-  debug_267:
-    .return (rx222_cur)
-  rx222_restart:
+    ne $I10, -1, rxscan227_done
+    goto rxscan227_scan
+  rxscan227_loop:
+    ($P10) = rx223_cur."from"()
+    inc $P10
+    set rx223_pos, $P10
+    ge rx223_pos, rx223_eos, rxscan227_done
+  rxscan227_scan:
+    set_addr $I10, rxscan227_loop
+    rx223_cur."!mark_push"(0, rx223_pos, $I10)
+  rxscan227_done:
+.annotate 'line', 87
+  # rx literal  "["
+    add $I11, rx223_pos, 1
+    gt $I11, rx223_eos, rx223_fail
+    sub $I11, rx223_pos, rx223_off
+    ord $I11, rx223_tgt, $I11
+    ne $I11, 91, rx223_fail
+    add rx223_pos, 1
+  # rx subrule "nibbler" subtype=capture negate=
+    rx223_cur."!cursor_pos"(rx223_pos)
+    $P10 = rx223_cur."nibbler"()
+    unless $P10, rx223_fail
+    rx223_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("nibbler")
+    rx223_pos = $P10."pos"()
+  # rx literal  "]"
+    add $I11, rx223_pos, 1
+    gt $I11, rx223_eos, rx223_fail
+    sub $I11, rx223_pos, rx223_off
+    ord $I11, rx223_tgt, $I11
+    ne $I11, 93, rx223_fail
+    add rx223_pos, 1
+  # rx pass
+    rx223_cur."!cursor_pass"(rx223_pos, "metachar:sym<[ ]>")
+    if_null rx223_debug, debug_278
+    rx223_cur."!cursor_debug"("PASS", "metachar:sym<[ ]>", " at pos=", rx223_pos)
+  debug_278:
+    .return (rx223_cur)
+  rx223_restart:
 .annotate 'line', 3
-    if_null rx222_debug, debug_268
-    rx222_cur."!cursor_debug"("NEXT", "metachar:sym<.>")
-  debug_268:
-  rx222_fail:
-    (rx222_rep, rx222_pos, $I10, $P10) = rx222_cur."!mark_fail"(0)
-    lt rx222_pos, -1, rx222_done
-    eq rx222_pos, -1, rx222_fail
-    jump $I10
-  rx222_done:
-    rx222_cur."!cursor_fail"()
-    if_null rx222_debug, debug_269
-    rx222_cur."!cursor_debug"("FAIL", "metachar:sym<.>")
-  debug_269:
-    .return (rx222_cur)
+    if_null rx223_debug, debug_279
+    rx223_cur."!cursor_debug"("NEXT", "metachar:sym<[ ]>")
+  debug_279:
+  rx223_fail:
+    (rx223_rep, rx223_pos, $I10, $P10) = rx223_cur."!mark_fail"(0)
+    lt rx223_pos, -1, rx223_done
+    eq rx223_pos, -1, rx223_fail
+    jump $I10
+  rx223_done:
+    rx223_cur."!cursor_fail"()
+    if_null rx223_debug, debug_280
+    rx223_cur."!cursor_debug"("FAIL", "metachar:sym<[ ]>")
+  debug_280:
+    .return (rx223_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<.>"  :subid("64_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<[ ]>"  :subid("62_1284728471.30547") :method
 .annotate 'line', 3
-    new $P224, "ResizablePMCArray"
-    push $P224, "."
-    .return ($P224)
+    $P225 = self."!PREFIX__!subrule"("nibbler", "[")
+    new $P226, "ResizablePMCArray"
+    push $P226, $P225
+    .return ($P226)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<^>"  :subid("65_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "metachar:sym<( )>"  :subid("63_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx228_tgt
-    .local int rx228_pos
-    .local int rx228_off
-    .local int rx228_eos
-    .local int rx228_rep
-    .local pmc rx228_cur
-    .local pmc rx228_debug
-    (rx228_cur, rx228_pos, rx228_tgt, $I10) = self."!cursor_start"()
-    getattribute rx228_debug, rx228_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx228_cur
+    .local string rx229_tgt
+    .local int rx229_pos
+    .local int rx229_off
+    .local int rx229_eos
+    .local int rx229_rep
+    .local pmc rx229_cur
+    .local pmc rx229_debug
+    (rx229_cur, rx229_pos, rx229_tgt, $I10) = self."!cursor_start"()
+    getattribute rx229_debug, rx229_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx229_cur
     .local pmc match
     .lex "$/", match
-    length rx228_eos, rx228_tgt
-    gt rx228_pos, rx228_eos, rx228_done
-    set rx228_off, 0
-    lt rx228_pos, 2, rx228_start
-    sub rx228_off, rx228_pos, 1
-    substr rx228_tgt, rx228_tgt, rx228_off
-  rx228_start:
-    eq $I10, 1, rx228_restart
-    if_null rx228_debug, debug_270
-    rx228_cur."!cursor_debug"("START", "metachar:sym<^>")
-  debug_270:
+    length rx229_eos, rx229_tgt
+    gt rx229_pos, rx229_eos, rx229_done
+    set rx229_off, 0
+    lt rx229_pos, 2, rx229_start
+    sub rx229_off, rx229_pos, 1
+    substr rx229_tgt, rx229_tgt, rx229_off
+  rx229_start:
+    eq $I10, 1, rx229_restart
+    if_null rx229_debug, debug_281
+    rx229_cur."!cursor_debug"("START", "metachar:sym<( )>")
+  debug_281:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan231_done
-    goto rxscan231_scan
-  rxscan231_loop:
-    ($P10) = rx228_cur."from"()
-    inc $P10
-    set rx228_pos, $P10
-    ge rx228_pos, rx228_eos, rxscan231_done
-  rxscan231_scan:
-    set_addr $I10, rxscan231_loop
-    rx228_cur."!mark_push"(0, rx228_pos, $I10)
-  rxscan231_done:
-.annotate 'line', 89
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_232_fail
-    rx228_cur."!mark_push"(0, rx228_pos, $I10)
-  # rx literal  "^"
-    add $I11, rx228_pos, 1
-    gt $I11, rx228_eos, rx228_fail
-    sub $I11, rx228_pos, rx228_off
-    ord $I11, rx228_tgt, $I11
-    ne $I11, 94, rx228_fail
-    add rx228_pos, 1
-    set_addr $I10, rxcap_232_fail
-    ($I12, $I11) = rx228_cur."!mark_peek"($I10)
-    rx228_cur."!cursor_pos"($I11)
-    ($P10) = rx228_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx228_pos, "")
-    rx228_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_232_done
-  rxcap_232_fail:
-    goto rx228_fail
-  rxcap_232_done:
-  # rx pass
-    rx228_cur."!cursor_pass"(rx228_pos, "metachar:sym<^>")
-    if_null rx228_debug, debug_271
-    rx228_cur."!cursor_debug"("PASS", "metachar:sym<^>", " at pos=", rx228_pos)
-  debug_271:
-    .return (rx228_cur)
-  rx228_restart:
+    ne $I10, -1, rxscan233_done
+    goto rxscan233_scan
+  rxscan233_loop:
+    ($P10) = rx229_cur."from"()
+    inc $P10
+    set rx229_pos, $P10
+    ge rx229_pos, rx229_eos, rxscan233_done
+  rxscan233_scan:
+    set_addr $I10, rxscan233_loop
+    rx229_cur."!mark_push"(0, rx229_pos, $I10)
+  rxscan233_done:
+.annotate 'line', 88
+  # rx literal  "("
+    add $I11, rx229_pos, 1
+    gt $I11, rx229_eos, rx229_fail
+    sub $I11, rx229_pos, rx229_off
+    ord $I11, rx229_tgt, $I11
+    ne $I11, 40, rx229_fail
+    add rx229_pos, 1
+  # rx subrule "nibbler" subtype=capture negate=
+    rx229_cur."!cursor_pos"(rx229_pos)
+    $P10 = rx229_cur."nibbler"()
+    unless $P10, rx229_fail
+    rx229_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("nibbler")
+    rx229_pos = $P10."pos"()
+  # rx literal  ")"
+    add $I11, rx229_pos, 1
+    gt $I11, rx229_eos, rx229_fail
+    sub $I11, rx229_pos, rx229_off
+    ord $I11, rx229_tgt, $I11
+    ne $I11, 41, rx229_fail
+    add rx229_pos, 1
+  # rx pass
+    rx229_cur."!cursor_pass"(rx229_pos, "metachar:sym<( )>")
+    if_null rx229_debug, debug_282
+    rx229_cur."!cursor_debug"("PASS", "metachar:sym<( )>", " at pos=", rx229_pos)
+  debug_282:
+    .return (rx229_cur)
+  rx229_restart:
 .annotate 'line', 3
-    if_null rx228_debug, debug_272
-    rx228_cur."!cursor_debug"("NEXT", "metachar:sym<^>")
-  debug_272:
-  rx228_fail:
-    (rx228_rep, rx228_pos, $I10, $P10) = rx228_cur."!mark_fail"(0)
-    lt rx228_pos, -1, rx228_done
-    eq rx228_pos, -1, rx228_fail
-    jump $I10
-  rx228_done:
-    rx228_cur."!cursor_fail"()
-    if_null rx228_debug, debug_273
-    rx228_cur."!cursor_debug"("FAIL", "metachar:sym<^>")
-  debug_273:
-    .return (rx228_cur)
+    if_null rx229_debug, debug_283
+    rx229_cur."!cursor_debug"("NEXT", "metachar:sym<( )>")
+  debug_283:
+  rx229_fail:
+    (rx229_rep, rx229_pos, $I10, $P10) = rx229_cur."!mark_fail"(0)
+    lt rx229_pos, -1, rx229_done
+    eq rx229_pos, -1, rx229_fail
+    jump $I10
+  rx229_done:
+    rx229_cur."!cursor_fail"()
+    if_null rx229_debug, debug_284
+    rx229_cur."!cursor_debug"("FAIL", "metachar:sym<( )>")
+  debug_284:
+    .return (rx229_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<^>"  :subid("66_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<( )>"  :subid("64_1284728471.30547") :method
 .annotate 'line', 3
-    new $P230, "ResizablePMCArray"
-    push $P230, "^"
-    .return ($P230)
+    $P231 = self."!PREFIX__!subrule"("nibbler", "(")
+    new $P232, "ResizablePMCArray"
+    push $P232, $P231
+    .return ($P232)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<^^>"  :subid("67_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "metachar:sym<'>"  :subid("65_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx234_tgt
-    .local int rx234_pos
-    .local int rx234_off
-    .local int rx234_eos
-    .local int rx234_rep
-    .local pmc rx234_cur
-    .local pmc rx234_debug
-    (rx234_cur, rx234_pos, rx234_tgt, $I10) = self."!cursor_start"()
-    getattribute rx234_debug, rx234_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx234_cur
+    .local string rx235_tgt
+    .local int rx235_pos
+    .local int rx235_off
+    .local int rx235_eos
+    .local int rx235_rep
+    .local pmc rx235_cur
+    .local pmc rx235_debug
+    (rx235_cur, rx235_pos, rx235_tgt, $I10) = self."!cursor_start"()
+    getattribute rx235_debug, rx235_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx235_cur
     .local pmc match
     .lex "$/", match
-    length rx234_eos, rx234_tgt
-    gt rx234_pos, rx234_eos, rx234_done
-    set rx234_off, 0
-    lt rx234_pos, 2, rx234_start
-    sub rx234_off, rx234_pos, 1
-    substr rx234_tgt, rx234_tgt, rx234_off
-  rx234_start:
-    eq $I10, 1, rx234_restart
-    if_null rx234_debug, debug_274
-    rx234_cur."!cursor_debug"("START", "metachar:sym<^^>")
-  debug_274:
+    length rx235_eos, rx235_tgt
+    gt rx235_pos, rx235_eos, rx235_done
+    set rx235_off, 0
+    lt rx235_pos, 2, rx235_start
+    sub rx235_off, rx235_pos, 1
+    substr rx235_tgt, rx235_tgt, rx235_off
+  rx235_start:
+    eq $I10, 1, rx235_restart
+    if_null rx235_debug, debug_285
+    rx235_cur."!cursor_debug"("START", "metachar:sym<'>")
+  debug_285:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan237_done
-    goto rxscan237_scan
-  rxscan237_loop:
-    ($P10) = rx234_cur."from"()
-    inc $P10
-    set rx234_pos, $P10
-    ge rx234_pos, rx234_eos, rxscan237_done
-  rxscan237_scan:
-    set_addr $I10, rxscan237_loop
-    rx234_cur."!mark_push"(0, rx234_pos, $I10)
-  rxscan237_done:
-.annotate 'line', 90
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_238_fail
-    rx234_cur."!mark_push"(0, rx234_pos, $I10)
-  # rx literal  "^^"
-    add $I11, rx234_pos, 2
-    gt $I11, rx234_eos, rx234_fail
-    sub $I11, rx234_pos, rx234_off
-    substr $S10, rx234_tgt, $I11, 2
-    ne $S10, "^^", rx234_fail
-    add rx234_pos, 2
-    set_addr $I10, rxcap_238_fail
-    ($I12, $I11) = rx234_cur."!mark_peek"($I10)
-    rx234_cur."!cursor_pos"($I11)
-    ($P10) = rx234_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx234_pos, "")
-    rx234_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_238_done
-  rxcap_238_fail:
-    goto rx234_fail
-  rxcap_238_done:
-  # rx pass
-    rx234_cur."!cursor_pass"(rx234_pos, "metachar:sym<^^>")
-    if_null rx234_debug, debug_275
-    rx234_cur."!cursor_debug"("PASS", "metachar:sym<^^>", " at pos=", rx234_pos)
-  debug_275:
-    .return (rx234_cur)
-  rx234_restart:
+    ne $I10, -1, rxscan238_done
+    goto rxscan238_scan
+  rxscan238_loop:
+    ($P10) = rx235_cur."from"()
+    inc $P10
+    set rx235_pos, $P10
+    ge rx235_pos, rx235_eos, rxscan238_done
+  rxscan238_scan:
+    set_addr $I10, rxscan238_loop
+    rx235_cur."!mark_push"(0, rx235_pos, $I10)
+  rxscan238_done:
+.annotate 'line', 89
+  # rx enumcharlist negate=0 zerowidth
+    sub $I10, rx235_pos, rx235_off
+    substr $S10, rx235_tgt, $I10, 1
+    index $I11, "'", $S10
+    lt $I11, 0, rx235_fail
+  # rx subrule "quote_EXPR" subtype=capture negate=
+    rx235_cur."!cursor_pos"(rx235_pos)
+    $P10 = rx235_cur."quote_EXPR"(":q")
+    unless $P10, rx235_fail
+    rx235_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quote_EXPR")
+    rx235_pos = $P10."pos"()
+  # rx pass
+    rx235_cur."!cursor_pass"(rx235_pos, "metachar:sym<'>")
+    if_null rx235_debug, debug_286
+    rx235_cur."!cursor_debug"("PASS", "metachar:sym<'>", " at pos=", rx235_pos)
+  debug_286:
+    .return (rx235_cur)
+  rx235_restart:
 .annotate 'line', 3
-    if_null rx234_debug, debug_276
-    rx234_cur."!cursor_debug"("NEXT", "metachar:sym<^^>")
-  debug_276:
-  rx234_fail:
-    (rx234_rep, rx234_pos, $I10, $P10) = rx234_cur."!mark_fail"(0)
-    lt rx234_pos, -1, rx234_done
-    eq rx234_pos, -1, rx234_fail
-    jump $I10
-  rx234_done:
-    rx234_cur."!cursor_fail"()
-    if_null rx234_debug, debug_277
-    rx234_cur."!cursor_debug"("FAIL", "metachar:sym<^^>")
-  debug_277:
-    .return (rx234_cur)
+    if_null rx235_debug, debug_287
+    rx235_cur."!cursor_debug"("NEXT", "metachar:sym<'>")
+  debug_287:
+  rx235_fail:
+    (rx235_rep, rx235_pos, $I10, $P10) = rx235_cur."!mark_fail"(0)
+    lt rx235_pos, -1, rx235_done
+    eq rx235_pos, -1, rx235_fail
+    jump $I10
+  rx235_done:
+    rx235_cur."!cursor_fail"()
+    if_null rx235_debug, debug_288
+    rx235_cur."!cursor_debug"("FAIL", "metachar:sym<'>")
+  debug_288:
+    .return (rx235_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<^^>"  :subid("68_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<'>"  :subid("66_1284728471.30547") :method
 .annotate 'line', 3
-    new $P236, "ResizablePMCArray"
-    push $P236, "^^"
-    .return ($P236)
+    new $P237, "ResizablePMCArray"
+    push $P237, "'"
+    .return ($P237)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<$>"  :subid("69_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "metachar:sym<\">"  :subid("67_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
     .local string rx240_tgt
     .local int rx240_pos
@@ -3336,9 +3324,9 @@
     substr rx240_tgt, rx240_tgt, rx240_off
   rx240_start:
     eq $I10, 1, rx240_restart
-    if_null rx240_debug, debug_278
-    rx240_cur."!cursor_debug"("START", "metachar:sym<$>")
-  debug_278:
+    if_null rx240_debug, debug_289
+    rx240_cur."!cursor_debug"("START", "metachar:sym<\">")
+  debug_289:
     $I10 = self.'from'()
     ne $I10, -1, rxscan243_done
     goto rxscan243_scan
@@ -3351,39 +3339,30 @@
     set_addr $I10, rxscan243_loop
     rx240_cur."!mark_push"(0, rx240_pos, $I10)
   rxscan243_done:
-.annotate 'line', 91
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_244_fail
-    rx240_cur."!mark_push"(0, rx240_pos, $I10)
-  # rx literal  "$"
-    add $I11, rx240_pos, 1
-    gt $I11, rx240_eos, rx240_fail
-    sub $I11, rx240_pos, rx240_off
-    ord $I11, rx240_tgt, $I11
-    ne $I11, 36, rx240_fail
-    add rx240_pos, 1
-    set_addr $I10, rxcap_244_fail
-    ($I12, $I11) = rx240_cur."!mark_peek"($I10)
-    rx240_cur."!cursor_pos"($I11)
-    ($P10) = rx240_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx240_pos, "")
+.annotate 'line', 90
+  # rx enumcharlist negate=0 zerowidth
+    sub $I10, rx240_pos, rx240_off
+    substr $S10, rx240_tgt, $I10, 1
+    index $I11, "\"", $S10
+    lt $I11, 0, rx240_fail
+  # rx subrule "quote_EXPR" subtype=capture negate=
+    rx240_cur."!cursor_pos"(rx240_pos)
+    $P10 = rx240_cur."quote_EXPR"(":qq")
+    unless $P10, rx240_fail
     rx240_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_244_done
-  rxcap_244_fail:
-    goto rx240_fail
-  rxcap_244_done:
-  # rx pass
-    rx240_cur."!cursor_pass"(rx240_pos, "metachar:sym<$>")
-    if_null rx240_debug, debug_279
-    rx240_cur."!cursor_debug"("PASS", "metachar:sym<$>", " at pos=", rx240_pos)
-  debug_279:
+    $P10."!cursor_names"("quote_EXPR")
+    rx240_pos = $P10."pos"()
+  # rx pass
+    rx240_cur."!cursor_pass"(rx240_pos, "metachar:sym<\">")
+    if_null rx240_debug, debug_290
+    rx240_cur."!cursor_debug"("PASS", "metachar:sym<\">", " at pos=", rx240_pos)
+  debug_290:
     .return (rx240_cur)
   rx240_restart:
 .annotate 'line', 3
-    if_null rx240_debug, debug_280
-    rx240_cur."!cursor_debug"("NEXT", "metachar:sym<$>")
-  debug_280:
+    if_null rx240_debug, debug_291
+    rx240_cur."!cursor_debug"("NEXT", "metachar:sym<\">")
+  debug_291:
   rx240_fail:
     (rx240_rep, rx240_pos, $I10, $P10) = rx240_cur."!mark_fail"(0)
     lt rx240_pos, -1, rx240_done
@@ -3391,1325 +3370,1302 @@
     jump $I10
   rx240_done:
     rx240_cur."!cursor_fail"()
-    if_null rx240_debug, debug_281
-    rx240_cur."!cursor_debug"("FAIL", "metachar:sym<$>")
-  debug_281:
+    if_null rx240_debug, debug_292
+    rx240_cur."!cursor_debug"("FAIL", "metachar:sym<\">")
+  debug_292:
     .return (rx240_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<$>"  :subid("70_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<\">"  :subid("68_1284728471.30547") :method
 .annotate 'line', 3
     new $P242, "ResizablePMCArray"
-    push $P242, "$"
+    push $P242, "\""
     .return ($P242)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<$$>"  :subid("71_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "metachar:sym<.>"  :subid("69_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx246_tgt
-    .local int rx246_pos
-    .local int rx246_off
-    .local int rx246_eos
-    .local int rx246_rep
-    .local pmc rx246_cur
-    .local pmc rx246_debug
-    (rx246_cur, rx246_pos, rx246_tgt, $I10) = self."!cursor_start"()
-    getattribute rx246_debug, rx246_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx246_cur
-    .local pmc match
-    .lex "$/", match
-    length rx246_eos, rx246_tgt
-    gt rx246_pos, rx246_eos, rx246_done
-    set rx246_off, 0
-    lt rx246_pos, 2, rx246_start
-    sub rx246_off, rx246_pos, 1
-    substr rx246_tgt, rx246_tgt, rx246_off
-  rx246_start:
-    eq $I10, 1, rx246_restart
-    if_null rx246_debug, debug_282
-    rx246_cur."!cursor_debug"("START", "metachar:sym<$$>")
-  debug_282:
+    .local string rx245_tgt
+    .local int rx245_pos
+    .local int rx245_off
+    .local int rx245_eos
+    .local int rx245_rep
+    .local pmc rx245_cur
+    .local pmc rx245_debug
+    (rx245_cur, rx245_pos, rx245_tgt, $I10) = self."!cursor_start"()
+    getattribute rx245_debug, rx245_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx245_cur
+    .local pmc match
+    .lex "$/", match
+    length rx245_eos, rx245_tgt
+    gt rx245_pos, rx245_eos, rx245_done
+    set rx245_off, 0
+    lt rx245_pos, 2, rx245_start
+    sub rx245_off, rx245_pos, 1
+    substr rx245_tgt, rx245_tgt, rx245_off
+  rx245_start:
+    eq $I10, 1, rx245_restart
+    if_null rx245_debug, debug_293
+    rx245_cur."!cursor_debug"("START", "metachar:sym<.>")
+  debug_293:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan249_done
-    goto rxscan249_scan
-  rxscan249_loop:
-    ($P10) = rx246_cur."from"()
-    inc $P10
-    set rx246_pos, $P10
-    ge rx246_pos, rx246_eos, rxscan249_done
-  rxscan249_scan:
-    set_addr $I10, rxscan249_loop
-    rx246_cur."!mark_push"(0, rx246_pos, $I10)
-  rxscan249_done:
+    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', 91
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_249_fail
+    rx245_cur."!mark_push"(0, rx245_pos, $I10)
+  # rx literal  "."
+    add $I11, rx245_pos, 1
+    gt $I11, rx245_eos, rx245_fail
+    sub $I11, rx245_pos, rx245_off
+    ord $I11, rx245_tgt, $I11
+    ne $I11, 46, rx245_fail
+    add rx245_pos, 1
+    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)
+    $P10."!cursor_names"("sym")
+    goto rxcap_249_done
+  rxcap_249_fail:
+    goto rx245_fail
+  rxcap_249_done:
+  # rx pass
+    rx245_cur."!cursor_pass"(rx245_pos, "metachar:sym<.>")
+    if_null rx245_debug, debug_294
+    rx245_cur."!cursor_debug"("PASS", "metachar:sym<.>", " at pos=", rx245_pos)
+  debug_294:
+    .return (rx245_cur)
+  rx245_restart:
+.annotate 'line', 3
+    if_null rx245_debug, debug_295
+    rx245_cur."!cursor_debug"("NEXT", "metachar:sym<.>")
+  debug_295:
+  rx245_fail:
+    (rx245_rep, rx245_pos, $I10, $P10) = rx245_cur."!mark_fail"(0)
+    lt rx245_pos, -1, rx245_done
+    eq rx245_pos, -1, rx245_fail
+    jump $I10
+  rx245_done:
+    rx245_cur."!cursor_fail"()
+    if_null rx245_debug, debug_296
+    rx245_cur."!cursor_debug"("FAIL", "metachar:sym<.>")
+  debug_296:
+    .return (rx245_cur)
+    .return ()
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "!PREFIX__metachar:sym<.>"  :subid("70_1284728471.30547") :method
+.annotate 'line', 3
+    new $P247, "ResizablePMCArray"
+    push $P247, "."
+    .return ($P247)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<^>"  :subid("71_1284728471.30547") :method :outer("11_1284728471.30547")
+.annotate 'line', 3
+    .local string rx251_tgt
+    .local int rx251_pos
+    .local int rx251_off
+    .local int rx251_eos
+    .local int rx251_rep
+    .local pmc rx251_cur
+    .local pmc rx251_debug
+    (rx251_cur, rx251_pos, rx251_tgt, $I10) = self."!cursor_start"()
+    getattribute rx251_debug, rx251_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx251_cur
+    .local pmc match
+    .lex "$/", match
+    length rx251_eos, rx251_tgt
+    gt rx251_pos, rx251_eos, rx251_done
+    set rx251_off, 0
+    lt rx251_pos, 2, rx251_start
+    sub rx251_off, rx251_pos, 1
+    substr rx251_tgt, rx251_tgt, rx251_off
+  rx251_start:
+    eq $I10, 1, rx251_restart
+    if_null rx251_debug, debug_297
+    rx251_cur."!cursor_debug"("START", "metachar:sym<^>")
+  debug_297:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan254_done
+    goto rxscan254_scan
+  rxscan254_loop:
+    ($P10) = rx251_cur."from"()
+    inc $P10
+    set rx251_pos, $P10
+    ge rx251_pos, rx251_eos, rxscan254_done
+  rxscan254_scan:
+    set_addr $I10, rxscan254_loop
+    rx251_cur."!mark_push"(0, rx251_pos, $I10)
+  rxscan254_done:
 .annotate 'line', 92
   # rx subcapture "sym"
-    set_addr $I10, rxcap_250_fail
-    rx246_cur."!mark_push"(0, rx246_pos, $I10)
-  # rx literal  "$$"
-    add $I11, rx246_pos, 2
-    gt $I11, rx246_eos, rx246_fail
-    sub $I11, rx246_pos, rx246_off
-    substr $S10, rx246_tgt, $I11, 2
-    ne $S10, "$$", rx246_fail
-    add rx246_pos, 2
-    set_addr $I10, rxcap_250_fail
-    ($I12, $I11) = rx246_cur."!mark_peek"($I10)
-    rx246_cur."!cursor_pos"($I11)
-    ($P10) = rx246_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx246_pos, "")
-    rx246_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_255_fail
+    rx251_cur."!mark_push"(0, rx251_pos, $I10)
+  # rx literal  "^"
+    add $I11, rx251_pos, 1
+    gt $I11, rx251_eos, rx251_fail
+    sub $I11, rx251_pos, rx251_off
+    ord $I11, rx251_tgt, $I11
+    ne $I11, 94, rx251_fail
+    add rx251_pos, 1
+    set_addr $I10, rxcap_255_fail
+    ($I12, $I11) = rx251_cur."!mark_peek"($I10)
+    rx251_cur."!cursor_pos"($I11)
+    ($P10) = rx251_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx251_pos, "")
+    rx251_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_250_done
-  rxcap_250_fail:
-    goto rx246_fail
-  rxcap_250_done:
-  # rx pass
-    rx246_cur."!cursor_pass"(rx246_pos, "metachar:sym<$$>")
-    if_null rx246_debug, debug_283
-    rx246_cur."!cursor_debug"("PASS", "metachar:sym<$$>", " at pos=", rx246_pos)
-  debug_283:
-    .return (rx246_cur)
-  rx246_restart:
+    goto rxcap_255_done
+  rxcap_255_fail:
+    goto rx251_fail
+  rxcap_255_done:
+  # rx pass
+    rx251_cur."!cursor_pass"(rx251_pos, "metachar:sym<^>")
+    if_null rx251_debug, debug_298
+    rx251_cur."!cursor_debug"("PASS", "metachar:sym<^>", " at pos=", rx251_pos)
+  debug_298:
+    .return (rx251_cur)
+  rx251_restart:
 .annotate 'line', 3
-    if_null rx246_debug, debug_284
-    rx246_cur."!cursor_debug"("NEXT", "metachar:sym<$$>")
-  debug_284:
-  rx246_fail:
-    (rx246_rep, rx246_pos, $I10, $P10) = rx246_cur."!mark_fail"(0)
-    lt rx246_pos, -1, rx246_done
-    eq rx246_pos, -1, rx246_fail
-    jump $I10
-  rx246_done:
-    rx246_cur."!cursor_fail"()
-    if_null rx246_debug, debug_285
-    rx246_cur."!cursor_debug"("FAIL", "metachar:sym<$$>")
-  debug_285:
-    .return (rx246_cur)
+    if_null rx251_debug, debug_299
+    rx251_cur."!cursor_debug"("NEXT", "metachar:sym<^>")
+  debug_299:
+  rx251_fail:
+    (rx251_rep, rx251_pos, $I10, $P10) = rx251_cur."!mark_fail"(0)
+    lt rx251_pos, -1, rx251_done
+    eq rx251_pos, -1, rx251_fail
+    jump $I10
+  rx251_done:
+    rx251_cur."!cursor_fail"()
+    if_null rx251_debug, debug_300
+    rx251_cur."!cursor_debug"("FAIL", "metachar:sym<^>")
+  debug_300:
+    .return (rx251_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<$$>"  :subid("72_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<^>"  :subid("72_1284728471.30547") :method
 .annotate 'line', 3
-    new $P248, "ResizablePMCArray"
-    push $P248, "$$"
-    .return ($P248)
+    new $P253, "ResizablePMCArray"
+    push $P253, "^"
+    .return ($P253)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<:::>"  :subid("73_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "metachar:sym<^^>"  :subid("73_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx252_tgt
-    .local int rx252_pos
-    .local int rx252_off
-    .local int rx252_eos
-    .local int rx252_rep
-    .local pmc rx252_cur
-    .local pmc rx252_debug
-    (rx252_cur, rx252_pos, rx252_tgt, $I10) = self."!cursor_start"()
-    getattribute rx252_debug, rx252_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx252_cur
-    .local pmc match
-    .lex "$/", match
-    length rx252_eos, rx252_tgt
-    gt rx252_pos, rx252_eos, rx252_done
-    set rx252_off, 0
-    lt rx252_pos, 2, rx252_start
-    sub rx252_off, rx252_pos, 1
-    substr rx252_tgt, rx252_tgt, rx252_off
-  rx252_start:
-    eq $I10, 1, rx252_restart
-    if_null rx252_debug, debug_286
-    rx252_cur."!cursor_debug"("START", "metachar:sym<:::>")
-  debug_286:
+    .local string rx257_tgt
+    .local int rx257_pos
+    .local int rx257_off
+    .local int rx257_eos
+    .local int rx257_rep
+    .local pmc rx257_cur
+    .local pmc rx257_debug
+    (rx257_cur, rx257_pos, rx257_tgt, $I10) = self."!cursor_start"()
+    getattribute rx257_debug, rx257_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx257_cur
+    .local pmc match
+    .lex "$/", match
+    length rx257_eos, rx257_tgt
+    gt rx257_pos, rx257_eos, rx257_done
+    set rx257_off, 0
+    lt rx257_pos, 2, rx257_start
+    sub rx257_off, rx257_pos, 1
+    substr rx257_tgt, rx257_tgt, rx257_off
+  rx257_start:
+    eq $I10, 1, rx257_restart
+    if_null rx257_debug, debug_301
+    rx257_cur."!cursor_debug"("START", "metachar:sym<^^>")
+  debug_301:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan256_done
-    goto rxscan256_scan
-  rxscan256_loop:
-    ($P10) = rx252_cur."from"()
-    inc $P10
-    set rx252_pos, $P10
-    ge rx252_pos, rx252_eos, rxscan256_done
-  rxscan256_scan:
-    set_addr $I10, rxscan256_loop
-    rx252_cur."!mark_push"(0, rx252_pos, $I10)
-  rxscan256_done:
+    ne $I10, -1, rxscan260_done
+    goto rxscan260_scan
+  rxscan260_loop:
+    ($P10) = rx257_cur."from"()
+    inc $P10
+    set rx257_pos, $P10
+    ge rx257_pos, rx257_eos, rxscan260_done
+  rxscan260_scan:
+    set_addr $I10, rxscan260_loop
+    rx257_cur."!mark_push"(0, rx257_pos, $I10)
+  rxscan260_done:
 .annotate 'line', 93
   # rx subcapture "sym"
-    set_addr $I10, rxcap_257_fail
-    rx252_cur."!mark_push"(0, rx252_pos, $I10)
-  # rx literal  ":::"
-    add $I11, rx252_pos, 3
-    gt $I11, rx252_eos, rx252_fail
-    sub $I11, rx252_pos, rx252_off
-    substr $S10, rx252_tgt, $I11, 3
-    ne $S10, ":::", rx252_fail
-    add rx252_pos, 3
-    set_addr $I10, rxcap_257_fail
-    ($I12, $I11) = rx252_cur."!mark_peek"($I10)
-    rx252_cur."!cursor_pos"($I11)
-    ($P10) = rx252_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx252_pos, "")
-    rx252_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_261_fail
+    rx257_cur."!mark_push"(0, rx257_pos, $I10)
+  # rx literal  "^^"
+    add $I11, rx257_pos, 2
+    gt $I11, rx257_eos, rx257_fail
+    sub $I11, rx257_pos, rx257_off
+    substr $S10, rx257_tgt, $I11, 2
+    ne $S10, "^^", rx257_fail
+    add rx257_pos, 2
+    set_addr $I10, rxcap_261_fail
+    ($I12, $I11) = rx257_cur."!mark_peek"($I10)
+    rx257_cur."!cursor_pos"($I11)
+    ($P10) = rx257_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx257_pos, "")
+    rx257_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_257_done
-  rxcap_257_fail:
-    goto rx252_fail
-  rxcap_257_done:
-  # rx subrule "panic" subtype=method negate=
-    rx252_cur."!cursor_pos"(rx252_pos)
-    $P10 = rx252_cur."panic"("::: not yet implemented")
-    unless $P10, rx252_fail
-    rx252_pos = $P10."pos"()
-  # rx pass
-    rx252_cur."!cursor_pass"(rx252_pos, "metachar:sym<:::>")
-    if_null rx252_debug, debug_287
-    rx252_cur."!cursor_debug"("PASS", "metachar:sym<:::>", " at pos=", rx252_pos)
-  debug_287:
-    .return (rx252_cur)
-  rx252_restart:
+    goto rxcap_261_done
+  rxcap_261_fail:
+    goto rx257_fail
+  rxcap_261_done:
+  # rx pass
+    rx257_cur."!cursor_pass"(rx257_pos, "metachar:sym<^^>")
+    if_null rx257_debug, debug_302
+    rx257_cur."!cursor_debug"("PASS", "metachar:sym<^^>", " at pos=", rx257_pos)
+  debug_302:
+    .return (rx257_cur)
+  rx257_restart:
 .annotate 'line', 3
-    if_null rx252_debug, debug_288
-    rx252_cur."!cursor_debug"("NEXT", "metachar:sym<:::>")
-  debug_288:
-  rx252_fail:
-    (rx252_rep, rx252_pos, $I10, $P10) = rx252_cur."!mark_fail"(0)
-    lt rx252_pos, -1, rx252_done
-    eq rx252_pos, -1, rx252_fail
-    jump $I10
-  rx252_done:
-    rx252_cur."!cursor_fail"()
-    if_null rx252_debug, debug_289
-    rx252_cur."!cursor_debug"("FAIL", "metachar:sym<:::>")
-  debug_289:
-    .return (rx252_cur)
+    if_null rx257_debug, debug_303
+    rx257_cur."!cursor_debug"("NEXT", "metachar:sym<^^>")
+  debug_303:
+  rx257_fail:
+    (rx257_rep, rx257_pos, $I10, $P10) = rx257_cur."!mark_fail"(0)
+    lt rx257_pos, -1, rx257_done
+    eq rx257_pos, -1, rx257_fail
+    jump $I10
+  rx257_done:
+    rx257_cur."!cursor_fail"()
+    if_null rx257_debug, debug_304
+    rx257_cur."!cursor_debug"("FAIL", "metachar:sym<^^>")
+  debug_304:
+    .return (rx257_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<:::>"  :subid("74_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<^^>"  :subid("74_1284728471.30547") :method
 .annotate 'line', 3
-    $P254 = self."!PREFIX__!subrule"("panic", ":::")
-    new $P255, "ResizablePMCArray"
-    push $P255, $P254
-    .return ($P255)
+    new $P259, "ResizablePMCArray"
+    push $P259, "^^"
+    .return ($P259)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<::>"  :subid("75_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "metachar:sym<$>"  :subid("75_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx259_tgt
-    .local int rx259_pos
-    .local int rx259_off
-    .local int rx259_eos
-    .local int rx259_rep
-    .local pmc rx259_cur
-    .local pmc rx259_debug
-    (rx259_cur, rx259_pos, rx259_tgt, $I10) = self."!cursor_start"()
-    getattribute rx259_debug, rx259_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx259_cur
+    .local string rx263_tgt
+    .local int rx263_pos
+    .local int rx263_off
+    .local int rx263_eos
+    .local int rx263_rep
+    .local pmc rx263_cur
+    .local pmc rx263_debug
+    (rx263_cur, rx263_pos, rx263_tgt, $I10) = self."!cursor_start"()
+    getattribute rx263_debug, rx263_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx263_cur
     .local pmc match
     .lex "$/", match
-    length rx259_eos, rx259_tgt
-    gt rx259_pos, rx259_eos, rx259_done
-    set rx259_off, 0
-    lt rx259_pos, 2, rx259_start
-    sub rx259_off, rx259_pos, 1
-    substr rx259_tgt, rx259_tgt, rx259_off
-  rx259_start:
-    eq $I10, 1, rx259_restart
-    if_null rx259_debug, debug_290
-    rx259_cur."!cursor_debug"("START", "metachar:sym<::>")
-  debug_290:
+    length rx263_eos, rx263_tgt
+    gt rx263_pos, rx263_eos, rx263_done
+    set rx263_off, 0
+    lt rx263_pos, 2, rx263_start
+    sub rx263_off, rx263_pos, 1
+    substr rx263_tgt, rx263_tgt, rx263_off
+  rx263_start:
+    eq $I10, 1, rx263_restart
+    if_null rx263_debug, debug_305
+    rx263_cur."!cursor_debug"("START", "metachar:sym<$>")
+  debug_305:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan263_done
-    goto rxscan263_scan
-  rxscan263_loop:
-    ($P10) = rx259_cur."from"()
-    inc $P10
-    set rx259_pos, $P10
-    ge rx259_pos, rx259_eos, rxscan263_done
-  rxscan263_scan:
-    set_addr $I10, rxscan263_loop
-    rx259_cur."!mark_push"(0, rx259_pos, $I10)
-  rxscan263_done:
+    ne $I10, -1, rxscan266_done
+    goto rxscan266_scan
+  rxscan266_loop:
+    ($P10) = rx263_cur."from"()
+    inc $P10
+    set rx263_pos, $P10
+    ge rx263_pos, rx263_eos, rxscan266_done
+  rxscan266_scan:
+    set_addr $I10, rxscan266_loop
+    rx263_cur."!mark_push"(0, rx263_pos, $I10)
+  rxscan266_done:
 .annotate 'line', 94
   # rx subcapture "sym"
-    set_addr $I10, rxcap_264_fail
-    rx259_cur."!mark_push"(0, rx259_pos, $I10)
-  # rx literal  "::"
-    add $I11, rx259_pos, 2
-    gt $I11, rx259_eos, rx259_fail
-    sub $I11, rx259_pos, rx259_off
-    substr $S10, rx259_tgt, $I11, 2
-    ne $S10, "::", rx259_fail
-    add rx259_pos, 2
-    set_addr $I10, rxcap_264_fail
-    ($I12, $I11) = rx259_cur."!mark_peek"($I10)
-    rx259_cur."!cursor_pos"($I11)
-    ($P10) = rx259_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx259_pos, "")
-    rx259_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_267_fail
+    rx263_cur."!mark_push"(0, rx263_pos, $I10)
+  # rx literal  "$"
+    add $I11, rx263_pos, 1
+    gt $I11, rx263_eos, rx263_fail
+    sub $I11, rx263_pos, rx263_off
+    ord $I11, rx263_tgt, $I11
+    ne $I11, 36, rx263_fail
+    add rx263_pos, 1
+    set_addr $I10, rxcap_267_fail
+    ($I12, $I11) = rx263_cur."!mark_peek"($I10)
+    rx263_cur."!cursor_pos"($I11)
+    ($P10) = rx263_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx263_pos, "")
+    rx263_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_264_done
-  rxcap_264_fail:
-    goto rx259_fail
-  rxcap_264_done:
-  # rx subrule "panic" subtype=method negate=
-    rx259_cur."!cursor_pos"(rx259_pos)
-    $P10 = rx259_cur."panic"(":: not yet implemented")
-    unless $P10, rx259_fail
-    rx259_pos = $P10."pos"()
-  # rx pass
-    rx259_cur."!cursor_pass"(rx259_pos, "metachar:sym<::>")
-    if_null rx259_debug, debug_291
-    rx259_cur."!cursor_debug"("PASS", "metachar:sym<::>", " at pos=", rx259_pos)
-  debug_291:
-    .return (rx259_cur)
-  rx259_restart:
+    goto rxcap_267_done
+  rxcap_267_fail:
+    goto rx263_fail
+  rxcap_267_done:
+  # rx pass
+    rx263_cur."!cursor_pass"(rx263_pos, "metachar:sym<$>")
+    if_null rx263_debug, debug_306
+    rx263_cur."!cursor_debug"("PASS", "metachar:sym<$>", " at pos=", rx263_pos)
+  debug_306:
+    .return (rx263_cur)
+  rx263_restart:
 .annotate 'line', 3
-    if_null rx259_debug, debug_292
-    rx259_cur."!cursor_debug"("NEXT", "metachar:sym<::>")
-  debug_292:
-  rx259_fail:
-    (rx259_rep, rx259_pos, $I10, $P10) = rx259_cur."!mark_fail"(0)
-    lt rx259_pos, -1, rx259_done
-    eq rx259_pos, -1, rx259_fail
-    jump $I10
-  rx259_done:
-    rx259_cur."!cursor_fail"()
-    if_null rx259_debug, debug_293
-    rx259_cur."!cursor_debug"("FAIL", "metachar:sym<::>")
-  debug_293:
-    .return (rx259_cur)
+    if_null rx263_debug, debug_307
+    rx263_cur."!cursor_debug"("NEXT", "metachar:sym<$>")
+  debug_307:
+  rx263_fail:
+    (rx263_rep, rx263_pos, $I10, $P10) = rx263_cur."!mark_fail"(0)
+    lt rx263_pos, -1, rx263_done
+    eq rx263_pos, -1, rx263_fail
+    jump $I10
+  rx263_done:
+    rx263_cur."!cursor_fail"()
+    if_null rx263_debug, debug_308
+    rx263_cur."!cursor_debug"("FAIL", "metachar:sym<$>")
+  debug_308:
+    .return (rx263_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<::>"  :subid("76_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<$>"  :subid("76_1284728471.30547") :method
 .annotate 'line', 3
-    $P261 = self."!PREFIX__!subrule"("panic", "::")
-    new $P262, "ResizablePMCArray"
-    push $P262, $P261
-    .return ($P262)
+    new $P265, "ResizablePMCArray"
+    push $P265, "$"
+    .return ($P265)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<lwb>"  :subid("77_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "metachar:sym<$$>"  :subid("77_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx266_tgt
-    .local int rx266_pos
-    .local int rx266_off
-    .local int rx266_eos
-    .local int rx266_rep
-    .local pmc rx266_cur
-    .local pmc rx266_debug
-    (rx266_cur, rx266_pos, rx266_tgt, $I10) = self."!cursor_start"()
-    getattribute rx266_debug, rx266_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx266_cur
+    .local string rx269_tgt
+    .local int rx269_pos
+    .local int rx269_off
+    .local int rx269_eos
+    .local int rx269_rep
+    .local pmc rx269_cur
+    .local pmc rx269_debug
+    (rx269_cur, rx269_pos, rx269_tgt, $I10) = self."!cursor_start"()
+    getattribute rx269_debug, rx269_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx269_cur
     .local pmc match
     .lex "$/", match
-    length rx266_eos, rx266_tgt
-    gt rx266_pos, rx266_eos, rx266_done
-    set rx266_off, 0
-    lt rx266_pos, 2, rx266_start
-    sub rx266_off, rx266_pos, 1
-    substr rx266_tgt, rx266_tgt, rx266_off
-  rx266_start:
-    eq $I10, 1, rx266_restart
-    if_null rx266_debug, debug_294
-    rx266_cur."!cursor_debug"("START", "metachar:sym<lwb>")
-  debug_294:
+    length rx269_eos, rx269_tgt
+    gt rx269_pos, rx269_eos, rx269_done
+    set rx269_off, 0
+    lt rx269_pos, 2, rx269_start
+    sub rx269_off, rx269_pos, 1
+    substr rx269_tgt, rx269_tgt, rx269_off
+  rx269_start:
+    eq $I10, 1, rx269_restart
+    if_null rx269_debug, debug_309
+    rx269_cur."!cursor_debug"("START", "metachar:sym<$$>")
+  debug_309:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan269_done
-    goto rxscan269_scan
-  rxscan269_loop:
-    ($P10) = rx266_cur."from"()
-    inc $P10
-    set rx266_pos, $P10
-    ge rx266_pos, rx266_eos, rxscan269_done
-  rxscan269_scan:
-    set_addr $I10, rxscan269_loop
-    rx266_cur."!mark_push"(0, rx266_pos, $I10)
-  rxscan269_done:
+    ne $I10, -1, rxscan272_done
+    goto rxscan272_scan
+  rxscan272_loop:
+    ($P10) = rx269_cur."from"()
+    inc $P10
+    set rx269_pos, $P10
+    ge rx269_pos, rx269_eos, rxscan272_done
+  rxscan272_scan:
+    set_addr $I10, rxscan272_loop
+    rx269_cur."!mark_push"(0, rx269_pos, $I10)
+  rxscan272_done:
 .annotate 'line', 95
   # rx subcapture "sym"
-    set_addr $I10, rxcap_271_fail
-    rx266_cur."!mark_push"(0, rx266_pos, $I10)
-  alt270_0:
-    set_addr $I10, alt270_1
-    rx266_cur."!mark_push"(0, rx266_pos, $I10)
-  # rx literal  "<<"
-    add $I11, rx266_pos, 2
-    gt $I11, rx266_eos, rx266_fail
-    sub $I11, rx266_pos, rx266_off
-    substr $S10, rx266_tgt, $I11, 2
-    ne $S10, "<<", rx266_fail
-    add rx266_pos, 2
-    goto alt270_end
-  alt270_1:
-  # rx literal  unicode:"\x{ab}"
-    add $I11, rx266_pos, 1
-    gt $I11, rx266_eos, rx266_fail
-    sub $I11, rx266_pos, rx266_off
-    ord $I11, rx266_tgt, $I11
-    ne $I11, 171, rx266_fail
-    add rx266_pos, 1
-  alt270_end:
-    set_addr $I10, rxcap_271_fail
-    ($I12, $I11) = rx266_cur."!mark_peek"($I10)
-    rx266_cur."!cursor_pos"($I11)
-    ($P10) = rx266_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx266_pos, "")
-    rx266_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_273_fail
+    rx269_cur."!mark_push"(0, rx269_pos, $I10)
+  # rx literal  "$$"
+    add $I11, rx269_pos, 2
+    gt $I11, rx269_eos, rx269_fail
+    sub $I11, rx269_pos, rx269_off
+    substr $S10, rx269_tgt, $I11, 2
+    ne $S10, "$$", rx269_fail
+    add rx269_pos, 2
+    set_addr $I10, rxcap_273_fail
+    ($I12, $I11) = rx269_cur."!mark_peek"($I10)
+    rx269_cur."!cursor_pos"($I11)
+    ($P10) = rx269_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx269_pos, "")
+    rx269_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_271_done
-  rxcap_271_fail:
-    goto rx266_fail
-  rxcap_271_done:
-  # rx pass
-    rx266_cur."!cursor_pass"(rx266_pos, "metachar:sym<lwb>")
-    if_null rx266_debug, debug_295
-    rx266_cur."!cursor_debug"("PASS", "metachar:sym<lwb>", " at pos=", rx266_pos)
-  debug_295:
-    .return (rx266_cur)
-  rx266_restart:
+    goto rxcap_273_done
+  rxcap_273_fail:
+    goto rx269_fail
+  rxcap_273_done:
+  # rx pass
+    rx269_cur."!cursor_pass"(rx269_pos, "metachar:sym<$$>")
+    if_null rx269_debug, debug_310
+    rx269_cur."!cursor_debug"("PASS", "metachar:sym<$$>", " at pos=", rx269_pos)
+  debug_310:
+    .return (rx269_cur)
+  rx269_restart:
 .annotate 'line', 3
-    if_null rx266_debug, debug_296
-    rx266_cur."!cursor_debug"("NEXT", "metachar:sym<lwb>")
-  debug_296:
-  rx266_fail:
-    (rx266_rep, rx266_pos, $I10, $P10) = rx266_cur."!mark_fail"(0)
-    lt rx266_pos, -1, rx266_done
-    eq rx266_pos, -1, rx266_fail
-    jump $I10
-  rx266_done:
-    rx266_cur."!cursor_fail"()
-    if_null rx266_debug, debug_297
-    rx266_cur."!cursor_debug"("FAIL", "metachar:sym<lwb>")
-  debug_297:
-    .return (rx266_cur)
+    if_null rx269_debug, debug_311
+    rx269_cur."!cursor_debug"("NEXT", "metachar:sym<$$>")
+  debug_311:
+  rx269_fail:
+    (rx269_rep, rx269_pos, $I10, $P10) = rx269_cur."!mark_fail"(0)
+    lt rx269_pos, -1, rx269_done
+    eq rx269_pos, -1, rx269_fail
+    jump $I10
+  rx269_done:
+    rx269_cur."!cursor_fail"()
+    if_null rx269_debug, debug_312
+    rx269_cur."!cursor_debug"("FAIL", "metachar:sym<$$>")
+  debug_312:
+    .return (rx269_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<lwb>"  :subid("78_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<$$>"  :subid("78_1284728471.30547") :method
 .annotate 'line', 3
-    new $P268, "ResizablePMCArray"
-    push $P268, unicode:"\x{ab}"
-    push $P268, "<<"
-    .return ($P268)
+    new $P271, "ResizablePMCArray"
+    push $P271, "$$"
+    .return ($P271)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<rwb>"  :subid("79_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "metachar:sym<:::>"  :subid("79_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx273_tgt
-    .local int rx273_pos
-    .local int rx273_off
-    .local int rx273_eos
-    .local int rx273_rep
-    .local pmc rx273_cur
-    .local pmc rx273_debug
-    (rx273_cur, rx273_pos, rx273_tgt, $I10) = self."!cursor_start"()
-    getattribute rx273_debug, rx273_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx273_cur
+    .local string rx275_tgt
+    .local int rx275_pos
+    .local int rx275_off
+    .local int rx275_eos
+    .local int rx275_rep
+    .local pmc rx275_cur
+    .local pmc rx275_debug
+    (rx275_cur, rx275_pos, rx275_tgt, $I10) = self."!cursor_start"()
+    getattribute rx275_debug, rx275_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx275_cur
     .local pmc match
     .lex "$/", match
-    length rx273_eos, rx273_tgt
-    gt rx273_pos, rx273_eos, rx273_done
-    set rx273_off, 0
-    lt rx273_pos, 2, rx273_start
-    sub rx273_off, rx273_pos, 1
-    substr rx273_tgt, rx273_tgt, rx273_off
-  rx273_start:
-    eq $I10, 1, rx273_restart
-    if_null rx273_debug, debug_298
-    rx273_cur."!cursor_debug"("START", "metachar:sym<rwb>")
-  debug_298:
+    length rx275_eos, rx275_tgt
+    gt rx275_pos, rx275_eos, rx275_done
+    set rx275_off, 0
+    lt rx275_pos, 2, rx275_start
+    sub rx275_off, rx275_pos, 1
+    substr rx275_tgt, rx275_tgt, rx275_off
+  rx275_start:
+    eq $I10, 1, rx275_restart
+    if_null rx275_debug, debug_313
+    rx275_cur."!cursor_debug"("START", "metachar:sym<:::>")
+  debug_313:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan276_done
-    goto rxscan276_scan
-  rxscan276_loop:
-    ($P10) = rx273_cur."from"()
-    inc $P10
-    set rx273_pos, $P10
-    ge rx273_pos, rx273_eos, rxscan276_done
-  rxscan276_scan:
-    set_addr $I10, rxscan276_loop
-    rx273_cur."!mark_push"(0, rx273_pos, $I10)
-  rxscan276_done:
+    ne $I10, -1, rxscan279_done
+    goto rxscan279_scan
+  rxscan279_loop:
+    ($P10) = rx275_cur."from"()
+    inc $P10
+    set rx275_pos, $P10
+    ge rx275_pos, rx275_eos, rxscan279_done
+  rxscan279_scan:
+    set_addr $I10, rxscan279_loop
+    rx275_cur."!mark_push"(0, rx275_pos, $I10)
+  rxscan279_done:
 .annotate 'line', 96
   # rx subcapture "sym"
-    set_addr $I10, rxcap_278_fail
-    rx273_cur."!mark_push"(0, rx273_pos, $I10)
-  alt277_0:
-    set_addr $I10, alt277_1
-    rx273_cur."!mark_push"(0, rx273_pos, $I10)
-  # rx literal  ">>"
-    add $I11, rx273_pos, 2
-    gt $I11, rx273_eos, rx273_fail
-    sub $I11, rx273_pos, rx273_off
-    substr $S10, rx273_tgt, $I11, 2
-    ne $S10, ">>", rx273_fail
-    add rx273_pos, 2
-    goto alt277_end
-  alt277_1:
-  # rx literal  unicode:"\x{bb}"
-    add $I11, rx273_pos, 1
-    gt $I11, rx273_eos, rx273_fail
-    sub $I11, rx273_pos, rx273_off
-    ord $I11, rx273_tgt, $I11
-    ne $I11, 187, rx273_fail
-    add rx273_pos, 1
-  alt277_end:
-    set_addr $I10, rxcap_278_fail
-    ($I12, $I11) = rx273_cur."!mark_peek"($I10)
-    rx273_cur."!cursor_pos"($I11)
-    ($P10) = rx273_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx273_pos, "")
-    rx273_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_280_fail
+    rx275_cur."!mark_push"(0, rx275_pos, $I10)
+  # rx literal  ":::"
+    add $I11, rx275_pos, 3
+    gt $I11, rx275_eos, rx275_fail
+    sub $I11, rx275_pos, rx275_off
+    substr $S10, rx275_tgt, $I11, 3
+    ne $S10, ":::", rx275_fail
+    add rx275_pos, 3
+    set_addr $I10, rxcap_280_fail
+    ($I12, $I11) = rx275_cur."!mark_peek"($I10)
+    rx275_cur."!cursor_pos"($I11)
+    ($P10) = rx275_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx275_pos, "")
+    rx275_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_278_done
-  rxcap_278_fail:
-    goto rx273_fail
-  rxcap_278_done:
-  # rx pass
-    rx273_cur."!cursor_pass"(rx273_pos, "metachar:sym<rwb>")
-    if_null rx273_debug, debug_299
-    rx273_cur."!cursor_debug"("PASS", "metachar:sym<rwb>", " at pos=", rx273_pos)
-  debug_299:
-    .return (rx273_cur)
-  rx273_restart:
+    goto rxcap_280_done
+  rxcap_280_fail:
+    goto rx275_fail
+  rxcap_280_done:
+  # rx subrule "panic" subtype=method negate=
+    rx275_cur."!cursor_pos"(rx275_pos)
+    $P10 = rx275_cur."panic"("::: not yet implemented")
+    unless $P10, rx275_fail
+    rx275_pos = $P10."pos"()
+  # rx pass
+    rx275_cur."!cursor_pass"(rx275_pos, "metachar:sym<:::>")
+    if_null rx275_debug, debug_314
+    rx275_cur."!cursor_debug"("PASS", "metachar:sym<:::>", " at pos=", rx275_pos)
+  debug_314:
+    .return (rx275_cur)
+  rx275_restart:
 .annotate 'line', 3
-    if_null rx273_debug, debug_300
-    rx273_cur."!cursor_debug"("NEXT", "metachar:sym<rwb>")
-  debug_300:
-  rx273_fail:
-    (rx273_rep, rx273_pos, $I10, $P10) = rx273_cur."!mark_fail"(0)
-    lt rx273_pos, -1, rx273_done
-    eq rx273_pos, -1, rx273_fail
-    jump $I10
-  rx273_done:
-    rx273_cur."!cursor_fail"()
-    if_null rx273_debug, debug_301
-    rx273_cur."!cursor_debug"("FAIL", "metachar:sym<rwb>")
-  debug_301:
-    .return (rx273_cur)
+    if_null rx275_debug, debug_315
+    rx275_cur."!cursor_debug"("NEXT", "metachar:sym<:::>")
+  debug_315:
+  rx275_fail:
+    (rx275_rep, rx275_pos, $I10, $P10) = rx275_cur."!mark_fail"(0)
+    lt rx275_pos, -1, rx275_done
+    eq rx275_pos, -1, rx275_fail
+    jump $I10
+  rx275_done:
+    rx275_cur."!cursor_fail"()
+    if_null rx275_debug, debug_316
+    rx275_cur."!cursor_debug"("FAIL", "metachar:sym<:::>")
+  debug_316:
+    .return (rx275_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<rwb>"  :subid("80_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<:::>"  :subid("80_1284728471.30547") :method
 .annotate 'line', 3
-    new $P275, "ResizablePMCArray"
-    push $P275, unicode:"\x{bb}"
-    push $P275, ">>"
-    .return ($P275)
+    $P277 = self."!PREFIX__!subrule"("panic", ":::")
+    new $P278, "ResizablePMCArray"
+    push $P278, $P277
+    .return ($P278)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<bs>"  :subid("81_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "metachar:sym<::>"  :subid("81_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx280_tgt
-    .local int rx280_pos
-    .local int rx280_off
-    .local int rx280_eos
-    .local int rx280_rep
-    .local pmc rx280_cur
-    .local pmc rx280_debug
-    (rx280_cur, rx280_pos, rx280_tgt, $I10) = self."!cursor_start"()
-    getattribute rx280_debug, rx280_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx280_cur
+    .local string rx282_tgt
+    .local int rx282_pos
+    .local int rx282_off
+    .local int rx282_eos
+    .local int rx282_rep
+    .local pmc rx282_cur
+    .local pmc rx282_debug
+    (rx282_cur, rx282_pos, rx282_tgt, $I10) = self."!cursor_start"()
+    getattribute rx282_debug, rx282_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx282_cur
     .local pmc match
     .lex "$/", match
-    length rx280_eos, rx280_tgt
-    gt rx280_pos, rx280_eos, rx280_done
-    set rx280_off, 0
-    lt rx280_pos, 2, rx280_start
-    sub rx280_off, rx280_pos, 1
-    substr rx280_tgt, rx280_tgt, rx280_off
-  rx280_start:
-    eq $I10, 1, rx280_restart
-    if_null rx280_debug, debug_302
-    rx280_cur."!cursor_debug"("START", "metachar:sym<bs>")
-  debug_302:
+    length rx282_eos, rx282_tgt
+    gt rx282_pos, rx282_eos, rx282_done
+    set rx282_off, 0
+    lt rx282_pos, 2, rx282_start
+    sub rx282_off, rx282_pos, 1
+    substr rx282_tgt, rx282_tgt, rx282_off
+  rx282_start:
+    eq $I10, 1, rx282_restart
+    if_null rx282_debug, debug_317
+    rx282_cur."!cursor_debug"("START", "metachar:sym<::>")
+  debug_317:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan284_done
-    goto rxscan284_scan
-  rxscan284_loop:
-    ($P10) = rx280_cur."from"()
-    inc $P10
-    set rx280_pos, $P10
-    ge rx280_pos, rx280_eos, rxscan284_done
-  rxscan284_scan:
-    set_addr $I10, rxscan284_loop
-    rx280_cur."!mark_push"(0, rx280_pos, $I10)
-  rxscan284_done:
+    ne $I10, -1, rxscan286_done
+    goto rxscan286_scan
+  rxscan286_loop:
+    ($P10) = rx282_cur."from"()
+    inc $P10
+    set rx282_pos, $P10
+    ge rx282_pos, rx282_eos, rxscan286_done
+  rxscan286_scan:
+    set_addr $I10, rxscan286_loop
+    rx282_cur."!mark_push"(0, rx282_pos, $I10)
+  rxscan286_done:
 .annotate 'line', 97
-  # rx literal  "\\"
-    add $I11, rx280_pos, 1
-    gt $I11, rx280_eos, rx280_fail
-    sub $I11, rx280_pos, rx280_off
-    ord $I11, rx280_tgt, $I11
-    ne $I11, 92, rx280_fail
-    add rx280_pos, 1
-  # rx subrule "backslash" subtype=capture negate=
-    rx280_cur."!cursor_pos"(rx280_pos)
-    $P10 = rx280_cur."backslash"()
-    unless $P10, rx280_fail
-    rx280_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("backslash")
-    rx280_pos = $P10."pos"()
-  # rx pass
-    rx280_cur."!cursor_pass"(rx280_pos, "metachar:sym<bs>")
-    if_null rx280_debug, debug_303
-    rx280_cur."!cursor_debug"("PASS", "metachar:sym<bs>", " at pos=", rx280_pos)
-  debug_303:
-    .return (rx280_cur)
-  rx280_restart:
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_287_fail
+    rx282_cur."!mark_push"(0, rx282_pos, $I10)
+  # rx literal  "::"
+    add $I11, rx282_pos, 2
+    gt $I11, rx282_eos, rx282_fail
+    sub $I11, rx282_pos, rx282_off
+    substr $S10, rx282_tgt, $I11, 2
+    ne $S10, "::", rx282_fail
+    add rx282_pos, 2
+    set_addr $I10, rxcap_287_fail
+    ($I12, $I11) = rx282_cur."!mark_peek"($I10)
+    rx282_cur."!cursor_pos"($I11)
+    ($P10) = rx282_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx282_pos, "")
+    rx282_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_287_done
+  rxcap_287_fail:
+    goto rx282_fail
+  rxcap_287_done:
+  # rx subrule "panic" subtype=method negate=
+    rx282_cur."!cursor_pos"(rx282_pos)
+    $P10 = rx282_cur."panic"(":: not yet implemented")
+    unless $P10, rx282_fail
+    rx282_pos = $P10."pos"()
+  # rx pass
+    rx282_cur."!cursor_pass"(rx282_pos, "metachar:sym<::>")
+    if_null rx282_debug, debug_318
+    rx282_cur."!cursor_debug"("PASS", "metachar:sym<::>", " at pos=", rx282_pos)
+  debug_318:
+    .return (rx282_cur)
+  rx282_restart:
 .annotate 'line', 3
-    if_null rx280_debug, debug_304
-    rx280_cur."!cursor_debug"("NEXT", "metachar:sym<bs>")
-  debug_304:
-  rx280_fail:
-    (rx280_rep, rx280_pos, $I10, $P10) = rx280_cur."!mark_fail"(0)
-    lt rx280_pos, -1, rx280_done
-    eq rx280_pos, -1, rx280_fail
-    jump $I10
-  rx280_done:
-    rx280_cur."!cursor_fail"()
-    if_null rx280_debug, debug_305
-    rx280_cur."!cursor_debug"("FAIL", "metachar:sym<bs>")
-  debug_305:
-    .return (rx280_cur)
+    if_null rx282_debug, debug_319
+    rx282_cur."!cursor_debug"("NEXT", "metachar:sym<::>")
+  debug_319:
+  rx282_fail:
+    (rx282_rep, rx282_pos, $I10, $P10) = rx282_cur."!mark_fail"(0)
+    lt rx282_pos, -1, rx282_done
+    eq rx282_pos, -1, rx282_fail
+    jump $I10
+  rx282_done:
+    rx282_cur."!cursor_fail"()
+    if_null rx282_debug, debug_320
+    rx282_cur."!cursor_debug"("FAIL", "metachar:sym<::>")
+  debug_320:
+    .return (rx282_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<bs>"  :subid("82_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<::>"  :subid("82_1284728471.30547") :method
 .annotate 'line', 3
-    $P282 = self."!PREFIX__!subrule"("backslash", "\\")
-    new $P283, "ResizablePMCArray"
-    push $P283, $P282
-    .return ($P283)
+    $P284 = self."!PREFIX__!subrule"("panic", "::")
+    new $P285, "ResizablePMCArray"
+    push $P285, $P284
+    .return ($P285)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<mod>"  :subid("83_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "metachar:sym<lwb>"  :subid("83_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx286_tgt
-    .local int rx286_pos
-    .local int rx286_off
-    .local int rx286_eos
-    .local int rx286_rep
-    .local pmc rx286_cur
-    .local pmc rx286_debug
-    (rx286_cur, rx286_pos, rx286_tgt, $I10) = self."!cursor_start"()
-    getattribute rx286_debug, rx286_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx286_cur
+    .local string rx289_tgt
+    .local int rx289_pos
+    .local int rx289_off
+    .local int rx289_eos
+    .local int rx289_rep
+    .local pmc rx289_cur
+    .local pmc rx289_debug
+    (rx289_cur, rx289_pos, rx289_tgt, $I10) = self."!cursor_start"()
+    getattribute rx289_debug, rx289_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx289_cur
     .local pmc match
     .lex "$/", match
-    length rx286_eos, rx286_tgt
-    gt rx286_pos, rx286_eos, rx286_done
-    set rx286_off, 0
-    lt rx286_pos, 2, rx286_start
-    sub rx286_off, rx286_pos, 1
-    substr rx286_tgt, rx286_tgt, rx286_off
-  rx286_start:
-    eq $I10, 1, rx286_restart
-    if_null rx286_debug, debug_306
-    rx286_cur."!cursor_debug"("START", "metachar:sym<mod>")
-  debug_306:
+    length rx289_eos, rx289_tgt
+    gt rx289_pos, rx289_eos, rx289_done
+    set rx289_off, 0
+    lt rx289_pos, 2, rx289_start
+    sub rx289_off, rx289_pos, 1
+    substr rx289_tgt, rx289_tgt, rx289_off
+  rx289_start:
+    eq $I10, 1, rx289_restart
+    if_null rx289_debug, debug_321
+    rx289_cur."!cursor_debug"("START", "metachar:sym<lwb>")
+  debug_321:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan290_done
-    goto rxscan290_scan
-  rxscan290_loop:
-    ($P10) = rx286_cur."from"()
-    inc $P10
-    set rx286_pos, $P10
-    ge rx286_pos, rx286_eos, rxscan290_done
-  rxscan290_scan:
-    set_addr $I10, rxscan290_loop
-    rx286_cur."!mark_push"(0, rx286_pos, $I10)
-  rxscan290_done:
+    ne $I10, -1, rxscan292_done
+    goto rxscan292_scan
+  rxscan292_loop:
+    ($P10) = rx289_cur."from"()
+    inc $P10
+    set rx289_pos, $P10
+    ge rx289_pos, rx289_eos, rxscan292_done
+  rxscan292_scan:
+    set_addr $I10, rxscan292_loop
+    rx289_cur."!mark_push"(0, rx289_pos, $I10)
+  rxscan292_done:
 .annotate 'line', 98
-  # rx subrule "mod_internal" subtype=capture negate=
-    rx286_cur."!cursor_pos"(rx286_pos)
-    $P10 = rx286_cur."mod_internal"()
-    unless $P10, rx286_fail
-    rx286_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("mod_internal")
-    rx286_pos = $P10."pos"()
-  # rx pass
-    rx286_cur."!cursor_pass"(rx286_pos, "metachar:sym<mod>")
-    if_null rx286_debug, debug_307
-    rx286_cur."!cursor_debug"("PASS", "metachar:sym<mod>", " at pos=", rx286_pos)
-  debug_307:
-    .return (rx286_cur)
-  rx286_restart:
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_294_fail
+    rx289_cur."!mark_push"(0, rx289_pos, $I10)
+  alt293_0:
+    set_addr $I10, alt293_1
+    rx289_cur."!mark_push"(0, rx289_pos, $I10)
+  # rx literal  "<<"
+    add $I11, rx289_pos, 2
+    gt $I11, rx289_eos, rx289_fail
+    sub $I11, rx289_pos, rx289_off
+    substr $S10, rx289_tgt, $I11, 2
+    ne $S10, "<<", rx289_fail
+    add rx289_pos, 2
+    goto alt293_end
+  alt293_1:
+  # rx literal  unicode:"\x{ab}"
+    add $I11, rx289_pos, 1
+    gt $I11, rx289_eos, rx289_fail
+    sub $I11, rx289_pos, rx289_off
+    ord $I11, rx289_tgt, $I11
+    ne $I11, 171, rx289_fail
+    add rx289_pos, 1
+  alt293_end:
+    set_addr $I10, rxcap_294_fail
+    ($I12, $I11) = rx289_cur."!mark_peek"($I10)
+    rx289_cur."!cursor_pos"($I11)
+    ($P10) = rx289_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx289_pos, "")
+    rx289_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_294_done
+  rxcap_294_fail:
+    goto rx289_fail
+  rxcap_294_done:
+  # rx pass
+    rx289_cur."!cursor_pass"(rx289_pos, "metachar:sym<lwb>")
+    if_null rx289_debug, debug_322
+    rx289_cur."!cursor_debug"("PASS", "metachar:sym<lwb>", " at pos=", rx289_pos)
+  debug_322:
+    .return (rx289_cur)
+  rx289_restart:
 .annotate 'line', 3
-    if_null rx286_debug, debug_308
-    rx286_cur."!cursor_debug"("NEXT", "metachar:sym<mod>")
-  debug_308:
-  rx286_fail:
-    (rx286_rep, rx286_pos, $I10, $P10) = rx286_cur."!mark_fail"(0)
-    lt rx286_pos, -1, rx286_done
-    eq rx286_pos, -1, rx286_fail
-    jump $I10
-  rx286_done:
-    rx286_cur."!cursor_fail"()
-    if_null rx286_debug, debug_309
-    rx286_cur."!cursor_debug"("FAIL", "metachar:sym<mod>")
-  debug_309:
-    .return (rx286_cur)
+    if_null rx289_debug, debug_323
+    rx289_cur."!cursor_debug"("NEXT", "metachar:sym<lwb>")
+  debug_323:
+  rx289_fail:
+    (rx289_rep, rx289_pos, $I10, $P10) = rx289_cur."!mark_fail"(0)
+    lt rx289_pos, -1, rx289_done
+    eq rx289_pos, -1, rx289_fail
+    jump $I10
+  rx289_done:
+    rx289_cur."!cursor_fail"()
+    if_null rx289_debug, debug_324
+    rx289_cur."!cursor_debug"("FAIL", "metachar:sym<lwb>")
+  debug_324:
+    .return (rx289_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<mod>"  :subid("84_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<lwb>"  :subid("84_1284728471.30547") :method
 .annotate 'line', 3
-    $P288 = self."!PREFIX__!subrule"("mod_internal", "")
-    new $P289, "ResizablePMCArray"
-    push $P289, $P288
-    .return ($P289)
+    new $P291, "ResizablePMCArray"
+    push $P291, unicode:"\x{ab}"
+    push $P291, "<<"
+    .return ($P291)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<~>"  :subid("85_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "metachar:sym<rwb>"  :subid("85_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx292_tgt
-    .local int rx292_pos
-    .local int rx292_off
-    .local int rx292_eos
-    .local int rx292_rep
-    .local pmc rx292_cur
-    .local pmc rx292_debug
-    (rx292_cur, rx292_pos, rx292_tgt, $I10) = self."!cursor_start"()
-    getattribute rx292_debug, rx292_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx292_cur
+    .local string rx296_tgt
+    .local int rx296_pos
+    .local int rx296_off
+    .local int rx296_eos
+    .local int rx296_rep
+    .local pmc rx296_cur
+    .local pmc rx296_debug
+    (rx296_cur, rx296_pos, rx296_tgt, $I10) = self."!cursor_start"()
+    getattribute rx296_debug, rx296_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx296_cur
     .local pmc match
     .lex "$/", match
-    length rx292_eos, rx292_tgt
-    gt rx292_pos, rx292_eos, rx292_done
-    set rx292_off, 0
-    lt rx292_pos, 2, rx292_start
-    sub rx292_off, rx292_pos, 1
-    substr rx292_tgt, rx292_tgt, rx292_off
-  rx292_start:
-    eq $I10, 1, rx292_restart
-    if_null rx292_debug, debug_310
-    rx292_cur."!cursor_debug"("START", "metachar:sym<~>")
-  debug_310:
+    length rx296_eos, rx296_tgt
+    gt rx296_pos, rx296_eos, rx296_done
+    set rx296_off, 0
+    lt rx296_pos, 2, rx296_start
+    sub rx296_off, rx296_pos, 1
+    substr rx296_tgt, rx296_tgt, rx296_off
+  rx296_start:
+    eq $I10, 1, rx296_restart
+    if_null rx296_debug, debug_325
+    rx296_cur."!cursor_debug"("START", "metachar:sym<rwb>")
+  debug_325:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan296_done
-    goto rxscan296_scan
-  rxscan296_loop:
-    ($P10) = rx292_cur."from"()
-    inc $P10
-    set rx292_pos, $P10
-    ge rx292_pos, rx292_eos, rxscan296_done
-  rxscan296_scan:
-    set_addr $I10, rxscan296_loop
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
-  rxscan296_done:
-.annotate 'line', 102
+    ne $I10, -1, rxscan299_done
+    goto rxscan299_scan
+  rxscan299_loop:
+    ($P10) = rx296_cur."from"()
+    inc $P10
+    set rx296_pos, $P10
+    ge rx296_pos, rx296_eos, rxscan299_done
+  rxscan299_scan:
+    set_addr $I10, rxscan299_loop
+    rx296_cur."!mark_push"(0, rx296_pos, $I10)
+  rxscan299_done:
+.annotate 'line', 99
   # rx subcapture "sym"
-    set_addr $I10, rxcap_297_fail
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
-  # rx literal  "~"
-    add $I11, rx292_pos, 1
-    gt $I11, rx292_eos, rx292_fail
-    sub $I11, rx292_pos, rx292_off
-    ord $I11, rx292_tgt, $I11
-    ne $I11, 126, rx292_fail
-    add rx292_pos, 1
-    set_addr $I10, rxcap_297_fail
-    ($I12, $I11) = rx292_cur."!mark_peek"($I10)
-    rx292_cur."!cursor_pos"($I11)
-    ($P10) = rx292_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx292_pos, "")
-    rx292_cur."!mark_push"(0, -1, 0, $P10)
+    set_addr $I10, rxcap_301_fail
+    rx296_cur."!mark_push"(0, rx296_pos, $I10)
+  alt300_0:
+    set_addr $I10, alt300_1
+    rx296_cur."!mark_push"(0, rx296_pos, $I10)
+  # rx literal  ">>"
+    add $I11, rx296_pos, 2
+    gt $I11, rx296_eos, rx296_fail
+    sub $I11, rx296_pos, rx296_off
+    substr $S10, rx296_tgt, $I11, 2
+    ne $S10, ">>", rx296_fail
+    add rx296_pos, 2
+    goto alt300_end
+  alt300_1:
+  # rx literal  unicode:"\x{bb}"
+    add $I11, rx296_pos, 1
+    gt $I11, rx296_eos, rx296_fail
+    sub $I11, rx296_pos, rx296_off
+    ord $I11, rx296_tgt, $I11
+    ne $I11, 187, rx296_fail
+    add rx296_pos, 1
+  alt300_end:
+    set_addr $I10, rxcap_301_fail
+    ($I12, $I11) = rx296_cur."!mark_peek"($I10)
+    rx296_cur."!cursor_pos"($I11)
+    ($P10) = rx296_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx296_pos, "")
+    rx296_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_297_done
-  rxcap_297_fail:
-    goto rx292_fail
-  rxcap_297_done:
-.annotate 'line', 103
-  # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
-  # rx subrule "quantified_atom" subtype=capture negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."quantified_atom"()
-    unless $P10, rx292_fail
-    rx292_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("GOAL")
-    rx292_pos = $P10."pos"()
-.annotate 'line', 104
-  # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
-  # rx subrule "quantified_atom" subtype=capture negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."quantified_atom"()
-    unless $P10, rx292_fail
-    rx292_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("EXPR")
-    rx292_pos = $P10."pos"()
-.annotate 'line', 101
-  # rx pass
-    rx292_cur."!cursor_pass"(rx292_pos, "metachar:sym<~>")
-    if_null rx292_debug, debug_311
-    rx292_cur."!cursor_debug"("PASS", "metachar:sym<~>", " at pos=", rx292_pos)
-  debug_311:
-    .return (rx292_cur)
-  rx292_restart:
+    goto rxcap_301_done
+  rxcap_301_fail:
+    goto rx296_fail
+  rxcap_301_done:
+  # rx pass
+    rx296_cur."!cursor_pass"(rx296_pos, "metachar:sym<rwb>")
+    if_null rx296_debug, debug_326
+    rx296_cur."!cursor_debug"("PASS", "metachar:sym<rwb>", " at pos=", rx296_pos)
+  debug_326:
+    .return (rx296_cur)
+  rx296_restart:
 .annotate 'line', 3
-    if_null rx292_debug, debug_312
-    rx292_cur."!cursor_debug"("NEXT", "metachar:sym<~>")
-  debug_312:
-  rx292_fail:
-    (rx292_rep, rx292_pos, $I10, $P10) = rx292_cur."!mark_fail"(0)
-    lt rx292_pos, -1, rx292_done
-    eq rx292_pos, -1, rx292_fail
-    jump $I10
-  rx292_done:
-    rx292_cur."!cursor_fail"()
-    if_null rx292_debug, debug_313
-    rx292_cur."!cursor_debug"("FAIL", "metachar:sym<~>")
-  debug_313:
-    .return (rx292_cur)
+    if_null rx296_debug, debug_327
+    rx296_cur."!cursor_debug"("NEXT", "metachar:sym<rwb>")
+  debug_327:
+  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"()
+    if_null rx296_debug, debug_328
+    rx296_cur."!cursor_debug"("FAIL", "metachar:sym<rwb>")
+  debug_328:
+    .return (rx296_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<~>"  :subid("86_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<rwb>"  :subid("86_1284728471.30547") :method
 .annotate 'line', 3
-    $P294 = self."!PREFIX__!subrule"("ws", "~")
-    new $P295, "ResizablePMCArray"
-    push $P295, $P294
-    .return ($P295)
+    new $P298, "ResizablePMCArray"
+    push $P298, unicode:"\x{bb}"
+    push $P298, ">>"
+    .return ($P298)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<{*}>"  :subid("87_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "metachar:sym<bs>"  :subid("87_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx299_tgt
-    .local int rx299_pos
-    .local int rx299_off
-    .local int rx299_eos
-    .local int rx299_rep
-    .local pmc rx299_cur
-    .local pmc rx299_debug
-    (rx299_cur, rx299_pos, rx299_tgt, $I10) = self."!cursor_start"()
-    rx299_cur."!cursor_caparray"("key")
-    getattribute rx299_debug, rx299_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx299_cur
+    .local string rx303_tgt
+    .local int rx303_pos
+    .local int rx303_off
+    .local int rx303_eos
+    .local int rx303_rep
+    .local pmc rx303_cur
+    .local pmc rx303_debug
+    (rx303_cur, rx303_pos, rx303_tgt, $I10) = self."!cursor_start"()
+    getattribute rx303_debug, rx303_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx303_cur
     .local pmc match
     .lex "$/", match
-    length rx299_eos, rx299_tgt
-    gt rx299_pos, rx299_eos, rx299_done
-    set rx299_off, 0
-    lt rx299_pos, 2, rx299_start
-    sub rx299_off, rx299_pos, 1
-    substr rx299_tgt, rx299_tgt, rx299_off
-  rx299_start:
-    eq $I10, 1, rx299_restart
-    if_null rx299_debug, debug_314
-    rx299_cur."!cursor_debug"("START", "metachar:sym<{*}>")
-  debug_314:
+    length rx303_eos, rx303_tgt
+    gt rx303_pos, rx303_eos, rx303_done
+    set rx303_off, 0
+    lt rx303_pos, 2, rx303_start
+    sub rx303_off, rx303_pos, 1
+    substr rx303_tgt, rx303_tgt, rx303_off
+  rx303_start:
+    eq $I10, 1, rx303_restart
+    if_null rx303_debug, debug_329
+    rx303_cur."!cursor_debug"("START", "metachar:sym<bs>")
+  debug_329:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan302_done
-    goto rxscan302_scan
-  rxscan302_loop:
-    ($P10) = rx299_cur."from"()
-    inc $P10
-    set rx299_pos, $P10
-    ge rx299_pos, rx299_eos, rxscan302_done
-  rxscan302_scan:
-    set_addr $I10, rxscan302_loop
-    rx299_cur."!mark_push"(0, rx299_pos, $I10)
-  rxscan302_done:
-.annotate 'line', 108
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_303_fail
-    rx299_cur."!mark_push"(0, rx299_pos, $I10)
-  # rx literal  "{*}"
-    add $I11, rx299_pos, 3
-    gt $I11, rx299_eos, rx299_fail
-    sub $I11, rx299_pos, rx299_off
-    substr $S10, rx299_tgt, $I11, 3
-    ne $S10, "{*}", rx299_fail
-    add rx299_pos, 3
-    set_addr $I10, rxcap_303_fail
-    ($I12, $I11) = rx299_cur."!mark_peek"($I10)
-    rx299_cur."!cursor_pos"($I11)
-    ($P10) = rx299_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx299_pos, "")
-    rx299_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_303_done
-  rxcap_303_fail:
-    goto rx299_fail
-  rxcap_303_done:
-.annotate 'line', 109
-  # rx rxquantr304 ** 0..1
-    set_addr $I10, rxquantr304_done
-    rx299_cur."!mark_push"(0, rx299_pos, $I10)
-  rxquantr304_loop:
-  # rx enumcharlist_q negate=0  r 0..-1
-    sub $I10, rx299_pos, rx299_off
-    set rx299_rep, 0
-    sub $I12, rx299_eos, rx299_pos
-  rxenumcharlistq305_loop:
-    le $I12, 0, rxenumcharlistq305_done
-    substr $S10, rx299_tgt, $I10, 1
-    index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rxenumcharlistq305_done
-    inc rx299_rep
-    inc $I10
-    dec $I12
-    goto rxenumcharlistq305_loop
-  rxenumcharlistq305_done:
-    add rx299_pos, rx299_pos, rx299_rep
-  # rx literal  "#= "
-    add $I11, rx299_pos, 3
-    gt $I11, rx299_eos, rx299_fail
-    sub $I11, rx299_pos, rx299_off
-    substr $S10, rx299_tgt, $I11, 3
-    ne $S10, "#= ", rx299_fail
-    add rx299_pos, 3
-  # rx enumcharlist_q negate=0  r 0..-1
-    sub $I10, rx299_pos, rx299_off
-    set rx299_rep, 0
-    sub $I12, rx299_eos, rx299_pos
-  rxenumcharlistq306_loop:
-    le $I12, 0, rxenumcharlistq306_done
-    substr $S10, rx299_tgt, $I10, 1
-    index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rxenumcharlistq306_done
-    inc rx299_rep
-    inc $I10
-    dec $I12
-    goto rxenumcharlistq306_loop
-  rxenumcharlistq306_done:
-    add rx299_pos, rx299_pos, rx299_rep
-  # rx subcapture "key"
-    set_addr $I10, rxcap_309_fail
-    rx299_cur."!mark_push"(0, rx299_pos, $I10)
-  # rx charclass_q S r 1..-1
-    sub $I10, rx299_pos, rx299_off
-    find_cclass $I11, 32, rx299_tgt, $I10, rx299_eos
-    add $I12, $I10, 1
-    lt $I11, $I12, rx299_fail
-    add rx299_pos, rx299_off, $I11
-  # rx rxquantr307 ** 0..*
-    set_addr $I10, rxquantr307_done
-    rx299_cur."!mark_push"(0, rx299_pos, $I10)
-  rxquantr307_loop:
-  # rx enumcharlist_q negate=0  r 1..-1
-    sub $I10, rx299_pos, rx299_off
-    set rx299_rep, 0
-    sub $I12, rx299_eos, rx299_pos
-  rxenumcharlistq308_loop:
-    le $I12, 0, rxenumcharlistq308_done
-    substr $S10, rx299_tgt, $I10, 1
-    index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rxenumcharlistq308_done
-    inc rx299_rep
-    inc $I10
-    dec $I12
-    goto rxenumcharlistq308_loop
-  rxenumcharlistq308_done:
-    lt rx299_rep, 1, rx299_fail
-    add rx299_pos, rx299_pos, rx299_rep
-  # rx charclass_q S r 1..-1
-    sub $I10, rx299_pos, rx299_off
-    find_cclass $I11, 32, rx299_tgt, $I10, rx299_eos
-    add $I12, $I10, 1
-    lt $I11, $I12, rx299_fail
-    add rx299_pos, rx299_off, $I11
-    set_addr $I10, rxquantr307_done
-    (rx299_rep) = rx299_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr307_done
-    rx299_cur."!mark_push"(rx299_rep, rx299_pos, $I10)
-    goto rxquantr307_loop
-  rxquantr307_done:
-    set_addr $I10, rxcap_309_fail
-    ($I12, $I11) = rx299_cur."!mark_peek"($I10)
-    rx299_cur."!cursor_pos"($I11)
-    ($P10) = rx299_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx299_pos, "")
-    rx299_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("key")
-    goto rxcap_309_done
-  rxcap_309_fail:
-    goto rx299_fail
-  rxcap_309_done:
-    set_addr $I10, rxquantr304_done
-    (rx299_rep) = rx299_cur."!mark_commit"($I10)
-  rxquantr304_done:
-.annotate 'line', 107
+    ne $I10, -1, rxscan307_done
+    goto rxscan307_scan
+  rxscan307_loop:
+    ($P10) = rx303_cur."from"()
+    inc $P10
+    set rx303_pos, $P10
+    ge rx303_pos, rx303_eos, rxscan307_done
+  rxscan307_scan:
+    set_addr $I10, rxscan307_loop
+    rx303_cur."!mark_push"(0, rx303_pos, $I10)
+  rxscan307_done:
+.annotate 'line', 100
+  # rx literal  "\\"
+    add $I11, rx303_pos, 1
+    gt $I11, rx303_eos, rx303_fail
+    sub $I11, rx303_pos, rx303_off
+    ord $I11, rx303_tgt, $I11
+    ne $I11, 92, rx303_fail
+    add rx303_pos, 1
+  # rx subrule "backslash" subtype=capture negate=
+    rx303_cur."!cursor_pos"(rx303_pos)
+    $P10 = rx303_cur."backslash"()
+    unless $P10, rx303_fail
+    rx303_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("backslash")
+    rx303_pos = $P10."pos"()
   # rx pass
-    rx299_cur."!cursor_pass"(rx299_pos, "metachar:sym<{*}>")
-    if_null rx299_debug, debug_315
-    rx299_cur."!cursor_debug"("PASS", "metachar:sym<{*}>", " at pos=", rx299_pos)
-  debug_315:
-    .return (rx299_cur)
-  rx299_restart:
+    rx303_cur."!cursor_pass"(rx303_pos, "metachar:sym<bs>")
+    if_null rx303_debug, debug_330
+    rx303_cur."!cursor_debug"("PASS", "metachar:sym<bs>", " at pos=", rx303_pos)
+  debug_330:
+    .return (rx303_cur)
+  rx303_restart:
 .annotate 'line', 3
-    if_null rx299_debug, debug_316
-    rx299_cur."!cursor_debug"("NEXT", "metachar:sym<{*}>")
-  debug_316:
-  rx299_fail:
-    (rx299_rep, rx299_pos, $I10, $P10) = rx299_cur."!mark_fail"(0)
-    lt rx299_pos, -1, rx299_done
-    eq rx299_pos, -1, rx299_fail
-    jump $I10
-  rx299_done:
-    rx299_cur."!cursor_fail"()
-    if_null rx299_debug, debug_317
-    rx299_cur."!cursor_debug"("FAIL", "metachar:sym<{*}>")
-  debug_317:
-    .return (rx299_cur)
+    if_null rx303_debug, debug_331
+    rx303_cur."!cursor_debug"("NEXT", "metachar:sym<bs>")
+  debug_331:
+  rx303_fail:
+    (rx303_rep, rx303_pos, $I10, $P10) = rx303_cur."!mark_fail"(0)
+    lt rx303_pos, -1, rx303_done
+    eq rx303_pos, -1, rx303_fail
+    jump $I10
+  rx303_done:
+    rx303_cur."!cursor_fail"()
+    if_null rx303_debug, debug_332
+    rx303_cur."!cursor_debug"("FAIL", "metachar:sym<bs>")
+  debug_332:
+    .return (rx303_cur)
+    .return ()
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "!PREFIX__metachar:sym<bs>"  :subid("88_1284728471.30547") :method
+.annotate 'line', 3
+    $P305 = self."!PREFIX__!subrule"("backslash", "\\")
+    new $P306, "ResizablePMCArray"
+    push $P306, $P305
+    .return ($P306)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "metachar:sym<mod>"  :subid("89_1284728471.30547") :method :outer("11_1284728471.30547")
+.annotate 'line', 3
+    .local string rx309_tgt
+    .local int rx309_pos
+    .local int rx309_off
+    .local int rx309_eos
+    .local int rx309_rep
+    .local pmc rx309_cur
+    .local pmc rx309_debug
+    (rx309_cur, rx309_pos, rx309_tgt, $I10) = self."!cursor_start"()
+    getattribute rx309_debug, rx309_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx309_cur
+    .local pmc match
+    .lex "$/", match
+    length rx309_eos, rx309_tgt
+    gt rx309_pos, rx309_eos, rx309_done
+    set rx309_off, 0
+    lt rx309_pos, 2, rx309_start
+    sub rx309_off, rx309_pos, 1
+    substr rx309_tgt, rx309_tgt, rx309_off
+  rx309_start:
+    eq $I10, 1, rx309_restart
+    if_null rx309_debug, debug_333
+    rx309_cur."!cursor_debug"("START", "metachar:sym<mod>")
+  debug_333:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan313_done
+    goto rxscan313_scan
+  rxscan313_loop:
+    ($P10) = rx309_cur."from"()
+    inc $P10
+    set rx309_pos, $P10
+    ge rx309_pos, rx309_eos, rxscan313_done
+  rxscan313_scan:
+    set_addr $I10, rxscan313_loop
+    rx309_cur."!mark_push"(0, rx309_pos, $I10)
+  rxscan313_done:
+.annotate 'line', 101
+  # rx subrule "mod_internal" subtype=capture negate=
+    rx309_cur."!cursor_pos"(rx309_pos)
+    $P10 = rx309_cur."mod_internal"()
+    unless $P10, rx309_fail
+    rx309_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("mod_internal")
+    rx309_pos = $P10."pos"()
+  # rx pass
+    rx309_cur."!cursor_pass"(rx309_pos, "metachar:sym<mod>")
+    if_null rx309_debug, debug_334
+    rx309_cur."!cursor_debug"("PASS", "metachar:sym<mod>", " at pos=", rx309_pos)
+  debug_334:
+    .return (rx309_cur)
+  rx309_restart:
+.annotate 'line', 3
+    if_null rx309_debug, debug_335
+    rx309_cur."!cursor_debug"("NEXT", "metachar:sym<mod>")
+  debug_335:
+  rx309_fail:
+    (rx309_rep, rx309_pos, $I10, $P10) = rx309_cur."!mark_fail"(0)
+    lt rx309_pos, -1, rx309_done
+    eq rx309_pos, -1, rx309_fail
+    jump $I10
+  rx309_done:
+    rx309_cur."!cursor_fail"()
+    if_null rx309_debug, debug_336
+    rx309_cur."!cursor_debug"("FAIL", "metachar:sym<mod>")
+  debug_336:
+    .return (rx309_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<{*}>"  :subid("88_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<mod>"  :subid("90_1284728471.30547") :method
 .annotate 'line', 3
-    new $P301, "ResizablePMCArray"
-    push $P301, "{*}"
-    .return ($P301)
+    $P311 = self."!PREFIX__!subrule"("mod_internal", "")
+    new $P312, "ResizablePMCArray"
+    push $P312, $P311
+    .return ($P312)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<assert>"  :subid("89_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "metachar:sym<quantifier>"  :subid("91_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx311_tgt
-    .local int rx311_pos
-    .local int rx311_off
-    .local int rx311_eos
-    .local int rx311_rep
-    .local pmc rx311_cur
-    .local pmc rx311_debug
-    (rx311_cur, rx311_pos, rx311_tgt, $I10) = self."!cursor_start"()
-    getattribute rx311_debug, rx311_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx311_cur
+    .local string rx315_tgt
+    .local int rx315_pos
+    .local int rx315_off
+    .local int rx315_eos
+    .local int rx315_rep
+    .local pmc rx315_cur
+    .local pmc rx315_debug
+    (rx315_cur, rx315_pos, rx315_tgt, $I10) = self."!cursor_start"()
+    getattribute rx315_debug, rx315_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx315_cur
     .local pmc match
     .lex "$/", match
-    length rx311_eos, rx311_tgt
-    gt rx311_pos, rx311_eos, rx311_done
-    set rx311_off, 0
-    lt rx311_pos, 2, rx311_start
-    sub rx311_off, rx311_pos, 1
-    substr rx311_tgt, rx311_tgt, rx311_off
-  rx311_start:
-    eq $I10, 1, rx311_restart
-    if_null rx311_debug, debug_318
-    rx311_cur."!cursor_debug"("START", "metachar:sym<assert>")
-  debug_318:
+    length rx315_eos, rx315_tgt
+    gt rx315_pos, rx315_eos, rx315_done
+    set rx315_off, 0
+    lt rx315_pos, 2, rx315_start
+    sub rx315_off, rx315_pos, 1
+    substr rx315_tgt, rx315_tgt, rx315_off
+  rx315_start:
+    eq $I10, 1, rx315_restart
+    if_null rx315_debug, debug_337
+    rx315_cur."!cursor_debug"("START", "metachar:sym<quantifier>")
+  debug_337:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan315_done
-    goto rxscan315_scan
-  rxscan315_loop:
-    ($P10) = rx311_cur."from"()
-    inc $P10
-    set rx311_pos, $P10
-    ge rx311_pos, rx311_eos, rxscan315_done
-  rxscan315_scan:
-    set_addr $I10, rxscan315_loop
-    rx311_cur."!mark_push"(0, rx311_pos, $I10)
-  rxscan315_done:
-.annotate 'line', 112
-  # rx literal  "<"
-    add $I11, rx311_pos, 1
-    gt $I11, rx311_eos, rx311_fail
-    sub $I11, rx311_pos, rx311_off
-    ord $I11, rx311_tgt, $I11
-    ne $I11, 60, rx311_fail
-    add rx311_pos, 1
-  # rx subrule "assertion" subtype=capture negate=
-    rx311_cur."!cursor_pos"(rx311_pos)
-    $P10 = rx311_cur."assertion"()
-    unless $P10, rx311_fail
-    rx311_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("assertion")
-    rx311_pos = $P10."pos"()
-  alt316_0:
-.annotate 'line', 113
-    set_addr $I10, alt316_1
-    rx311_cur."!mark_push"(0, rx311_pos, $I10)
-  # rx literal  ">"
-    add $I11, rx311_pos, 1
-    gt $I11, rx311_eos, rx311_fail
-    sub $I11, rx311_pos, rx311_off
-    ord $I11, rx311_tgt, $I11
-    ne $I11, 62, rx311_fail
-    add rx311_pos, 1
-    goto alt316_end
-  alt316_1:
+    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:
+.annotate 'line', 103
+  # rx subrule "quantifier" subtype=capture negate=
+    rx315_cur."!cursor_pos"(rx315_pos)
+    $P10 = rx315_cur."quantifier"()
+    unless $P10, rx315_fail
+    rx315_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quantifier")
+    rx315_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx311_cur."!cursor_pos"(rx311_pos)
-    $P10 = rx311_cur."panic"("regex assertion not terminated by angle bracket")
-    unless $P10, rx311_fail
-    rx311_pos = $P10."pos"()
-  alt316_end:
-.annotate 'line', 111
-  # rx pass
-    rx311_cur."!cursor_pass"(rx311_pos, "metachar:sym<assert>")
-    if_null rx311_debug, debug_319
-    rx311_cur."!cursor_debug"("PASS", "metachar:sym<assert>", " at pos=", rx311_pos)
-  debug_319:
-    .return (rx311_cur)
-  rx311_restart:
+    rx315_cur."!cursor_pos"(rx315_pos)
+    $P10 = rx315_cur."panic"("Quantifier quantifies nothing")
+    unless $P10, rx315_fail
+    rx315_pos = $P10."pos"()
+.annotate 'line', 102
+  # rx pass
+    rx315_cur."!cursor_pass"(rx315_pos, "metachar:sym<quantifier>")
+    if_null rx315_debug, debug_338
+    rx315_cur."!cursor_debug"("PASS", "metachar:sym<quantifier>", " at pos=", rx315_pos)
+  debug_338:
+    .return (rx315_cur)
+  rx315_restart:
 .annotate 'line', 3
-    if_null rx311_debug, debug_320
-    rx311_cur."!cursor_debug"("NEXT", "metachar:sym<assert>")
-  debug_320:
-  rx311_fail:
-    (rx311_rep, rx311_pos, $I10, $P10) = rx311_cur."!mark_fail"(0)
-    lt rx311_pos, -1, rx311_done
-    eq rx311_pos, -1, rx311_fail
-    jump $I10
-  rx311_done:
-    rx311_cur."!cursor_fail"()
-    if_null rx311_debug, debug_321
-    rx311_cur."!cursor_debug"("FAIL", "metachar:sym<assert>")
-  debug_321:
-    .return (rx311_cur)
+    if_null rx315_debug, debug_339
+    rx315_cur."!cursor_debug"("NEXT", "metachar:sym<quantifier>")
+  debug_339:
+  rx315_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
+  rx315_done:
+    rx315_cur."!cursor_fail"()
+    if_null rx315_debug, debug_340
+    rx315_cur."!cursor_debug"("FAIL", "metachar:sym<quantifier>")
+  debug_340:
+    .return (rx315_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<assert>"  :subid("90_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<quantifier>"  :subid("92_1284728471.30547") :method
 .annotate 'line', 3
-    $P313 = self."!PREFIX__!subrule"("assertion", "<")
-    new $P314, "ResizablePMCArray"
-    push $P314, $P313
-    .return ($P314)
+    $P317 = self."!PREFIX__!subrule"("quantifier", "")
+    new $P318, "ResizablePMCArray"
+    push $P318, $P317
+    .return ($P318)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<var>"  :subid("91_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "metachar:sym<~>"  :subid("93_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx318_tgt
-    .local int rx318_pos
-    .local int rx318_off
-    .local int rx318_eos
-    .local int rx318_rep
-    .local pmc rx318_cur
-    .local pmc rx318_debug
-    (rx318_cur, rx318_pos, rx318_tgt, $I10) = self."!cursor_start"()
-    rx318_cur."!cursor_caparray"("quantified_atom")
-    getattribute rx318_debug, rx318_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx318_cur
+    .local string rx321_tgt
+    .local int rx321_pos
+    .local int rx321_off
+    .local int rx321_eos
+    .local int rx321_rep
+    .local pmc rx321_cur
+    .local pmc rx321_debug
+    (rx321_cur, rx321_pos, rx321_tgt, $I10) = self."!cursor_start"()
+    getattribute rx321_debug, rx321_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx321_cur
     .local pmc match
     .lex "$/", match
-    length rx318_eos, rx318_tgt
-    gt rx318_pos, rx318_eos, rx318_done
-    set rx318_off, 0
-    lt rx318_pos, 2, rx318_start
-    sub rx318_off, rx318_pos, 1
-    substr rx318_tgt, rx318_tgt, rx318_off
-  rx318_start:
-    eq $I10, 1, rx318_restart
-    if_null rx318_debug, debug_322
-    rx318_cur."!cursor_debug"("START", "metachar:sym<var>")
-  debug_322:
+    length rx321_eos, rx321_tgt
+    gt rx321_pos, rx321_eos, rx321_done
+    set rx321_off, 0
+    lt rx321_pos, 2, rx321_start
+    sub rx321_off, rx321_pos, 1
+    substr rx321_tgt, rx321_tgt, rx321_off
+  rx321_start:
+    eq $I10, 1, rx321_restart
+    if_null rx321_debug, debug_341
+    rx321_cur."!cursor_debug"("START", "metachar:sym<~>")
+  debug_341:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan321_done
-    goto rxscan321_scan
-  rxscan321_loop:
-    ($P10) = rx318_cur."from"()
-    inc $P10
-    set rx318_pos, $P10
-    ge rx318_pos, rx318_eos, rxscan321_done
-  rxscan321_scan:
-    set_addr $I10, rxscan321_loop
-    rx318_cur."!mark_push"(0, rx318_pos, $I10)
-  rxscan321_done:
-  alt322_0:
-.annotate 'line', 117
-    set_addr $I10, alt322_1
-    rx318_cur."!mark_push"(0, rx318_pos, $I10)
-.annotate 'line', 118
-  # rx literal  "$<"
-    add $I11, rx318_pos, 2
-    gt $I11, rx318_eos, rx318_fail
-    sub $I11, rx318_pos, rx318_off
-    substr $S10, rx318_tgt, $I11, 2
-    ne $S10, "$<", rx318_fail
-    add rx318_pos, 2
-  # rx subcapture "name"
-    set_addr $I10, rxcap_324_fail
-    rx318_cur."!mark_push"(0, rx318_pos, $I10)
-  # rx enumcharlist_q negate=1  r 1..-1
-    sub $I10, rx318_pos, rx318_off
-    set rx318_rep, 0
-    sub $I12, rx318_eos, rx318_pos
-  rxenumcharlistq323_loop:
-    le $I12, 0, rxenumcharlistq323_done
-    substr $S10, rx318_tgt, $I10, 1
-    index $I11, ">", $S10
-    ge $I11, 0, rxenumcharlistq323_done
-    inc rx318_rep
-    inc $I10
-    dec $I12
-    goto rxenumcharlistq323_loop
-  rxenumcharlistq323_done:
-    lt rx318_rep, 1, rx318_fail
-    add rx318_pos, rx318_pos, rx318_rep
-    set_addr $I10, rxcap_324_fail
-    ($I12, $I11) = rx318_cur."!mark_peek"($I10)
-    rx318_cur."!cursor_pos"($I11)
-    ($P10) = rx318_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx318_pos, "")
-    rx318_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("name")
-    goto rxcap_324_done
-  rxcap_324_fail:
-    goto rx318_fail
-  rxcap_324_done:
-  # rx literal  ">"
-    add $I11, rx318_pos, 1
-    gt $I11, rx318_eos, rx318_fail
-    sub $I11, rx318_pos, rx318_off
-    ord $I11, rx318_tgt, $I11
-    ne $I11, 62, rx318_fail
-    add rx318_pos, 1
-    goto alt322_end
-  alt322_1:
-.annotate 'line', 119
-  # rx literal  "$"
-    add $I11, rx318_pos, 1
-    gt $I11, rx318_eos, rx318_fail
-    sub $I11, rx318_pos, rx318_off
-    ord $I11, rx318_tgt, $I11
-    ne $I11, 36, rx318_fail
-    add rx318_pos, 1
-  # rx subcapture "pos"
-    set_addr $I10, rxcap_325_fail
-    rx318_cur."!mark_push"(0, rx318_pos, $I10)
-  # rx charclass_q d r 1..-1
-    sub $I10, rx318_pos, rx318_off
-    find_not_cclass $I11, 8, rx318_tgt, $I10, rx318_eos
-    add $I12, $I10, 1
-    lt $I11, $I12, rx318_fail
-    add rx318_pos, rx318_off, $I11
-    set_addr $I10, rxcap_325_fail
-    ($I12, $I11) = rx318_cur."!mark_peek"($I10)
-    rx318_cur."!cursor_pos"($I11)
-    ($P10) = rx318_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx318_pos, "")
-    rx318_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("pos")
-    goto rxcap_325_done
-  rxcap_325_fail:
-    goto rx318_fail
-  rxcap_325_done:
-  alt322_end:
-.annotate 'line', 122
-  # rx rxquantr326 ** 0..1
-    set_addr $I10, rxquantr326_done
-    rx318_cur."!mark_push"(0, rx318_pos, $I10)
-  rxquantr326_loop:
+    ne $I10, -1, rxscan325_done
+    goto rxscan325_scan
+  rxscan325_loop:
+    ($P10) = rx321_cur."from"()
+    inc $P10
+    set rx321_pos, $P10
+    ge rx321_pos, rx321_eos, rxscan325_done
+  rxscan325_scan:
+    set_addr $I10, rxscan325_loop
+    rx321_cur."!mark_push"(0, rx321_pos, $I10)
+  rxscan325_done:
+.annotate 'line', 108
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_326_fail
+    rx321_cur."!mark_push"(0, rx321_pos, $I10)
+  # rx literal  "~"
+    add $I11, rx321_pos, 1
+    gt $I11, rx321_eos, rx321_fail
+    sub $I11, rx321_pos, rx321_off
+    ord $I11, rx321_tgt, $I11
+    ne $I11, 126, rx321_fail
+    add rx321_pos, 1
+    set_addr $I10, rxcap_326_fail
+    ($I12, $I11) = rx321_cur."!mark_peek"($I10)
+    rx321_cur."!cursor_pos"($I11)
+    ($P10) = rx321_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx321_pos, "")
+    rx321_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_326_done
+  rxcap_326_fail:
+    goto rx321_fail
+  rxcap_326_done:
+.annotate 'line', 109
   # rx subrule "ws" subtype=method negate=
-    rx318_cur."!cursor_pos"(rx318_pos)
-    $P10 = rx318_cur."ws"()
-    unless $P10, rx318_fail
-    rx318_pos = $P10."pos"()
-  # rx literal  "="
-    add $I11, rx318_pos, 1
-    gt $I11, rx318_eos, rx318_fail
-    sub $I11, rx318_pos, rx318_off
-    ord $I11, rx318_tgt, $I11
-    ne $I11, 61, rx318_fail
-    add rx318_pos, 1
+    rx321_cur."!cursor_pos"(rx321_pos)
+    $P10 = rx321_cur."ws"()
+    unless $P10, rx321_fail
+    rx321_pos = $P10."pos"()
+  # rx subrule "quantified_atom" subtype=capture negate=
+    rx321_cur."!cursor_pos"(rx321_pos)
+    $P10 = rx321_cur."quantified_atom"()
+    unless $P10, rx321_fail
+    rx321_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("GOAL")
+    rx321_pos = $P10."pos"()
+.annotate 'line', 110
   # rx subrule "ws" subtype=method negate=
-    rx318_cur."!cursor_pos"(rx318_pos)
-    $P10 = rx318_cur."ws"()
-    unless $P10, rx318_fail
-    rx318_pos = $P10."pos"()
+    rx321_cur."!cursor_pos"(rx321_pos)
+    $P10 = rx321_cur."ws"()
+    unless $P10, rx321_fail
+    rx321_pos = $P10."pos"()
   # rx subrule "quantified_atom" subtype=capture negate=
-    rx318_cur."!cursor_pos"(rx318_pos)
-    $P10 = rx318_cur."quantified_atom"()
-    unless $P10, rx318_fail
-    rx318_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quantified_atom")
-    rx318_pos = $P10."pos"()
-    set_addr $I10, rxquantr326_done
-    (rx318_rep) = rx318_cur."!mark_commit"($I10)
-  rxquantr326_done:
-.annotate 'line', 116
-  # rx pass
-    rx318_cur."!cursor_pass"(rx318_pos, "metachar:sym<var>")
-    if_null rx318_debug, debug_323
-    rx318_cur."!cursor_debug"("PASS", "metachar:sym<var>", " at pos=", rx318_pos)
-  debug_323:
-    .return (rx318_cur)
-  rx318_restart:
+    rx321_cur."!cursor_pos"(rx321_pos)
+    $P10 = rx321_cur."quantified_atom"()
+    unless $P10, rx321_fail
+    rx321_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("EXPR")
+    rx321_pos = $P10."pos"()
+.annotate 'line', 107
+  # rx pass
+    rx321_cur."!cursor_pass"(rx321_pos, "metachar:sym<~>")
+    if_null rx321_debug, debug_342
+    rx321_cur."!cursor_debug"("PASS", "metachar:sym<~>", " at pos=", rx321_pos)
+  debug_342:
+    .return (rx321_cur)
+  rx321_restart:
 .annotate 'line', 3
-    if_null rx318_debug, debug_324
-    rx318_cur."!cursor_debug"("NEXT", "metachar:sym<var>")
-  debug_324:
-  rx318_fail:
-    (rx318_rep, rx318_pos, $I10, $P10) = rx318_cur."!mark_fail"(0)
-    lt rx318_pos, -1, rx318_done
-    eq rx318_pos, -1, rx318_fail
-    jump $I10
-  rx318_done:
-    rx318_cur."!cursor_fail"()
-    if_null rx318_debug, debug_325
-    rx318_cur."!cursor_debug"("FAIL", "metachar:sym<var>")
-  debug_325:
-    .return (rx318_cur)
+    if_null rx321_debug, debug_343
+    rx321_cur."!cursor_debug"("NEXT", "metachar:sym<~>")
+  debug_343:
+  rx321_fail:
+    (rx321_rep, rx321_pos, $I10, $P10) = rx321_cur."!mark_fail"(0)
+    lt rx321_pos, -1, rx321_done
+    eq rx321_pos, -1, rx321_fail
+    jump $I10
+  rx321_done:
+    rx321_cur."!cursor_fail"()
+    if_null rx321_debug, debug_344
+    rx321_cur."!cursor_debug"("FAIL", "metachar:sym<~>")
+  debug_344:
+    .return (rx321_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<var>"  :subid("92_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<~>"  :subid("94_1284728471.30547") :method
 .annotate 'line', 3
-    new $P320, "ResizablePMCArray"
-    push $P320, "$"
-    push $P320, "$<"
-    .return ($P320)
+    $P323 = self."!PREFIX__!subrule"("ws", "~")
+    new $P324, "ResizablePMCArray"
+    push $P324, $P323
+    .return ($P324)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "metachar:sym<PIR>"  :subid("93_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "metachar:sym<{*}>"  :subid("95_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
     .local string rx328_tgt
     .local int rx328_pos
@@ -4719,6 +4675,7 @@
     .local pmc rx328_cur
     .local pmc rx328_debug
     (rx328_cur, rx328_pos, rx328_tgt, $I10) = self."!cursor_start"()
+    rx328_cur."!cursor_caparray"("key")
     getattribute rx328_debug, rx328_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx328_cur
     .local pmc match
@@ -4731,9 +4688,9 @@
     substr rx328_tgt, rx328_tgt, rx328_off
   rx328_start:
     eq $I10, 1, rx328_restart
-    if_null rx328_debug, debug_326
-    rx328_cur."!cursor_debug"("START", "metachar:sym<PIR>")
-  debug_326:
+    if_null rx328_debug, debug_345
+    rx328_cur."!cursor_debug"("START", "metachar:sym<{*}>")
+  debug_345:
     $I10 = self.'from'()
     ne $I10, -1, rxscan331_done
     goto rxscan331_scan
@@ -4746,58 +4703,137 @@
     set_addr $I10, rxscan331_loop
     rx328_cur."!mark_push"(0, rx328_pos, $I10)
   rxscan331_done:
-.annotate 'line', 126
-  # rx literal  ":PIR{{"
-    add $I11, rx328_pos, 6
+.annotate 'line', 114
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_332_fail
+    rx328_cur."!mark_push"(0, rx328_pos, $I10)
+  # rx literal  "{*}"
+    add $I11, rx328_pos, 3
     gt $I11, rx328_eos, rx328_fail
     sub $I11, rx328_pos, rx328_off
-    substr $S10, rx328_tgt, $I11, 6
-    ne $S10, ":PIR{{", rx328_fail
-    add rx328_pos, 6
-  # rx subcapture "pir"
-    set_addr $I10, rxcap_334_fail
-    rx328_cur."!mark_push"(0, rx328_pos, $I10)
-  # rx rxquantf332 ** 0..*
-    set_addr $I10, rxquantf332_loop
-    rx328_cur."!mark_push"(0, rx328_pos, $I10)
-    goto rxquantf332_done
-  rxquantf332_loop:
-  # rx charclass .
-    ge rx328_pos, rx328_eos, rx328_fail
-    inc rx328_pos
-    set_addr $I10, rxquantf332_loop
-    rx328_cur."!mark_push"(rx328_rep, rx328_pos, $I10)
-  rxquantf332_done:
-    set_addr $I10, rxcap_334_fail
+    substr $S10, rx328_tgt, $I11, 3
+    ne $S10, "{*}", rx328_fail
+    add rx328_pos, 3
+    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)
-    $P10."!cursor_names"("pir")
-    goto rxcap_334_done
-  rxcap_334_fail:
+    $P10."!cursor_names"("sym")
+    goto rxcap_332_done
+  rxcap_332_fail:
     goto rx328_fail
-  rxcap_334_done:
-  # rx literal  "}}"
-    add $I11, rx328_pos, 2
+  rxcap_332_done:
+.annotate 'line', 115
+  # rx rxquantr333 ** 0..1
+    set_addr $I10, rxquantr333_done
+    rx328_cur."!mark_push"(0, rx328_pos, $I10)
+  rxquantr333_loop:
+  # rx enumcharlist_q negate=0  r 0..-1
+    sub $I10, rx328_pos, rx328_off
+    set rx328_rep, 0
+    sub $I12, rx328_eos, rx328_pos
+  rxenumcharlistq334_loop:
+    le $I12, 0, rxenumcharlistq334_done
+    substr $S10, rx328_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, rxenumcharlistq334_done
+    inc rx328_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq334_loop
+  rxenumcharlistq334_done:
+    add rx328_pos, rx328_pos, rx328_rep
+  # rx literal  "#= "
+    add $I11, rx328_pos, 3
     gt $I11, rx328_eos, rx328_fail
     sub $I11, rx328_pos, rx328_off
-    substr $S10, rx328_tgt, $I11, 2
-    ne $S10, "}}", rx328_fail
-    add rx328_pos, 2
-.annotate 'line', 125
+    substr $S10, rx328_tgt, $I11, 3
+    ne $S10, "#= ", rx328_fail
+    add rx328_pos, 3
+  # rx enumcharlist_q negate=0  r 0..-1
+    sub $I10, rx328_pos, rx328_off
+    set rx328_rep, 0
+    sub $I12, rx328_eos, rx328_pos
+  rxenumcharlistq335_loop:
+    le $I12, 0, rxenumcharlistq335_done
+    substr $S10, rx328_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, rxenumcharlistq335_done
+    inc rx328_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq335_loop
+  rxenumcharlistq335_done:
+    add rx328_pos, rx328_pos, rx328_rep
+  # rx subcapture "key"
+    set_addr $I10, rxcap_338_fail
+    rx328_cur."!mark_push"(0, rx328_pos, $I10)
+  # rx charclass_q S r 1..-1
+    sub $I10, rx328_pos, rx328_off
+    find_cclass $I11, 32, rx328_tgt, $I10, rx328_eos
+    add $I12, $I10, 1
+    lt $I11, $I12, rx328_fail
+    add rx328_pos, rx328_off, $I11
+  # rx rxquantr336 ** 0..*
+    set_addr $I10, rxquantr336_done
+    rx328_cur."!mark_push"(0, rx328_pos, $I10)
+  rxquantr336_loop:
+  # rx enumcharlist_q negate=0  r 1..-1
+    sub $I10, rx328_pos, rx328_off
+    set rx328_rep, 0
+    sub $I12, rx328_eos, rx328_pos
+  rxenumcharlistq337_loop:
+    le $I12, 0, rxenumcharlistq337_done
+    substr $S10, rx328_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, rxenumcharlistq337_done
+    inc rx328_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq337_loop
+  rxenumcharlistq337_done:
+    lt rx328_rep, 1, rx328_fail
+    add rx328_pos, rx328_pos, rx328_rep
+  # rx charclass_q S r 1..-1
+    sub $I10, rx328_pos, rx328_off
+    find_cclass $I11, 32, rx328_tgt, $I10, rx328_eos
+    add $I12, $I10, 1
+    lt $I11, $I12, rx328_fail
+    add rx328_pos, rx328_off, $I11
+    set_addr $I10, rxquantr336_done
+    (rx328_rep) = rx328_cur."!mark_commit"($I10)
+    set_addr $I10, rxquantr336_done
+    rx328_cur."!mark_push"(rx328_rep, rx328_pos, $I10)
+    goto rxquantr336_loop
+  rxquantr336_done:
+    set_addr $I10, rxcap_338_fail
+    ($I12, $I11) = rx328_cur."!mark_peek"($I10)
+    rx328_cur."!cursor_pos"($I11)
+    ($P10) = rx328_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx328_pos, "")
+    rx328_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("key")
+    goto rxcap_338_done
+  rxcap_338_fail:
+    goto rx328_fail
+  rxcap_338_done:
+    set_addr $I10, rxquantr333_done
+    (rx328_rep) = rx328_cur."!mark_commit"($I10)
+  rxquantr333_done:
+.annotate 'line', 113
   # rx pass
-    rx328_cur."!cursor_pass"(rx328_pos, "metachar:sym<PIR>")
-    if_null rx328_debug, debug_327
-    rx328_cur."!cursor_debug"("PASS", "metachar:sym<PIR>", " at pos=", rx328_pos)
-  debug_327:
+    rx328_cur."!cursor_pass"(rx328_pos, "metachar:sym<{*}>")
+    if_null rx328_debug, debug_346
+    rx328_cur."!cursor_debug"("PASS", "metachar:sym<{*}>", " at pos=", rx328_pos)
+  debug_346:
     .return (rx328_cur)
   rx328_restart:
 .annotate 'line', 3
-    if_null rx328_debug, debug_328
-    rx328_cur."!cursor_debug"("NEXT", "metachar:sym<PIR>")
-  debug_328:
+    if_null rx328_debug, debug_347
+    rx328_cur."!cursor_debug"("NEXT", "metachar:sym<{*}>")
+  debug_347:
   rx328_fail:
     (rx328_rep, rx328_pos, $I10, $P10) = rx328_cur."!mark_fail"(0)
     lt rx328_pos, -1, rx328_done
@@ -4805,41 +4841,25 @@
     jump $I10
   rx328_done:
     rx328_cur."!cursor_fail"()
-    if_null rx328_debug, debug_329
-    rx328_cur."!cursor_debug"("FAIL", "metachar:sym<PIR>")
-  debug_329:
+    if_null rx328_debug, debug_348
+    rx328_cur."!cursor_debug"("FAIL", "metachar:sym<{*}>")
+  debug_348:
     .return (rx328_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__metachar:sym<PIR>"  :subid("94_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<{*}>"  :subid("96_1284728471.30547") :method
 .annotate 'line', 3
     new $P330, "ResizablePMCArray"
-    push $P330, ":PIR{{"
+    push $P330, "{*}"
     .return ($P330)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash"  :subid("95_1282323996.47527") :method
-.annotate 'line', 129
-    $P336 = self."!protoregex"("backslash")
-    .return ($P336)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash"  :subid("96_1282323996.47527") :method
-.annotate 'line', 129
-    $P338 = self."!PREFIX__!protoregex"("backslash")
-    .return ($P338)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<w>"  :subid("97_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "metachar:sym<assert>"  :subid("97_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
     .local string rx340_tgt
     .local int rx340_pos
@@ -4861,54 +4881,67 @@
     substr rx340_tgt, rx340_tgt, rx340_off
   rx340_start:
     eq $I10, 1, rx340_restart
-    if_null rx340_debug, debug_330
-    rx340_cur."!cursor_debug"("START", "backslash:sym<w>")
-  debug_330:
+    if_null rx340_debug, debug_349
+    rx340_cur."!cursor_debug"("START", "metachar:sym<assert>")
+  debug_349:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan343_done
-    goto rxscan343_scan
-  rxscan343_loop:
+    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, rxscan343_done
-  rxscan343_scan:
-    set_addr $I10, rxscan343_loop
-    rx340_cur."!mark_push"(0, rx340_pos, $I10)
-  rxscan343_done:
-.annotate 'line', 130
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_344_fail
+    ge rx340_pos, rx340_eos, rxscan344_done
+  rxscan344_scan:
+    set_addr $I10, rxscan344_loop
     rx340_cur."!mark_push"(0, rx340_pos, $I10)
-  # rx enumcharlist negate=0 
-    ge rx340_pos, rx340_eos, rx340_fail
-    sub $I10, rx340_pos, rx340_off
-    substr $S10, rx340_tgt, $I10, 1
-    index $I11, "dswnDSWN", $S10
-    lt $I11, 0, rx340_fail
-    inc rx340_pos
-    set_addr $I10, rxcap_344_fail
-    ($I12, $I11) = rx340_cur."!mark_peek"($I10)
-    rx340_cur."!cursor_pos"($I11)
-    ($P10) = rx340_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx340_pos, "")
+  rxscan344_done:
+.annotate 'line', 118
+  # rx literal  "<"
+    add $I11, rx340_pos, 1
+    gt $I11, rx340_eos, rx340_fail
+    sub $I11, rx340_pos, rx340_off
+    ord $I11, rx340_tgt, $I11
+    ne $I11, 60, rx340_fail
+    add rx340_pos, 1
+  # rx subrule "assertion" subtype=capture negate=
+    rx340_cur."!cursor_pos"(rx340_pos)
+    $P10 = rx340_cur."assertion"()
+    unless $P10, rx340_fail
     rx340_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_344_done
-  rxcap_344_fail:
-    goto rx340_fail
-  rxcap_344_done:
-  # rx pass
-    rx340_cur."!cursor_pass"(rx340_pos, "backslash:sym<w>")
-    if_null rx340_debug, debug_331
-    rx340_cur."!cursor_debug"("PASS", "backslash:sym<w>", " at pos=", rx340_pos)
-  debug_331:
+    $P10."!cursor_names"("assertion")
+    rx340_pos = $P10."pos"()
+  alt345_0:
+.annotate 'line', 119
+    set_addr $I10, alt345_1
+    rx340_cur."!mark_push"(0, rx340_pos, $I10)
+  # rx literal  ">"
+    add $I11, rx340_pos, 1
+    gt $I11, rx340_eos, rx340_fail
+    sub $I11, rx340_pos, rx340_off
+    ord $I11, rx340_tgt, $I11
+    ne $I11, 62, rx340_fail
+    add rx340_pos, 1
+    goto alt345_end
+  alt345_1:
+  # rx subrule "panic" subtype=method negate=
+    rx340_cur."!cursor_pos"(rx340_pos)
+    $P10 = rx340_cur."panic"("regex assertion not terminated by angle bracket")
+    unless $P10, rx340_fail
+    rx340_pos = $P10."pos"()
+  alt345_end:
+.annotate 'line', 117
+  # rx pass
+    rx340_cur."!cursor_pass"(rx340_pos, "metachar:sym<assert>")
+    if_null rx340_debug, debug_350
+    rx340_cur."!cursor_debug"("PASS", "metachar:sym<assert>", " at pos=", rx340_pos)
+  debug_350:
     .return (rx340_cur)
   rx340_restart:
 .annotate 'line', 3
-    if_null rx340_debug, debug_332
-    rx340_cur."!cursor_debug"("NEXT", "backslash:sym<w>")
-  debug_332:
+    if_null rx340_debug, debug_351
+    rx340_cur."!cursor_debug"("NEXT", "metachar:sym<assert>")
+  debug_351:
   rx340_fail:
     (rx340_rep, rx340_pos, $I10, $P10) = rx340_cur."!mark_fail"(0)
     lt rx340_pos, -1, rx340_done
@@ -4916,840 +4949,830 @@
     jump $I10
   rx340_done:
     rx340_cur."!cursor_fail"()
-    if_null rx340_debug, debug_333
-    rx340_cur."!cursor_debug"("FAIL", "backslash:sym<w>")
-  debug_333:
+    if_null rx340_debug, debug_352
+    rx340_cur."!cursor_debug"("FAIL", "metachar:sym<assert>")
+  debug_352:
     .return (rx340_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<w>"  :subid("98_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<assert>"  :subid("98_1284728471.30547") :method
 .annotate 'line', 3
-    new $P342, "ResizablePMCArray"
-    push $P342, "N"
-    push $P342, "W"
-    push $P342, "S"
-    push $P342, "D"
-    push $P342, "n"
-    push $P342, "w"
-    push $P342, "s"
-    push $P342, "d"
-    .return ($P342)
+    $P342 = self."!PREFIX__!subrule"("assertion", "<")
+    new $P343, "ResizablePMCArray"
+    push $P343, $P342
+    .return ($P343)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<b>"  :subid("99_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "metachar:sym<var>"  :subid("99_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx346_tgt
-    .local int rx346_pos
-    .local int rx346_off
-    .local int rx346_eos
-    .local int rx346_rep
-    .local pmc rx346_cur
-    .local pmc rx346_debug
-    (rx346_cur, rx346_pos, rx346_tgt, $I10) = self."!cursor_start"()
-    getattribute rx346_debug, rx346_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx346_cur
-    .local pmc match
-    .lex "$/", match
-    length rx346_eos, rx346_tgt
-    gt rx346_pos, rx346_eos, rx346_done
-    set rx346_off, 0
-    lt rx346_pos, 2, rx346_start
-    sub rx346_off, rx346_pos, 1
-    substr rx346_tgt, rx346_tgt, rx346_off
-  rx346_start:
-    eq $I10, 1, rx346_restart
-    if_null rx346_debug, debug_334
-    rx346_cur."!cursor_debug"("START", "backslash:sym<b>")
-  debug_334:
+    .local string rx347_tgt
+    .local int rx347_pos
+    .local int rx347_off
+    .local int rx347_eos
+    .local int rx347_rep
+    .local pmc rx347_cur
+    .local pmc rx347_debug
+    (rx347_cur, rx347_pos, rx347_tgt, $I10) = self."!cursor_start"()
+    rx347_cur."!cursor_caparray"("quantified_atom")
+    getattribute rx347_debug, rx347_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx347_cur
+    .local pmc match
+    .lex "$/", match
+    length rx347_eos, rx347_tgt
+    gt rx347_pos, rx347_eos, rx347_done
+    set rx347_off, 0
+    lt rx347_pos, 2, rx347_start
+    sub rx347_off, rx347_pos, 1
+    substr rx347_tgt, rx347_tgt, rx347_off
+  rx347_start:
+    eq $I10, 1, rx347_restart
+    if_null rx347_debug, debug_353
+    rx347_cur."!cursor_debug"("START", "metachar:sym<var>")
+  debug_353:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan349_done
-    goto rxscan349_scan
-  rxscan349_loop:
-    ($P10) = rx346_cur."from"()
-    inc $P10
-    set rx346_pos, $P10
-    ge rx346_pos, rx346_eos, rxscan349_done
-  rxscan349_scan:
-    set_addr $I10, rxscan349_loop
-    rx346_cur."!mark_push"(0, rx346_pos, $I10)
-  rxscan349_done:
-.annotate 'line', 131
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_350_fail
-    rx346_cur."!mark_push"(0, rx346_pos, $I10)
-  # rx enumcharlist negate=0 
-    ge rx346_pos, rx346_eos, rx346_fail
-    sub $I10, rx346_pos, rx346_off
-    substr $S10, rx346_tgt, $I10, 1
-    index $I11, "bB", $S10
-    lt $I11, 0, rx346_fail
-    inc rx346_pos
-    set_addr $I10, rxcap_350_fail
-    ($I12, $I11) = rx346_cur."!mark_peek"($I10)
-    rx346_cur."!cursor_pos"($I11)
-    ($P10) = rx346_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx346_pos, "")
-    rx346_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_350_done
-  rxcap_350_fail:
-    goto rx346_fail
-  rxcap_350_done:
-  # rx pass
-    rx346_cur."!cursor_pass"(rx346_pos, "backslash:sym<b>")
-    if_null rx346_debug, debug_335
-    rx346_cur."!cursor_debug"("PASS", "backslash:sym<b>", " at pos=", rx346_pos)
-  debug_335:
-    .return (rx346_cur)
-  rx346_restart:
+    ne $I10, -1, rxscan350_done
+    goto rxscan350_scan
+  rxscan350_loop:
+    ($P10) = rx347_cur."from"()
+    inc $P10
+    set rx347_pos, $P10
+    ge rx347_pos, rx347_eos, rxscan350_done
+  rxscan350_scan:
+    set_addr $I10, rxscan350_loop
+    rx347_cur."!mark_push"(0, rx347_pos, $I10)
+  rxscan350_done:
+  alt351_0:
+.annotate 'line', 123
+    set_addr $I10, alt351_1
+    rx347_cur."!mark_push"(0, rx347_pos, $I10)
+.annotate 'line', 124
+  # rx literal  "$<"
+    add $I11, rx347_pos, 2
+    gt $I11, rx347_eos, rx347_fail
+    sub $I11, rx347_pos, rx347_off
+    substr $S10, rx347_tgt, $I11, 2
+    ne $S10, "$<", rx347_fail
+    add rx347_pos, 2
+  # rx subcapture "name"
+    set_addr $I10, rxcap_353_fail
+    rx347_cur."!mark_push"(0, rx347_pos, $I10)
+  # rx enumcharlist_q negate=1  r 1..-1
+    sub $I10, rx347_pos, rx347_off
+    set rx347_rep, 0
+    sub $I12, rx347_eos, rx347_pos
+  rxenumcharlistq352_loop:
+    le $I12, 0, rxenumcharlistq352_done
+    substr $S10, rx347_tgt, $I10, 1
+    index $I11, ">", $S10
+    ge $I11, 0, rxenumcharlistq352_done
+    inc rx347_rep
+    inc $I10
+    dec $I12
+    goto rxenumcharlistq352_loop
+  rxenumcharlistq352_done:
+    lt rx347_rep, 1, rx347_fail
+    add rx347_pos, rx347_pos, rx347_rep
+    set_addr $I10, rxcap_353_fail
+    ($I12, $I11) = rx347_cur."!mark_peek"($I10)
+    rx347_cur."!cursor_pos"($I11)
+    ($P10) = rx347_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx347_pos, "")
+    rx347_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("name")
+    goto rxcap_353_done
+  rxcap_353_fail:
+    goto rx347_fail
+  rxcap_353_done:
+  # rx literal  ">"
+    add $I11, rx347_pos, 1
+    gt $I11, rx347_eos, rx347_fail
+    sub $I11, rx347_pos, rx347_off
+    ord $I11, rx347_tgt, $I11
+    ne $I11, 62, rx347_fail
+    add rx347_pos, 1
+    goto alt351_end
+  alt351_1:
+.annotate 'line', 125
+  # rx literal  "$"
+    add $I11, rx347_pos, 1
+    gt $I11, rx347_eos, rx347_fail
+    sub $I11, rx347_pos, rx347_off
+    ord $I11, rx347_tgt, $I11
+    ne $I11, 36, rx347_fail
+    add rx347_pos, 1
+  # rx subcapture "pos"
+    set_addr $I10, rxcap_354_fail
+    rx347_cur."!mark_push"(0, rx347_pos, $I10)
+  # rx charclass_q d r 1..-1
+    sub $I10, rx347_pos, rx347_off
+    find_not_cclass $I11, 8, rx347_tgt, $I10, rx347_eos
+    add $I12, $I10, 1
+    lt $I11, $I12, rx347_fail
+    add rx347_pos, rx347_off, $I11
+    set_addr $I10, rxcap_354_fail
+    ($I12, $I11) = rx347_cur."!mark_peek"($I10)
+    rx347_cur."!cursor_pos"($I11)
+    ($P10) = rx347_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx347_pos, "")
+    rx347_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("pos")
+    goto rxcap_354_done
+  rxcap_354_fail:
+    goto rx347_fail
+  rxcap_354_done:
+  alt351_end:
+.annotate 'line', 128
+  # rx rxquantr355 ** 0..1
+    set_addr $I10, rxquantr355_done
+    rx347_cur."!mark_push"(0, rx347_pos, $I10)
+  rxquantr355_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx347_cur."!cursor_pos"(rx347_pos)
+    $P10 = rx347_cur."ws"()
+    unless $P10, rx347_fail
+    rx347_pos = $P10."pos"()
+  # rx literal  "="
+    add $I11, rx347_pos, 1
+    gt $I11, rx347_eos, rx347_fail
+    sub $I11, rx347_pos, rx347_off
+    ord $I11, rx347_tgt, $I11
+    ne $I11, 61, rx347_fail
+    add rx347_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx347_cur."!cursor_pos"(rx347_pos)
+    $P10 = rx347_cur."ws"()
+    unless $P10, rx347_fail
+    rx347_pos = $P10."pos"()
+  # rx subrule "quantified_atom" subtype=capture negate=
+    rx347_cur."!cursor_pos"(rx347_pos)
+    $P10 = rx347_cur."quantified_atom"()
+    unless $P10, rx347_fail
+    rx347_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quantified_atom")
+    rx347_pos = $P10."pos"()
+    set_addr $I10, rxquantr355_done
+    (rx347_rep) = rx347_cur."!mark_commit"($I10)
+  rxquantr355_done:
+.annotate 'line', 122
+  # rx pass
+    rx347_cur."!cursor_pass"(rx347_pos, "metachar:sym<var>")
+    if_null rx347_debug, debug_354
+    rx347_cur."!cursor_debug"("PASS", "metachar:sym<var>", " at pos=", rx347_pos)
+  debug_354:
+    .return (rx347_cur)
+  rx347_restart:
 .annotate 'line', 3
-    if_null rx346_debug, debug_336
-    rx346_cur."!cursor_debug"("NEXT", "backslash:sym<b>")
-  debug_336:
-  rx346_fail:
-    (rx346_rep, rx346_pos, $I10, $P10) = rx346_cur."!mark_fail"(0)
-    lt rx346_pos, -1, rx346_done
-    eq rx346_pos, -1, rx346_fail
-    jump $I10
-  rx346_done:
-    rx346_cur."!cursor_fail"()
-    if_null rx346_debug, debug_337
-    rx346_cur."!cursor_debug"("FAIL", "backslash:sym<b>")
-  debug_337:
-    .return (rx346_cur)
+    if_null rx347_debug, debug_355
+    rx347_cur."!cursor_debug"("NEXT", "metachar:sym<var>")
+  debug_355:
+  rx347_fail:
+    (rx347_rep, rx347_pos, $I10, $P10) = rx347_cur."!mark_fail"(0)
+    lt rx347_pos, -1, rx347_done
+    eq rx347_pos, -1, rx347_fail
+    jump $I10
+  rx347_done:
+    rx347_cur."!cursor_fail"()
+    if_null rx347_debug, debug_356
+    rx347_cur."!cursor_debug"("FAIL", "metachar:sym<var>")
+  debug_356:
+    .return (rx347_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<b>"  :subid("100_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<var>"  :subid("100_1284728471.30547") :method
 .annotate 'line', 3
-    new $P348, "ResizablePMCArray"
-    push $P348, "B"
-    push $P348, "b"
-    .return ($P348)
+    new $P349, "ResizablePMCArray"
+    push $P349, "$"
+    push $P349, "$<"
+    .return ($P349)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<e>"  :subid("101_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "metachar:sym<PIR>"  :subid("101_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx352_tgt
-    .local int rx352_pos
-    .local int rx352_off
-    .local int rx352_eos
-    .local int rx352_rep
-    .local pmc rx352_cur
-    .local pmc rx352_debug
-    (rx352_cur, rx352_pos, rx352_tgt, $I10) = self."!cursor_start"()
-    getattribute rx352_debug, rx352_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx352_cur
+    .local string rx357_tgt
+    .local int rx357_pos
+    .local int rx357_off
+    .local int rx357_eos
+    .local int rx357_rep
+    .local pmc rx357_cur
+    .local pmc rx357_debug
+    (rx357_cur, rx357_pos, rx357_tgt, $I10) = self."!cursor_start"()
+    getattribute rx357_debug, rx357_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx357_cur
     .local pmc match
     .lex "$/", match
-    length rx352_eos, rx352_tgt
-    gt rx352_pos, rx352_eos, rx352_done
-    set rx352_off, 0
-    lt rx352_pos, 2, rx352_start
-    sub rx352_off, rx352_pos, 1
-    substr rx352_tgt, rx352_tgt, rx352_off
-  rx352_start:
-    eq $I10, 1, rx352_restart
-    if_null rx352_debug, debug_338
-    rx352_cur."!cursor_debug"("START", "backslash:sym<e>")
-  debug_338:
+    length rx357_eos, rx357_tgt
+    gt rx357_pos, rx357_eos, rx357_done
+    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:
+    eq $I10, 1, rx357_restart
+    if_null rx357_debug, debug_357
+    rx357_cur."!cursor_debug"("START", "metachar:sym<PIR>")
+  debug_357:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan355_done
-    goto rxscan355_scan
-  rxscan355_loop:
-    ($P10) = rx352_cur."from"()
-    inc $P10
-    set rx352_pos, $P10
-    ge rx352_pos, rx352_eos, rxscan355_done
-  rxscan355_scan:
-    set_addr $I10, rxscan355_loop
-    rx352_cur."!mark_push"(0, rx352_pos, $I10)
-  rxscan355_done:
+    ne $I10, -1, rxscan360_done
+    goto rxscan360_scan
+  rxscan360_loop:
+    ($P10) = rx357_cur."from"()
+    inc $P10
+    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', 132
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_356_fail
-    rx352_cur."!mark_push"(0, rx352_pos, $I10)
-  # rx enumcharlist negate=0 
-    ge rx352_pos, rx352_eos, rx352_fail
-    sub $I10, rx352_pos, rx352_off
-    substr $S10, rx352_tgt, $I10, 1
-    index $I11, "eE", $S10
-    lt $I11, 0, rx352_fail
-    inc rx352_pos
-    set_addr $I10, rxcap_356_fail
-    ($I12, $I11) = rx352_cur."!mark_peek"($I10)
-    rx352_cur."!cursor_pos"($I11)
-    ($P10) = rx352_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx352_pos, "")
-    rx352_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_356_done
-  rxcap_356_fail:
-    goto rx352_fail
-  rxcap_356_done:
-  # rx pass
-    rx352_cur."!cursor_pass"(rx352_pos, "backslash:sym<e>")
-    if_null rx352_debug, debug_339
-    rx352_cur."!cursor_debug"("PASS", "backslash:sym<e>", " at pos=", rx352_pos)
-  debug_339:
-    .return (rx352_cur)
-  rx352_restart:
+  # rx literal  ":PIR{{"
+    add $I11, rx357_pos, 6
+    gt $I11, rx357_eos, rx357_fail
+    sub $I11, rx357_pos, rx357_off
+    substr $S10, rx357_tgt, $I11, 6
+    ne $S10, ":PIR{{", rx357_fail
+    add rx357_pos, 6
+  # rx subcapture "pir"
+    set_addr $I10, rxcap_363_fail
+    rx357_cur."!mark_push"(0, rx357_pos, $I10)
+  # rx rxquantf361 ** 0..*
+    set_addr $I10, rxquantf361_loop
+    rx357_cur."!mark_push"(0, rx357_pos, $I10)
+    goto rxquantf361_done
+  rxquantf361_loop:
+  # rx charclass .
+    ge rx357_pos, rx357_eos, rx357_fail
+    inc rx357_pos
+    set_addr $I10, rxquantf361_loop
+    rx357_cur."!mark_push"(rx357_rep, rx357_pos, $I10)
+  rxquantf361_done:
+    set_addr $I10, rxcap_363_fail
+    ($I12, $I11) = rx357_cur."!mark_peek"($I10)
+    rx357_cur."!cursor_pos"($I11)
+    ($P10) = rx357_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx357_pos, "")
+    rx357_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("pir")
+    goto rxcap_363_done
+  rxcap_363_fail:
+    goto rx357_fail
+  rxcap_363_done:
+  # rx literal  "}}"
+    add $I11, rx357_pos, 2
+    gt $I11, rx357_eos, rx357_fail
+    sub $I11, rx357_pos, rx357_off
+    substr $S10, rx357_tgt, $I11, 2
+    ne $S10, "}}", rx357_fail
+    add rx357_pos, 2
+.annotate 'line', 131
+  # rx pass
+    rx357_cur."!cursor_pass"(rx357_pos, "metachar:sym<PIR>")
+    if_null rx357_debug, debug_358
+    rx357_cur."!cursor_debug"("PASS", "metachar:sym<PIR>", " at pos=", rx357_pos)
+  debug_358:
+    .return (rx357_cur)
+  rx357_restart:
 .annotate 'line', 3
-    if_null rx352_debug, debug_340
-    rx352_cur."!cursor_debug"("NEXT", "backslash:sym<e>")
-  debug_340:
-  rx352_fail:
-    (rx352_rep, rx352_pos, $I10, $P10) = rx352_cur."!mark_fail"(0)
-    lt rx352_pos, -1, rx352_done
-    eq rx352_pos, -1, rx352_fail
-    jump $I10
-  rx352_done:
-    rx352_cur."!cursor_fail"()
-    if_null rx352_debug, debug_341
-    rx352_cur."!cursor_debug"("FAIL", "backslash:sym<e>")
-  debug_341:
-    .return (rx352_cur)
+    if_null rx357_debug, debug_359
+    rx357_cur."!cursor_debug"("NEXT", "metachar:sym<PIR>")
+  debug_359:
+  rx357_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
+  rx357_done:
+    rx357_cur."!cursor_fail"()
+    if_null rx357_debug, debug_360
+    rx357_cur."!cursor_debug"("FAIL", "metachar:sym<PIR>")
+  debug_360:
+    .return (rx357_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<e>"  :subid("102_1282323996.47527") :method
+.sub "!PREFIX__metachar:sym<PIR>"  :subid("102_1284728471.30547") :method
 .annotate 'line', 3
-    new $P354, "ResizablePMCArray"
-    push $P354, "E"
-    push $P354, "e"
-    .return ($P354)
+    new $P359, "ResizablePMCArray"
+    push $P359, ":PIR{{"
+    .return ($P359)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<f>"  :subid("103_1282323996.47527") :method :outer("11_1282323996.47527")
-.annotate 'line', 3
-    .local string rx358_tgt
-    .local int rx358_pos
-    .local int rx358_off
-    .local int rx358_eos
-    .local int rx358_rep
-    .local pmc rx358_cur
-    .local pmc rx358_debug
-    (rx358_cur, rx358_pos, rx358_tgt, $I10) = self."!cursor_start"()
-    getattribute rx358_debug, rx358_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx358_cur
-    .local pmc match
-    .lex "$/", match
-    length rx358_eos, rx358_tgt
-    gt rx358_pos, rx358_eos, rx358_done
-    set rx358_off, 0
-    lt rx358_pos, 2, rx358_start
-    sub rx358_off, rx358_pos, 1
-    substr rx358_tgt, rx358_tgt, rx358_off
-  rx358_start:
-    eq $I10, 1, rx358_restart
-    if_null rx358_debug, debug_342
-    rx358_cur."!cursor_debug"("START", "backslash:sym<f>")
-  debug_342:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan361_done
-    goto rxscan361_scan
-  rxscan361_loop:
-    ($P10) = rx358_cur."from"()
-    inc $P10
-    set rx358_pos, $P10
-    ge rx358_pos, rx358_eos, rxscan361_done
-  rxscan361_scan:
-    set_addr $I10, rxscan361_loop
-    rx358_cur."!mark_push"(0, rx358_pos, $I10)
-  rxscan361_done:
-.annotate 'line', 133
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_362_fail
-    rx358_cur."!mark_push"(0, rx358_pos, $I10)
-  # rx enumcharlist negate=0 
-    ge rx358_pos, rx358_eos, rx358_fail
-    sub $I10, rx358_pos, rx358_off
-    substr $S10, rx358_tgt, $I10, 1
-    index $I11, "fF", $S10
-    lt $I11, 0, rx358_fail
-    inc rx358_pos
-    set_addr $I10, rxcap_362_fail
-    ($I12, $I11) = rx358_cur."!mark_peek"($I10)
-    rx358_cur."!cursor_pos"($I11)
-    ($P10) = rx358_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx358_pos, "")
-    rx358_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_362_done
-  rxcap_362_fail:
-    goto rx358_fail
-  rxcap_362_done:
-  # rx pass
-    rx358_cur."!cursor_pass"(rx358_pos, "backslash:sym<f>")
-    if_null rx358_debug, debug_343
-    rx358_cur."!cursor_debug"("PASS", "backslash:sym<f>", " at pos=", rx358_pos)
-  debug_343:
-    .return (rx358_cur)
-  rx358_restart:
-.annotate 'line', 3
-    if_null rx358_debug, debug_344
-    rx358_cur."!cursor_debug"("NEXT", "backslash:sym<f>")
-  debug_344:
-  rx358_fail:
-    (rx358_rep, rx358_pos, $I10, $P10) = rx358_cur."!mark_fail"(0)
-    lt rx358_pos, -1, rx358_done
-    eq rx358_pos, -1, rx358_fail
-    jump $I10
-  rx358_done:
-    rx358_cur."!cursor_fail"()
-    if_null rx358_debug, debug_345
-    rx358_cur."!cursor_debug"("FAIL", "backslash:sym<f>")
-  debug_345:
-    .return (rx358_cur)
-    .return ()
+.sub "backslash"  :subid("103_1284728471.30547") :method
+.annotate 'line', 135
+    $P365 = self."!protoregex"("backslash")
+    .return ($P365)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<f>"  :subid("104_1282323996.47527") :method
-.annotate 'line', 3
-    new $P360, "ResizablePMCArray"
-    push $P360, "F"
-    push $P360, "f"
-    .return ($P360)
+.sub "!PREFIX__backslash"  :subid("104_1284728471.30547") :method
+.annotate 'line', 135
+    $P367 = self."!PREFIX__!protoregex"("backslash")
+    .return ($P367)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<h>"  :subid("105_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "backslash:sym<w>"  :subid("105_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx364_tgt
-    .local int rx364_pos
-    .local int rx364_off
-    .local int rx364_eos
-    .local int rx364_rep
-    .local pmc rx364_cur
-    .local pmc rx364_debug
-    (rx364_cur, rx364_pos, rx364_tgt, $I10) = self."!cursor_start"()
-    getattribute rx364_debug, rx364_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx364_cur
-    .local pmc match
-    .lex "$/", match
-    length rx364_eos, rx364_tgt
-    gt rx364_pos, rx364_eos, rx364_done
-    set rx364_off, 0
-    lt rx364_pos, 2, rx364_start
-    sub rx364_off, rx364_pos, 1
-    substr rx364_tgt, rx364_tgt, rx364_off
-  rx364_start:
-    eq $I10, 1, rx364_restart
-    if_null rx364_debug, debug_346
-    rx364_cur."!cursor_debug"("START", "backslash:sym<h>")
-  debug_346:
+    .local string rx369_tgt
+    .local int rx369_pos
+    .local int rx369_off
+    .local int rx369_eos
+    .local int rx369_rep
+    .local pmc rx369_cur
+    .local pmc rx369_debug
+    (rx369_cur, rx369_pos, rx369_tgt, $I10) = self."!cursor_start"()
+    getattribute rx369_debug, rx369_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx369_cur
+    .local pmc match
+    .lex "$/", match
+    length rx369_eos, rx369_tgt
+    gt rx369_pos, rx369_eos, rx369_done
+    set rx369_off, 0
+    lt rx369_pos, 2, rx369_start
+    sub rx369_off, rx369_pos, 1
+    substr rx369_tgt, rx369_tgt, rx369_off
+  rx369_start:
+    eq $I10, 1, rx369_restart
+    if_null rx369_debug, debug_361
+    rx369_cur."!cursor_debug"("START", "backslash:sym<w>")
+  debug_361:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan367_done
-    goto rxscan367_scan
-  rxscan367_loop:
-    ($P10) = rx364_cur."from"()
-    inc $P10
-    set rx364_pos, $P10
-    ge rx364_pos, rx364_eos, rxscan367_done
-  rxscan367_scan:
-    set_addr $I10, rxscan367_loop
-    rx364_cur."!mark_push"(0, rx364_pos, $I10)
-  rxscan367_done:
-.annotate 'line', 134
+    ne $I10, -1, rxscan372_done
+    goto rxscan372_scan
+  rxscan372_loop:
+    ($P10) = rx369_cur."from"()
+    inc $P10
+    set rx369_pos, $P10
+    ge rx369_pos, rx369_eos, rxscan372_done
+  rxscan372_scan:
+    set_addr $I10, rxscan372_loop
+    rx369_cur."!mark_push"(0, rx369_pos, $I10)
+  rxscan372_done:
+.annotate 'line', 136
   # rx subcapture "sym"
-    set_addr $I10, rxcap_368_fail
-    rx364_cur."!mark_push"(0, rx364_pos, $I10)
+    set_addr $I10, rxcap_373_fail
+    rx369_cur."!mark_push"(0, rx369_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx364_pos, rx364_eos, rx364_fail
-    sub $I10, rx364_pos, rx364_off
-    substr $S10, rx364_tgt, $I10, 1
-    index $I11, "hH", $S10
-    lt $I11, 0, rx364_fail
-    inc rx364_pos
-    set_addr $I10, rxcap_368_fail
-    ($I12, $I11) = rx364_cur."!mark_peek"($I10)
-    rx364_cur."!cursor_pos"($I11)
-    ($P10) = rx364_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx364_pos, "")
-    rx364_cur."!mark_push"(0, -1, 0, $P10)
+    ge rx369_pos, rx369_eos, rx369_fail
+    sub $I10, rx369_pos, rx369_off
+    substr $S10, rx369_tgt, $I10, 1
+    index $I11, "dswnDSWN", $S10
+    lt $I11, 0, rx369_fail
+    inc rx369_pos
+    set_addr $I10, rxcap_373_fail
+    ($I12, $I11) = rx369_cur."!mark_peek"($I10)
+    rx369_cur."!cursor_pos"($I11)
+    ($P10) = rx369_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx369_pos, "")
+    rx369_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 pass
-    rx364_cur."!cursor_pass"(rx364_pos, "backslash:sym<h>")
-    if_null rx364_debug, debug_347
-    rx364_cur."!cursor_debug"("PASS", "backslash:sym<h>", " at pos=", rx364_pos)
-  debug_347:
-    .return (rx364_cur)
-  rx364_restart:
+    goto rxcap_373_done
+  rxcap_373_fail:
+    goto rx369_fail
+  rxcap_373_done:
+  # rx pass
+    rx369_cur."!cursor_pass"(rx369_pos, "backslash:sym<w>")
+    if_null rx369_debug, debug_362
+    rx369_cur."!cursor_debug"("PASS", "backslash:sym<w>", " at pos=", rx369_pos)
+  debug_362:
+    .return (rx369_cur)
+  rx369_restart:
 .annotate 'line', 3
-    if_null rx364_debug, debug_348
-    rx364_cur."!cursor_debug"("NEXT", "backslash:sym<h>")
-  debug_348:
-  rx364_fail:
-    (rx364_rep, rx364_pos, $I10, $P10) = rx364_cur."!mark_fail"(0)
-    lt rx364_pos, -1, rx364_done
-    eq rx364_pos, -1, rx364_fail
-    jump $I10
-  rx364_done:
-    rx364_cur."!cursor_fail"()
-    if_null rx364_debug, debug_349
-    rx364_cur."!cursor_debug"("FAIL", "backslash:sym<h>")
-  debug_349:
-    .return (rx364_cur)
+    if_null rx369_debug, debug_363
+    rx369_cur."!cursor_debug"("NEXT", "backslash:sym<w>")
+  debug_363:
+  rx369_fail:
+    (rx369_rep, rx369_pos, $I10, $P10) = rx369_cur."!mark_fail"(0)
+    lt rx369_pos, -1, rx369_done
+    eq rx369_pos, -1, rx369_fail
+    jump $I10
+  rx369_done:
+    rx369_cur."!cursor_fail"()
+    if_null rx369_debug, debug_364
+    rx369_cur."!cursor_debug"("FAIL", "backslash:sym<w>")
+  debug_364:
+    .return (rx369_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<h>"  :subid("106_1282323996.47527") :method
+.sub "!PREFIX__backslash:sym<w>"  :subid("106_1284728471.30547") :method
 .annotate 'line', 3
-    new $P366, "ResizablePMCArray"
-    push $P366, "H"
-    push $P366, "h"
-    .return ($P366)
+    new $P371, "ResizablePMCArray"
+    push $P371, "N"
+    push $P371, "W"
+    push $P371, "S"
+    push $P371, "D"
+    push $P371, "n"
+    push $P371, "w"
+    push $P371, "s"
+    push $P371, "d"
+    .return ($P371)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<r>"  :subid("107_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "backslash:sym<b>"  :subid("107_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx370_tgt
-    .local int rx370_pos
-    .local int rx370_off
-    .local int rx370_eos
-    .local int rx370_rep
-    .local pmc rx370_cur
-    .local pmc rx370_debug
-    (rx370_cur, rx370_pos, rx370_tgt, $I10) = self."!cursor_start"()
-    getattribute rx370_debug, rx370_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx370_cur
+    .local string rx375_tgt
+    .local int rx375_pos
+    .local int rx375_off
+    .local int rx375_eos
+    .local int rx375_rep
+    .local pmc rx375_cur
+    .local pmc rx375_debug
+    (rx375_cur, rx375_pos, rx375_tgt, $I10) = self."!cursor_start"()
+    getattribute rx375_debug, rx375_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx375_cur
     .local pmc match
     .lex "$/", match
-    length rx370_eos, rx370_tgt
-    gt rx370_pos, rx370_eos, rx370_done
-    set rx370_off, 0
-    lt rx370_pos, 2, rx370_start
-    sub rx370_off, rx370_pos, 1
-    substr rx370_tgt, rx370_tgt, rx370_off
-  rx370_start:
-    eq $I10, 1, rx370_restart
-    if_null rx370_debug, debug_350
-    rx370_cur."!cursor_debug"("START", "backslash:sym<r>")
-  debug_350:
+    length rx375_eos, rx375_tgt
+    gt rx375_pos, rx375_eos, rx375_done
+    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:
+    eq $I10, 1, rx375_restart
+    if_null rx375_debug, debug_365
+    rx375_cur."!cursor_debug"("START", "backslash:sym<b>")
+  debug_365:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan373_done
-    goto rxscan373_scan
-  rxscan373_loop:
-    ($P10) = rx370_cur."from"()
-    inc $P10
-    set rx370_pos, $P10
-    ge rx370_pos, rx370_eos, rxscan373_done
-  rxscan373_scan:
-    set_addr $I10, rxscan373_loop
-    rx370_cur."!mark_push"(0, rx370_pos, $I10)
-  rxscan373_done:
-.annotate 'line', 135
+    ne $I10, -1, rxscan378_done
+    goto rxscan378_scan
+  rxscan378_loop:
+    ($P10) = rx375_cur."from"()
+    inc $P10
+    set rx375_pos, $P10
+    ge rx375_pos, rx375_eos, rxscan378_done
+  rxscan378_scan:
+    set_addr $I10, rxscan378_loop
+    rx375_cur."!mark_push"(0, rx375_pos, $I10)
+  rxscan378_done:
+.annotate 'line', 137
   # rx subcapture "sym"
-    set_addr $I10, rxcap_374_fail
-    rx370_cur."!mark_push"(0, rx370_pos, $I10)
+    set_addr $I10, rxcap_379_fail
+    rx375_cur."!mark_push"(0, rx375_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx370_pos, rx370_eos, rx370_fail
-    sub $I10, rx370_pos, rx370_off
-    substr $S10, rx370_tgt, $I10, 1
-    index $I11, "rR", $S10
-    lt $I11, 0, rx370_fail
-    inc rx370_pos
-    set_addr $I10, rxcap_374_fail
-    ($I12, $I11) = rx370_cur."!mark_peek"($I10)
-    rx370_cur."!cursor_pos"($I11)
-    ($P10) = rx370_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx370_pos, "")
-    rx370_cur."!mark_push"(0, -1, 0, $P10)
+    ge rx375_pos, rx375_eos, rx375_fail
+    sub $I10, rx375_pos, rx375_off
+    substr $S10, rx375_tgt, $I10, 1
+    index $I11, "bB", $S10
+    lt $I11, 0, rx375_fail
+    inc rx375_pos
+    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_374_done
-  rxcap_374_fail:
-    goto rx370_fail
-  rxcap_374_done:
-  # rx pass
-    rx370_cur."!cursor_pass"(rx370_pos, "backslash:sym<r>")
-    if_null rx370_debug, debug_351
-    rx370_cur."!cursor_debug"("PASS", "backslash:sym<r>", " at pos=", rx370_pos)
-  debug_351:
-    .return (rx370_cur)
-  rx370_restart:
+    goto rxcap_379_done
+  rxcap_379_fail:
+    goto rx375_fail
+  rxcap_379_done:
+  # rx pass
+    rx375_cur."!cursor_pass"(rx375_pos, "backslash:sym<b>")
+    if_null rx375_debug, debug_366
+    rx375_cur."!cursor_debug"("PASS", "backslash:sym<b>", " at pos=", rx375_pos)
+  debug_366:
+    .return (rx375_cur)
+  rx375_restart:
 .annotate 'line', 3
-    if_null rx370_debug, debug_352
-    rx370_cur."!cursor_debug"("NEXT", "backslash:sym<r>")
-  debug_352:
-  rx370_fail:
-    (rx370_rep, rx370_pos, $I10, $P10) = rx370_cur."!mark_fail"(0)
-    lt rx370_pos, -1, rx370_done
-    eq rx370_pos, -1, rx370_fail
-    jump $I10
-  rx370_done:
-    rx370_cur."!cursor_fail"()
-    if_null rx370_debug, debug_353
-    rx370_cur."!cursor_debug"("FAIL", "backslash:sym<r>")
-  debug_353:
-    .return (rx370_cur)
+    if_null rx375_debug, debug_367
+    rx375_cur."!cursor_debug"("NEXT", "backslash:sym<b>")
+  debug_367:
+  rx375_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
+  rx375_done:
+    rx375_cur."!cursor_fail"()
+    if_null rx375_debug, debug_368
+    rx375_cur."!cursor_debug"("FAIL", "backslash:sym<b>")
+  debug_368:
+    .return (rx375_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<r>"  :subid("108_1282323996.47527") :method
+.sub "!PREFIX__backslash:sym<b>"  :subid("108_1284728471.30547") :method
 .annotate 'line', 3
-    new $P372, "ResizablePMCArray"
-    push $P372, "R"
-    push $P372, "r"
-    .return ($P372)
+    new $P377, "ResizablePMCArray"
+    push $P377, "B"
+    push $P377, "b"
+    .return ($P377)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<t>"  :subid("109_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "backslash:sym<e>"  :subid("109_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx376_tgt
-    .local int rx376_pos
-    .local int rx376_off
-    .local int rx376_eos
-    .local int rx376_rep
-    .local pmc rx376_cur
-    .local pmc rx376_debug
-    (rx376_cur, rx376_pos, rx376_tgt, $I10) = self."!cursor_start"()
-    getattribute rx376_debug, rx376_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx376_cur
+    .local string rx381_tgt
+    .local int rx381_pos
+    .local int rx381_off
+    .local int rx381_eos
+    .local int rx381_rep
+    .local pmc rx381_cur
+    .local pmc rx381_debug
+    (rx381_cur, rx381_pos, rx381_tgt, $I10) = self."!cursor_start"()
+    getattribute rx381_debug, rx381_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx381_cur
     .local pmc match
     .lex "$/", match
-    length rx376_eos, rx376_tgt
-    gt rx376_pos, rx376_eos, rx376_done
-    set rx376_off, 0
-    lt rx376_pos, 2, rx376_start
-    sub rx376_off, rx376_pos, 1
-    substr rx376_tgt, rx376_tgt, rx376_off
-  rx376_start:
-    eq $I10, 1, rx376_restart
-    if_null rx376_debug, debug_354
-    rx376_cur."!cursor_debug"("START", "backslash:sym<t>")
-  debug_354:
+    length rx381_eos, rx381_tgt
+    gt rx381_pos, rx381_eos, rx381_done
+    set rx381_off, 0
+    lt rx381_pos, 2, rx381_start
+    sub rx381_off, rx381_pos, 1
+    substr rx381_tgt, rx381_tgt, rx381_off
+  rx381_start:
+    eq $I10, 1, rx381_restart
+    if_null rx381_debug, debug_369
+    rx381_cur."!cursor_debug"("START", "backslash:sym<e>")
+  debug_369:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan379_done
-    goto rxscan379_scan
-  rxscan379_loop:
-    ($P10) = rx376_cur."from"()
-    inc $P10
-    set rx376_pos, $P10
-    ge rx376_pos, rx376_eos, rxscan379_done
-  rxscan379_scan:
-    set_addr $I10, rxscan379_loop
-    rx376_cur."!mark_push"(0, rx376_pos, $I10)
-  rxscan379_done:
-.annotate 'line', 136
+    ne $I10, -1, rxscan384_done
+    goto rxscan384_scan
+  rxscan384_loop:
+    ($P10) = rx381_cur."from"()
+    inc $P10
+    set rx381_pos, $P10
+    ge rx381_pos, rx381_eos, rxscan384_done
+  rxscan384_scan:
+    set_addr $I10, rxscan384_loop
+    rx381_cur."!mark_push"(0, rx381_pos, $I10)
+  rxscan384_done:
+.annotate 'line', 138
   # rx subcapture "sym"
-    set_addr $I10, rxcap_380_fail
-    rx376_cur."!mark_push"(0, rx376_pos, $I10)
+    set_addr $I10, rxcap_385_fail
+    rx381_cur."!mark_push"(0, rx381_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx376_pos, rx376_eos, rx376_fail
-    sub $I10, rx376_pos, rx376_off
-    substr $S10, rx376_tgt, $I10, 1
-    index $I11, "tT", $S10
-    lt $I11, 0, rx376_fail
-    inc rx376_pos
-    set_addr $I10, rxcap_380_fail
-    ($I12, $I11) = rx376_cur."!mark_peek"($I10)
-    rx376_cur."!cursor_pos"($I11)
-    ($P10) = rx376_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx376_pos, "")
-    rx376_cur."!mark_push"(0, -1, 0, $P10)
+    ge rx381_pos, rx381_eos, rx381_fail
+    sub $I10, rx381_pos, rx381_off
+    substr $S10, rx381_tgt, $I10, 1
+    index $I11, "eE", $S10
+    lt $I11, 0, rx381_fail
+    inc rx381_pos
+    set_addr $I10, rxcap_385_fail
+    ($I12, $I11) = rx381_cur."!mark_peek"($I10)
+    rx381_cur."!cursor_pos"($I11)
+    ($P10) = rx381_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx381_pos, "")
+    rx381_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_380_done
-  rxcap_380_fail:
-    goto rx376_fail
-  rxcap_380_done:
-  # rx pass
-    rx376_cur."!cursor_pass"(rx376_pos, "backslash:sym<t>")
-    if_null rx376_debug, debug_355
-    rx376_cur."!cursor_debug"("PASS", "backslash:sym<t>", " at pos=", rx376_pos)
-  debug_355:
-    .return (rx376_cur)
-  rx376_restart:
+    goto rxcap_385_done
+  rxcap_385_fail:
+    goto rx381_fail
+  rxcap_385_done:
+  # rx pass
+    rx381_cur."!cursor_pass"(rx381_pos, "backslash:sym<e>")
+    if_null rx381_debug, debug_370
+    rx381_cur."!cursor_debug"("PASS", "backslash:sym<e>", " at pos=", rx381_pos)
+  debug_370:
+    .return (rx381_cur)
+  rx381_restart:
 .annotate 'line', 3
-    if_null rx376_debug, debug_356
-    rx376_cur."!cursor_debug"("NEXT", "backslash:sym<t>")
-  debug_356:
-  rx376_fail:
-    (rx376_rep, rx376_pos, $I10, $P10) = rx376_cur."!mark_fail"(0)
-    lt rx376_pos, -1, rx376_done
-    eq rx376_pos, -1, rx376_fail
-    jump $I10
-  rx376_done:
-    rx376_cur."!cursor_fail"()
-    if_null rx376_debug, debug_357
-    rx376_cur."!cursor_debug"("FAIL", "backslash:sym<t>")
-  debug_357:
-    .return (rx376_cur)
+    if_null rx381_debug, debug_371
+    rx381_cur."!cursor_debug"("NEXT", "backslash:sym<e>")
+  debug_371:
+  rx381_fail:
+    (rx381_rep, rx381_pos, $I10, $P10) = rx381_cur."!mark_fail"(0)
+    lt rx381_pos, -1, rx381_done
+    eq rx381_pos, -1, rx381_fail
+    jump $I10
+  rx381_done:
+    rx381_cur."!cursor_fail"()
+    if_null rx381_debug, debug_372
+    rx381_cur."!cursor_debug"("FAIL", "backslash:sym<e>")
+  debug_372:
+    .return (rx381_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<t>"  :subid("110_1282323996.47527") :method
+.sub "!PREFIX__backslash:sym<e>"  :subid("110_1284728471.30547") :method
 .annotate 'line', 3
-    new $P378, "ResizablePMCArray"
-    push $P378, "T"
-    push $P378, "t"
-    .return ($P378)
+    new $P383, "ResizablePMCArray"
+    push $P383, "E"
+    push $P383, "e"
+    .return ($P383)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<v>"  :subid("111_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "backslash:sym<f>"  :subid("111_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx382_tgt
-    .local int rx382_pos
-    .local int rx382_off
-    .local int rx382_eos
-    .local int rx382_rep
-    .local pmc rx382_cur
-    .local pmc rx382_debug
-    (rx382_cur, rx382_pos, rx382_tgt, $I10) = self."!cursor_start"()
-    getattribute rx382_debug, rx382_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx382_cur
+    .local string rx387_tgt
+    .local int rx387_pos
+    .local int rx387_off
+    .local int rx387_eos
+    .local int rx387_rep
+    .local pmc rx387_cur
+    .local pmc rx387_debug
+    (rx387_cur, rx387_pos, rx387_tgt, $I10) = self."!cursor_start"()
+    getattribute rx387_debug, rx387_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx387_cur
     .local pmc match
     .lex "$/", match
-    length rx382_eos, rx382_tgt
-    gt rx382_pos, rx382_eos, rx382_done
-    set rx382_off, 0
-    lt rx382_pos, 2, rx382_start
-    sub rx382_off, rx382_pos, 1
-    substr rx382_tgt, rx382_tgt, rx382_off
-  rx382_start:
-    eq $I10, 1, rx382_restart
-    if_null rx382_debug, debug_358
-    rx382_cur."!cursor_debug"("START", "backslash:sym<v>")
-  debug_358:
+    length rx387_eos, rx387_tgt
+    gt rx387_pos, rx387_eos, rx387_done
+    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:
+    eq $I10, 1, rx387_restart
+    if_null rx387_debug, debug_373
+    rx387_cur."!cursor_debug"("START", "backslash:sym<f>")
+  debug_373:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan385_done
-    goto rxscan385_scan
-  rxscan385_loop:
-    ($P10) = rx382_cur."from"()
-    inc $P10
-    set rx382_pos, $P10
-    ge rx382_pos, rx382_eos, rxscan385_done
-  rxscan385_scan:
-    set_addr $I10, rxscan385_loop
-    rx382_cur."!mark_push"(0, rx382_pos, $I10)
-  rxscan385_done:
-.annotate 'line', 137
+    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', 139
   # rx subcapture "sym"
-    set_addr $I10, rxcap_386_fail
-    rx382_cur."!mark_push"(0, rx382_pos, $I10)
+    set_addr $I10, rxcap_391_fail
+    rx387_cur."!mark_push"(0, rx387_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx382_pos, rx382_eos, rx382_fail
-    sub $I10, rx382_pos, rx382_off
-    substr $S10, rx382_tgt, $I10, 1
-    index $I11, "vV", $S10
-    lt $I11, 0, rx382_fail
-    inc rx382_pos
-    set_addr $I10, rxcap_386_fail
-    ($I12, $I11) = rx382_cur."!mark_peek"($I10)
-    rx382_cur."!cursor_pos"($I11)
-    ($P10) = rx382_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx382_pos, "")
-    rx382_cur."!mark_push"(0, -1, 0, $P10)
+    ge rx387_pos, rx387_eos, rx387_fail
+    sub $I10, rx387_pos, rx387_off
+    substr $S10, rx387_tgt, $I10, 1
+    index $I11, "fF", $S10
+    lt $I11, 0, rx387_fail
+    inc rx387_pos
+    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_386_done
-  rxcap_386_fail:
-    goto rx382_fail
-  rxcap_386_done:
-  # rx pass
-    rx382_cur."!cursor_pass"(rx382_pos, "backslash:sym<v>")
-    if_null rx382_debug, debug_359
-    rx382_cur."!cursor_debug"("PASS", "backslash:sym<v>", " at pos=", rx382_pos)
-  debug_359:
-    .return (rx382_cur)
-  rx382_restart:
+    goto rxcap_391_done
+  rxcap_391_fail:
+    goto rx387_fail
+  rxcap_391_done:
+  # rx pass
+    rx387_cur."!cursor_pass"(rx387_pos, "backslash:sym<f>")
+    if_null rx387_debug, debug_374
+    rx387_cur."!cursor_debug"("PASS", "backslash:sym<f>", " at pos=", rx387_pos)
+  debug_374:
+    .return (rx387_cur)
+  rx387_restart:
 .annotate 'line', 3
-    if_null rx382_debug, debug_360
-    rx382_cur."!cursor_debug"("NEXT", "backslash:sym<v>")
-  debug_360:
-  rx382_fail:
-    (rx382_rep, rx382_pos, $I10, $P10) = rx382_cur."!mark_fail"(0)
-    lt rx382_pos, -1, rx382_done
-    eq rx382_pos, -1, rx382_fail
-    jump $I10
-  rx382_done:
-    rx382_cur."!cursor_fail"()
-    if_null rx382_debug, debug_361
-    rx382_cur."!cursor_debug"("FAIL", "backslash:sym<v>")
-  debug_361:
-    .return (rx382_cur)
+    if_null rx387_debug, debug_375
+    rx387_cur."!cursor_debug"("NEXT", "backslash:sym<f>")
+  debug_375:
+  rx387_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
+  rx387_done:
+    rx387_cur."!cursor_fail"()
+    if_null rx387_debug, debug_376
+    rx387_cur."!cursor_debug"("FAIL", "backslash:sym<f>")
+  debug_376:
+    .return (rx387_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<v>"  :subid("112_1282323996.47527") :method
+.sub "!PREFIX__backslash:sym<f>"  :subid("112_1284728471.30547") :method
 .annotate 'line', 3
-    new $P384, "ResizablePMCArray"
-    push $P384, "V"
-    push $P384, "v"
-    .return ($P384)
+    new $P389, "ResizablePMCArray"
+    push $P389, "F"
+    push $P389, "f"
+    .return ($P389)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<o>"  :subid("113_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "backslash:sym<h>"  :subid("113_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx388_tgt
-    .local int rx388_pos
-    .local int rx388_off
-    .local int rx388_eos
-    .local int rx388_rep
-    .local pmc rx388_cur
-    .local pmc rx388_debug
-    (rx388_cur, rx388_pos, rx388_tgt, $I10) = self."!cursor_start"()
-    getattribute rx388_debug, rx388_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx388_cur
+    .local string rx393_tgt
+    .local int rx393_pos
+    .local int rx393_off
+    .local int rx393_eos
+    .local int rx393_rep
+    .local pmc rx393_cur
+    .local pmc rx393_debug
+    (rx393_cur, rx393_pos, rx393_tgt, $I10) = self."!cursor_start"()
+    getattribute rx393_debug, rx393_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx393_cur
     .local pmc match
     .lex "$/", match
-    length rx388_eos, rx388_tgt
-    gt rx388_pos, rx388_eos, rx388_done
-    set rx388_off, 0
-    lt rx388_pos, 2, rx388_start
-    sub rx388_off, rx388_pos, 1
-    substr rx388_tgt, rx388_tgt, rx388_off
-  rx388_start:
-    eq $I10, 1, rx388_restart
-    if_null rx388_debug, debug_362
-    rx388_cur."!cursor_debug"("START", "backslash:sym<o>")
-  debug_362:
+    length rx393_eos, rx393_tgt
+    gt rx393_pos, rx393_eos, rx393_done
+    set rx393_off, 0
+    lt rx393_pos, 2, rx393_start
+    sub rx393_off, rx393_pos, 1
+    substr rx393_tgt, rx393_tgt, rx393_off
+  rx393_start:
+    eq $I10, 1, rx393_restart
+    if_null rx393_debug, debug_377
+    rx393_cur."!cursor_debug"("START", "backslash:sym<h>")
+  debug_377:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan395_done
-    goto rxscan395_scan
-  rxscan395_loop:
-    ($P10) = rx388_cur."from"()
-    inc $P10
-    set rx388_pos, $P10
-    ge rx388_pos, rx388_eos, rxscan395_done
-  rxscan395_scan:
-    set_addr $I10, rxscan395_loop
-    rx388_cur."!mark_push"(0, rx388_pos, $I10)
-  rxscan395_done:
-.annotate 'line', 138
+    ne $I10, -1, rxscan396_done
+    goto rxscan396_scan
+  rxscan396_loop:
+    ($P10) = rx393_cur."from"()
+    inc $P10
+    set rx393_pos, $P10
+    ge rx393_pos, rx393_eos, rxscan396_done
+  rxscan396_scan:
+    set_addr $I10, rxscan396_loop
+    rx393_cur."!mark_push"(0, rx393_pos, $I10)
+  rxscan396_done:
+.annotate 'line', 140
   # rx subcapture "sym"
-    set_addr $I10, rxcap_396_fail
-    rx388_cur."!mark_push"(0, rx388_pos, $I10)
+    set_addr $I10, rxcap_397_fail
+    rx393_cur."!mark_push"(0, rx393_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx388_pos, rx388_eos, rx388_fail
-    sub $I10, rx388_pos, rx388_off
-    substr $S10, rx388_tgt, $I10, 1
-    index $I11, "oO", $S10
-    lt $I11, 0, rx388_fail
-    inc rx388_pos
-    set_addr $I10, rxcap_396_fail
-    ($I12, $I11) = rx388_cur."!mark_peek"($I10)
-    rx388_cur."!cursor_pos"($I11)
-    ($P10) = rx388_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx388_pos, "")
-    rx388_cur."!mark_push"(0, -1, 0, $P10)
+    ge rx393_pos, rx393_eos, rx393_fail
+    sub $I10, rx393_pos, rx393_off
+    substr $S10, rx393_tgt, $I10, 1
+    index $I11, "hH", $S10
+    lt $I11, 0, rx393_fail
+    inc rx393_pos
+    set_addr $I10, rxcap_397_fail
+    ($I12, $I11) = rx393_cur."!mark_peek"($I10)
+    rx393_cur."!cursor_pos"($I11)
+    ($P10) = rx393_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx393_pos, "")
+    rx393_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_396_done
-  rxcap_396_fail:
-    goto rx388_fail
-  rxcap_396_done:
-  alt397_0:
-    set_addr $I10, alt397_1
-    rx388_cur."!mark_push"(0, rx388_pos, $I10)
-  # rx subrule "octint" subtype=capture negate=
-    rx388_cur."!cursor_pos"(rx388_pos)
-    $P10 = rx388_cur."octint"()
-    unless $P10, rx388_fail
-    rx388_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("octint")
-    rx388_pos = $P10."pos"()
-    goto alt397_end
-  alt397_1:
-  # rx literal  "["
-    add $I11, rx388_pos, 1
-    gt $I11, rx388_eos, rx388_fail
-    sub $I11, rx388_pos, rx388_off
-    ord $I11, rx388_tgt, $I11
-    ne $I11, 91, rx388_fail
-    add rx388_pos, 1
-  # rx subrule "octints" subtype=capture negate=
-    rx388_cur."!cursor_pos"(rx388_pos)
-    $P10 = rx388_cur."octints"()
-    unless $P10, rx388_fail
-    rx388_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("octints")
-    rx388_pos = $P10."pos"()
-  # rx literal  "]"
-    add $I11, rx388_pos, 1
-    gt $I11, rx388_eos, rx388_fail
-    sub $I11, rx388_pos, rx388_off
-    ord $I11, rx388_tgt, $I11
-    ne $I11, 93, rx388_fail
-    add rx388_pos, 1
-  alt397_end:
-  # rx pass
-    rx388_cur."!cursor_pass"(rx388_pos, "backslash:sym<o>")
-    if_null rx388_debug, debug_363
-    rx388_cur."!cursor_debug"("PASS", "backslash:sym<o>", " at pos=", rx388_pos)
-  debug_363:
-    .return (rx388_cur)
-  rx388_restart:
+    goto rxcap_397_done
+  rxcap_397_fail:
+    goto rx393_fail
+  rxcap_397_done:
+  # rx pass
+    rx393_cur."!cursor_pass"(rx393_pos, "backslash:sym<h>")
+    if_null rx393_debug, debug_378
+    rx393_cur."!cursor_debug"("PASS", "backslash:sym<h>", " at pos=", rx393_pos)
+  debug_378:
+    .return (rx393_cur)
+  rx393_restart:
 .annotate 'line', 3
-    if_null rx388_debug, debug_364
-    rx388_cur."!cursor_debug"("NEXT", "backslash:sym<o>")
-  debug_364:
-  rx388_fail:
-    (rx388_rep, rx388_pos, $I10, $P10) = rx388_cur."!mark_fail"(0)
-    lt rx388_pos, -1, rx388_done
-    eq rx388_pos, -1, rx388_fail
-    jump $I10
-  rx388_done:
-    rx388_cur."!cursor_fail"()
-    if_null rx388_debug, debug_365
-    rx388_cur."!cursor_debug"("FAIL", "backslash:sym<o>")
-  debug_365:
-    .return (rx388_cur)
+    if_null rx393_debug, debug_379
+    rx393_cur."!cursor_debug"("NEXT", "backslash:sym<h>")
+  debug_379:
+  rx393_fail:
+    (rx393_rep, rx393_pos, $I10, $P10) = rx393_cur."!mark_fail"(0)
+    lt rx393_pos, -1, rx393_done
+    eq rx393_pos, -1, rx393_fail
+    jump $I10
+  rx393_done:
+    rx393_cur."!cursor_fail"()
+    if_null rx393_debug, debug_380
+    rx393_cur."!cursor_debug"("FAIL", "backslash:sym<h>")
+  debug_380:
+    .return (rx393_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<o>"  :subid("114_1282323996.47527") :method
+.sub "!PREFIX__backslash:sym<h>"  :subid("114_1284728471.30547") :method
 .annotate 'line', 3
-    $P390 = self."!PREFIX__!subrule"("octints", "O[")
-    $P391 = self."!PREFIX__!subrule"("octint", "O")
-    $P392 = self."!PREFIX__!subrule"("octints", "o[")
-    $P393 = self."!PREFIX__!subrule"("octint", "o")
-    new $P394, "ResizablePMCArray"
-    push $P394, $P390
-    push $P394, $P391
-    push $P394, $P392
-    push $P394, $P393
-    .return ($P394)
+    new $P395, "ResizablePMCArray"
+    push $P395, "H"
+    push $P395, "h"
+    .return ($P395)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<x>"  :subid("115_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "backslash:sym<r>"  :subid("115_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
     .local string rx399_tgt
     .local int rx399_pos
@@ -5771,88 +5794,54 @@
     substr rx399_tgt, rx399_tgt, rx399_off
   rx399_start:
     eq $I10, 1, rx399_restart
-    if_null rx399_debug, debug_366
-    rx399_cur."!cursor_debug"("START", "backslash:sym<x>")
-  debug_366:
+    if_null rx399_debug, debug_381
+    rx399_cur."!cursor_debug"("START", "backslash:sym<r>")
+  debug_381:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan406_done
-    goto rxscan406_scan
-  rxscan406_loop:
+    ne $I10, -1, rxscan402_done
+    goto rxscan402_scan
+  rxscan402_loop:
     ($P10) = rx399_cur."from"()
     inc $P10
     set rx399_pos, $P10
-    ge rx399_pos, rx399_eos, rxscan406_done
-  rxscan406_scan:
-    set_addr $I10, rxscan406_loop
+    ge rx399_pos, rx399_eos, rxscan402_done
+  rxscan402_scan:
+    set_addr $I10, rxscan402_loop
     rx399_cur."!mark_push"(0, rx399_pos, $I10)
-  rxscan406_done:
-.annotate 'line', 139
+  rxscan402_done:
+.annotate 'line', 141
   # rx subcapture "sym"
-    set_addr $I10, rxcap_407_fail
+    set_addr $I10, rxcap_403_fail
     rx399_cur."!mark_push"(0, rx399_pos, $I10)
   # rx enumcharlist negate=0 
     ge rx399_pos, rx399_eos, rx399_fail
     sub $I10, rx399_pos, rx399_off
     substr $S10, rx399_tgt, $I10, 1
-    index $I11, "xX", $S10
+    index $I11, "rR", $S10
     lt $I11, 0, rx399_fail
     inc rx399_pos
-    set_addr $I10, rxcap_407_fail
+    set_addr $I10, rxcap_403_fail
     ($I12, $I11) = rx399_cur."!mark_peek"($I10)
     rx399_cur."!cursor_pos"($I11)
     ($P10) = rx399_cur."!cursor_start"()
     $P10."!cursor_pass"(rx399_pos, "")
     rx399_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_407_done
-  rxcap_407_fail:
+    goto rxcap_403_done
+  rxcap_403_fail:
     goto rx399_fail
-  rxcap_407_done:
-  alt408_0:
-    set_addr $I10, alt408_1
-    rx399_cur."!mark_push"(0, rx399_pos, $I10)
-  # rx subrule "hexint" subtype=capture negate=
-    rx399_cur."!cursor_pos"(rx399_pos)
-    $P10 = rx399_cur."hexint"()
-    unless $P10, rx399_fail
-    rx399_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("hexint")
-    rx399_pos = $P10."pos"()
-    goto alt408_end
-  alt408_1:
-  # rx literal  "["
-    add $I11, rx399_pos, 1
-    gt $I11, rx399_eos, rx399_fail
-    sub $I11, rx399_pos, rx399_off
-    ord $I11, rx399_tgt, $I11
-    ne $I11, 91, rx399_fail
-    add rx399_pos, 1
-  # rx subrule "hexints" subtype=capture negate=
-    rx399_cur."!cursor_pos"(rx399_pos)
-    $P10 = rx399_cur."hexints"()
-    unless $P10, rx399_fail
-    rx399_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("hexints")
-    rx399_pos = $P10."pos"()
-  # rx literal  "]"
-    add $I11, rx399_pos, 1
-    gt $I11, rx399_eos, rx399_fail
-    sub $I11, rx399_pos, rx399_off
-    ord $I11, rx399_tgt, $I11
-    ne $I11, 93, rx399_fail
-    add rx399_pos, 1
-  alt408_end:
-  # rx pass
-    rx399_cur."!cursor_pass"(rx399_pos, "backslash:sym<x>")
-    if_null rx399_debug, debug_367
-    rx399_cur."!cursor_debug"("PASS", "backslash:sym<x>", " at pos=", rx399_pos)
-  debug_367:
+  rxcap_403_done:
+  # rx pass
+    rx399_cur."!cursor_pass"(rx399_pos, "backslash:sym<r>")
+    if_null rx399_debug, debug_382
+    rx399_cur."!cursor_debug"("PASS", "backslash:sym<r>", " at pos=", rx399_pos)
+  debug_382:
     .return (rx399_cur)
   rx399_restart:
 .annotate 'line', 3
-    if_null rx399_debug, debug_368
-    rx399_cur."!cursor_debug"("NEXT", "backslash:sym<x>")
-  debug_368:
+    if_null rx399_debug, debug_383
+    rx399_cur."!cursor_debug"("NEXT", "backslash:sym<r>")
+  debug_383:
   rx399_fail:
     (rx399_rep, rx399_pos, $I10, $P10) = rx399_cur."!mark_fail"(0)
     lt rx399_pos, -1, rx399_done
@@ -5860,686 +5849,770 @@
     jump $I10
   rx399_done:
     rx399_cur."!cursor_fail"()
-    if_null rx399_debug, debug_369
-    rx399_cur."!cursor_debug"("FAIL", "backslash:sym<x>")
-  debug_369:
+    if_null rx399_debug, debug_384
+    rx399_cur."!cursor_debug"("FAIL", "backslash:sym<r>")
+  debug_384:
     .return (rx399_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<x>"  :subid("116_1282323996.47527") :method
+.sub "!PREFIX__backslash:sym<r>"  :subid("116_1284728471.30547") :method
 .annotate 'line', 3
-    $P401 = self."!PREFIX__!subrule"("hexints", "X[")
-    $P402 = self."!PREFIX__!subrule"("hexint", "X")
-    $P403 = self."!PREFIX__!subrule"("hexints", "x[")
-    $P404 = self."!PREFIX__!subrule"("hexint", "x")
-    new $P405, "ResizablePMCArray"
-    push $P405, $P401
-    push $P405, $P402
-    push $P405, $P403
-    push $P405, $P404
-    .return ($P405)
+    new $P401, "ResizablePMCArray"
+    push $P401, "R"
+    push $P401, "r"
+    .return ($P401)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<c>"  :subid("117_1282323996.47527") :method :outer("11_1282323996.47527")
-.annotate 'line', 3
-    .local string rx410_tgt
-    .local int rx410_pos
-    .local int rx410_off
-    .local int rx410_eos
-    .local int rx410_rep
-    .local pmc rx410_cur
-    .local pmc rx410_debug
-    (rx410_cur, rx410_pos, rx410_tgt, $I10) = self."!cursor_start"()
-    getattribute rx410_debug, rx410_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx410_cur
-    .local pmc match
-    .lex "$/", match
-    length rx410_eos, rx410_tgt
-    gt rx410_pos, rx410_eos, rx410_done
-    set rx410_off, 0
-    lt rx410_pos, 2, rx410_start
-    sub rx410_off, rx410_pos, 1
-    substr rx410_tgt, rx410_tgt, rx410_off
-  rx410_start:
-    eq $I10, 1, rx410_restart
-    if_null rx410_debug, debug_370
-    rx410_cur."!cursor_debug"("START", "backslash:sym<c>")
-  debug_370:
+.sub "backslash:sym<t>"  :subid("117_1284728471.30547") :method :outer("11_1284728471.30547")
+.annotate 'line', 3
+    .local string rx405_tgt
+    .local int rx405_pos
+    .local int rx405_off
+    .local int rx405_eos
+    .local int rx405_rep
+    .local pmc rx405_cur
+    .local pmc rx405_debug
+    (rx405_cur, rx405_pos, rx405_tgt, $I10) = self."!cursor_start"()
+    getattribute rx405_debug, rx405_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx405_cur
+    .local pmc match
+    .lex "$/", match
+    length rx405_eos, rx405_tgt
+    gt rx405_pos, rx405_eos, rx405_done
+    set rx405_off, 0
+    lt rx405_pos, 2, rx405_start
+    sub rx405_off, rx405_pos, 1
+    substr rx405_tgt, rx405_tgt, rx405_off
+  rx405_start:
+    eq $I10, 1, rx405_restart
+    if_null rx405_debug, debug_385
+    rx405_cur."!cursor_debug"("START", "backslash:sym<t>")
+  debug_385:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan415_done
-    goto rxscan415_scan
-  rxscan415_loop:
-    ($P10) = rx410_cur."from"()
-    inc $P10
-    set rx410_pos, $P10
-    ge rx410_pos, rx410_eos, rxscan415_done
-  rxscan415_scan:
-    set_addr $I10, rxscan415_loop
-    rx410_cur."!mark_push"(0, rx410_pos, $I10)
-  rxscan415_done:
-.annotate 'line', 140
+    ne $I10, -1, rxscan408_done
+    goto rxscan408_scan
+  rxscan408_loop:
+    ($P10) = rx405_cur."from"()
+    inc $P10
+    set rx405_pos, $P10
+    ge rx405_pos, rx405_eos, rxscan408_done
+  rxscan408_scan:
+    set_addr $I10, rxscan408_loop
+    rx405_cur."!mark_push"(0, rx405_pos, $I10)
+  rxscan408_done:
+.annotate 'line', 142
   # rx subcapture "sym"
-    set_addr $I10, rxcap_416_fail
-    rx410_cur."!mark_push"(0, rx410_pos, $I10)
+    set_addr $I10, rxcap_409_fail
+    rx405_cur."!mark_push"(0, rx405_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx410_pos, rx410_eos, rx410_fail
-    sub $I10, rx410_pos, rx410_off
-    substr $S10, rx410_tgt, $I10, 1
-    index $I11, "cC", $S10
-    lt $I11, 0, rx410_fail
-    inc rx410_pos
-    set_addr $I10, rxcap_416_fail
-    ($I12, $I11) = rx410_cur."!mark_peek"($I10)
-    rx410_cur."!cursor_pos"($I11)
-    ($P10) = rx410_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx410_pos, "")
-    rx410_cur."!mark_push"(0, -1, 0, $P10)
+    ge rx405_pos, rx405_eos, rx405_fail
+    sub $I10, rx405_pos, rx405_off
+    substr $S10, rx405_tgt, $I10, 1
+    index $I11, "tT", $S10
+    lt $I11, 0, rx405_fail
+    inc rx405_pos
+    set_addr $I10, rxcap_409_fail
+    ($I12, $I11) = rx405_cur."!mark_peek"($I10)
+    rx405_cur."!cursor_pos"($I11)
+    ($P10) = rx405_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx405_pos, "")
+    rx405_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_416_done
-  rxcap_416_fail:
-    goto rx410_fail
-  rxcap_416_done:
-  # rx subrule "charspec" subtype=capture negate=
-    rx410_cur."!cursor_pos"(rx410_pos)
-    $P10 = rx410_cur."charspec"()
-    unless $P10, rx410_fail
-    rx410_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("charspec")
-    rx410_pos = $P10."pos"()
-  # rx pass
-    rx410_cur."!cursor_pass"(rx410_pos, "backslash:sym<c>")
-    if_null rx410_debug, debug_371
-    rx410_cur."!cursor_debug"("PASS", "backslash:sym<c>", " at pos=", rx410_pos)
-  debug_371:
-    .return (rx410_cur)
-  rx410_restart:
+    goto rxcap_409_done
+  rxcap_409_fail:
+    goto rx405_fail
+  rxcap_409_done:
+  # rx pass
+    rx405_cur."!cursor_pass"(rx405_pos, "backslash:sym<t>")
+    if_null rx405_debug, debug_386
+    rx405_cur."!cursor_debug"("PASS", "backslash:sym<t>", " at pos=", rx405_pos)
+  debug_386:
+    .return (rx405_cur)
+  rx405_restart:
 .annotate 'line', 3
-    if_null rx410_debug, debug_372
-    rx410_cur."!cursor_debug"("NEXT", "backslash:sym<c>")
-  debug_372:
-  rx410_fail:
-    (rx410_rep, rx410_pos, $I10, $P10) = rx410_cur."!mark_fail"(0)
-    lt rx410_pos, -1, rx410_done
-    eq rx410_pos, -1, rx410_fail
-    jump $I10
-  rx410_done:
-    rx410_cur."!cursor_fail"()
-    if_null rx410_debug, debug_373
-    rx410_cur."!cursor_debug"("FAIL", "backslash:sym<c>")
-  debug_373:
-    .return (rx410_cur)
+    if_null rx405_debug, debug_387
+    rx405_cur."!cursor_debug"("NEXT", "backslash:sym<t>")
+  debug_387:
+  rx405_fail:
+    (rx405_rep, rx405_pos, $I10, $P10) = rx405_cur."!mark_fail"(0)
+    lt rx405_pos, -1, rx405_done
+    eq rx405_pos, -1, rx405_fail
+    jump $I10
+  rx405_done:
+    rx405_cur."!cursor_fail"()
+    if_null rx405_debug, debug_388
+    rx405_cur."!cursor_debug"("FAIL", "backslash:sym<t>")
+  debug_388:
+    .return (rx405_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<c>"  :subid("118_1282323996.47527") :method
+.sub "!PREFIX__backslash:sym<t>"  :subid("118_1284728471.30547") :method
 .annotate 'line', 3
-    $P412 = self."!PREFIX__!subrule"("charspec", "C")
-    $P413 = self."!PREFIX__!subrule"("charspec", "c")
-    new $P414, "ResizablePMCArray"
-    push $P414, $P412
-    push $P414, $P413
-    .return ($P414)
+    new $P407, "ResizablePMCArray"
+    push $P407, "T"
+    push $P407, "t"
+    .return ($P407)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<A>"  :subid("119_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "backslash:sym<v>"  :subid("119_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx418_tgt
-    .local int rx418_pos
-    .local int rx418_off
-    .local int rx418_eos
-    .local int rx418_rep
-    .local pmc rx418_cur
-    .local pmc rx418_debug
-    (rx418_cur, rx418_pos, rx418_tgt, $I10) = self."!cursor_start"()
-    getattribute rx418_debug, rx418_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx418_cur
+    .local string rx411_tgt
+    .local int rx411_pos
+    .local int rx411_off
+    .local int rx411_eos
+    .local int rx411_rep
+    .local pmc rx411_cur
+    .local pmc rx411_debug
+    (rx411_cur, rx411_pos, rx411_tgt, $I10) = self."!cursor_start"()
+    getattribute rx411_debug, rx411_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx411_cur
     .local pmc match
     .lex "$/", match
-    length rx418_eos, rx418_tgt
-    gt rx418_pos, rx418_eos, rx418_done
-    set rx418_off, 0
-    lt rx418_pos, 2, rx418_start
-    sub rx418_off, rx418_pos, 1
-    substr rx418_tgt, rx418_tgt, rx418_off
-  rx418_start:
-    eq $I10, 1, rx418_restart
-    if_null rx418_debug, debug_374
-    rx418_cur."!cursor_debug"("START", "backslash:sym<A>")
-  debug_374:
+    length rx411_eos, rx411_tgt
+    gt rx411_pos, rx411_eos, rx411_done
+    set rx411_off, 0
+    lt rx411_pos, 2, rx411_start
+    sub rx411_off, rx411_pos, 1
+    substr rx411_tgt, rx411_tgt, rx411_off
+  rx411_start:
+    eq $I10, 1, rx411_restart
+    if_null rx411_debug, debug_389
+    rx411_cur."!cursor_debug"("START", "backslash:sym<v>")
+  debug_389:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan422_done
-    goto rxscan422_scan
-  rxscan422_loop:
-    ($P10) = rx418_cur."from"()
-    inc $P10
-    set rx418_pos, $P10
-    ge rx418_pos, rx418_eos, rxscan422_done
-  rxscan422_scan:
-    set_addr $I10, rxscan422_loop
-    rx418_cur."!mark_push"(0, rx418_pos, $I10)
-  rxscan422_done:
-.annotate 'line', 141
-  # rx literal  "A"
-    add $I11, rx418_pos, 1
-    gt $I11, rx418_eos, rx418_fail
-    sub $I11, rx418_pos, rx418_off
-    ord $I11, rx418_tgt, $I11
-    ne $I11, 65, rx418_fail
-    add rx418_pos, 1
-  # rx subrule "obs" subtype=method negate=
-    rx418_cur."!cursor_pos"(rx418_pos)
-    $P10 = rx418_cur."obs"("\\A as beginning-of-string matcher", "^")
-    unless $P10, rx418_fail
-    rx418_pos = $P10."pos"()
-  # rx pass
-    rx418_cur."!cursor_pass"(rx418_pos, "backslash:sym<A>")
-    if_null rx418_debug, debug_375
-    rx418_cur."!cursor_debug"("PASS", "backslash:sym<A>", " at pos=", rx418_pos)
-  debug_375:
-    .return (rx418_cur)
-  rx418_restart:
+    ne $I10, -1, rxscan414_done
+    goto rxscan414_scan
+  rxscan414_loop:
+    ($P10) = rx411_cur."from"()
+    inc $P10
+    set rx411_pos, $P10
+    ge rx411_pos, rx411_eos, rxscan414_done
+  rxscan414_scan:
+    set_addr $I10, rxscan414_loop
+    rx411_cur."!mark_push"(0, rx411_pos, $I10)
+  rxscan414_done:
+.annotate 'line', 143
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_415_fail
+    rx411_cur."!mark_push"(0, rx411_pos, $I10)
+  # rx enumcharlist negate=0 
+    ge rx411_pos, rx411_eos, rx411_fail
+    sub $I10, rx411_pos, rx411_off
+    substr $S10, rx411_tgt, $I10, 1
+    index $I11, "vV", $S10
+    lt $I11, 0, rx411_fail
+    inc rx411_pos
+    set_addr $I10, rxcap_415_fail
+    ($I12, $I11) = rx411_cur."!mark_peek"($I10)
+    rx411_cur."!cursor_pos"($I11)
+    ($P10) = rx411_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx411_pos, "")
+    rx411_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_415_done
+  rxcap_415_fail:
+    goto rx411_fail
+  rxcap_415_done:
+  # rx pass
+    rx411_cur."!cursor_pass"(rx411_pos, "backslash:sym<v>")
+    if_null rx411_debug, debug_390
+    rx411_cur."!cursor_debug"("PASS", "backslash:sym<v>", " at pos=", rx411_pos)
+  debug_390:
+    .return (rx411_cur)
+  rx411_restart:
 .annotate 'line', 3
-    if_null rx418_debug, debug_376
-    rx418_cur."!cursor_debug"("NEXT", "backslash:sym<A>")
-  debug_376:
-  rx418_fail:
-    (rx418_rep, rx418_pos, $I10, $P10) = rx418_cur."!mark_fail"(0)
-    lt rx418_pos, -1, rx418_done
-    eq rx418_pos, -1, rx418_fail
-    jump $I10
-  rx418_done:
-    rx418_cur."!cursor_fail"()
-    if_null rx418_debug, debug_377
-    rx418_cur."!cursor_debug"("FAIL", "backslash:sym<A>")
-  debug_377:
-    .return (rx418_cur)
+    if_null rx411_debug, debug_391
+    rx411_cur."!cursor_debug"("NEXT", "backslash:sym<v>")
+  debug_391:
+  rx411_fail:
+    (rx411_rep, rx411_pos, $I10, $P10) = rx411_cur."!mark_fail"(0)
+    lt rx411_pos, -1, rx411_done
+    eq rx411_pos, -1, rx411_fail
+    jump $I10
+  rx411_done:
+    rx411_cur."!cursor_fail"()
+    if_null rx411_debug, debug_392
+    rx411_cur."!cursor_debug"("FAIL", "backslash:sym<v>")
+  debug_392:
+    .return (rx411_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<A>"  :subid("120_1282323996.47527") :method
+.sub "!PREFIX__backslash:sym<v>"  :subid("120_1284728471.30547") :method
 .annotate 'line', 3
-    $P420 = self."!PREFIX__!subrule"("obs", "A")
-    new $P421, "ResizablePMCArray"
-    push $P421, $P420
-    .return ($P421)
+    new $P413, "ResizablePMCArray"
+    push $P413, "V"
+    push $P413, "v"
+    .return ($P413)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<z>"  :subid("121_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "backslash:sym<o>"  :subid("121_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx424_tgt
-    .local int rx424_pos
-    .local int rx424_off
-    .local int rx424_eos
-    .local int rx424_rep
-    .local pmc rx424_cur
-    .local pmc rx424_debug
-    (rx424_cur, rx424_pos, rx424_tgt, $I10) = self."!cursor_start"()
-    getattribute rx424_debug, rx424_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx424_cur
+    .local string rx417_tgt
+    .local int rx417_pos
+    .local int rx417_off
+    .local int rx417_eos
+    .local int rx417_rep
+    .local pmc rx417_cur
+    .local pmc rx417_debug
+    (rx417_cur, rx417_pos, rx417_tgt, $I10) = self."!cursor_start"()
+    getattribute rx417_debug, rx417_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx417_cur
     .local pmc match
     .lex "$/", match
-    length rx424_eos, rx424_tgt
-    gt rx424_pos, rx424_eos, rx424_done
-    set rx424_off, 0
-    lt rx424_pos, 2, rx424_start
-    sub rx424_off, rx424_pos, 1
-    substr rx424_tgt, rx424_tgt, rx424_off
-  rx424_start:
-    eq $I10, 1, rx424_restart
-    if_null rx424_debug, debug_378
-    rx424_cur."!cursor_debug"("START", "backslash:sym<z>")
-  debug_378:
+    length rx417_eos, rx417_tgt
+    gt rx417_pos, rx417_eos, rx417_done
+    set rx417_off, 0
+    lt rx417_pos, 2, rx417_start
+    sub rx417_off, rx417_pos, 1
+    substr rx417_tgt, rx417_tgt, rx417_off
+  rx417_start:
+    eq $I10, 1, rx417_restart
+    if_null rx417_debug, debug_393
+    rx417_cur."!cursor_debug"("START", "backslash:sym<o>")
+  debug_393:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan428_done
-    goto rxscan428_scan
-  rxscan428_loop:
-    ($P10) = rx424_cur."from"()
-    inc $P10
-    set rx424_pos, $P10
-    ge rx424_pos, rx424_eos, rxscan428_done
-  rxscan428_scan:
-    set_addr $I10, rxscan428_loop
-    rx424_cur."!mark_push"(0, rx424_pos, $I10)
-  rxscan428_done:
-.annotate 'line', 142
-  # rx literal  "z"
-    add $I11, rx424_pos, 1
-    gt $I11, rx424_eos, rx424_fail
-    sub $I11, rx424_pos, rx424_off
-    ord $I11, rx424_tgt, $I11
-    ne $I11, 122, rx424_fail
-    add rx424_pos, 1
-  # rx subrule "obs" subtype=method negate=
-    rx424_cur."!cursor_pos"(rx424_pos)
-    $P10 = rx424_cur."obs"("\\z as end-of-string matcher", "$")
-    unless $P10, rx424_fail
-    rx424_pos = $P10."pos"()
-  # rx pass
-    rx424_cur."!cursor_pass"(rx424_pos, "backslash:sym<z>")
-    if_null rx424_debug, debug_379
-    rx424_cur."!cursor_debug"("PASS", "backslash:sym<z>", " at pos=", rx424_pos)
-  debug_379:
-    .return (rx424_cur)
-  rx424_restart:
+    ne $I10, -1, rxscan424_done
+    goto rxscan424_scan
+  rxscan424_loop:
+    ($P10) = rx417_cur."from"()
+    inc $P10
+    set rx417_pos, $P10
+    ge rx417_pos, rx417_eos, rxscan424_done
+  rxscan424_scan:
+    set_addr $I10, rxscan424_loop
+    rx417_cur."!mark_push"(0, rx417_pos, $I10)
+  rxscan424_done:
+.annotate 'line', 144
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_425_fail
+    rx417_cur."!mark_push"(0, rx417_pos, $I10)
+  # rx enumcharlist negate=0 
+    ge rx417_pos, rx417_eos, rx417_fail
+    sub $I10, rx417_pos, rx417_off
+    substr $S10, rx417_tgt, $I10, 1
+    index $I11, "oO", $S10
+    lt $I11, 0, rx417_fail
+    inc rx417_pos
+    set_addr $I10, rxcap_425_fail
+    ($I12, $I11) = rx417_cur."!mark_peek"($I10)
+    rx417_cur."!cursor_pos"($I11)
+    ($P10) = rx417_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx417_pos, "")
+    rx417_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_425_done
+  rxcap_425_fail:
+    goto rx417_fail
+  rxcap_425_done:
+  alt426_0:
+    set_addr $I10, alt426_1
+    rx417_cur."!mark_push"(0, rx417_pos, $I10)
+  # rx subrule "octint" subtype=capture negate=
+    rx417_cur."!cursor_pos"(rx417_pos)
+    $P10 = rx417_cur."octint"()
+    unless $P10, rx417_fail
+    rx417_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("octint")
+    rx417_pos = $P10."pos"()
+    goto alt426_end
+  alt426_1:
+  # rx literal  "["
+    add $I11, rx417_pos, 1
+    gt $I11, rx417_eos, rx417_fail
+    sub $I11, rx417_pos, rx417_off
+    ord $I11, rx417_tgt, $I11
+    ne $I11, 91, rx417_fail
+    add rx417_pos, 1
+  # rx subrule "octints" subtype=capture negate=
+    rx417_cur."!cursor_pos"(rx417_pos)
+    $P10 = rx417_cur."octints"()
+    unless $P10, rx417_fail
+    rx417_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("octints")
+    rx417_pos = $P10."pos"()
+  # rx literal  "]"
+    add $I11, rx417_pos, 1
+    gt $I11, rx417_eos, rx417_fail
+    sub $I11, rx417_pos, rx417_off
+    ord $I11, rx417_tgt, $I11
+    ne $I11, 93, rx417_fail
+    add rx417_pos, 1
+  alt426_end:
+  # rx pass
+    rx417_cur."!cursor_pass"(rx417_pos, "backslash:sym<o>")
+    if_null rx417_debug, debug_394
+    rx417_cur."!cursor_debug"("PASS", "backslash:sym<o>", " at pos=", rx417_pos)
+  debug_394:
+    .return (rx417_cur)
+  rx417_restart:
 .annotate 'line', 3
-    if_null rx424_debug, debug_380
-    rx424_cur."!cursor_debug"("NEXT", "backslash:sym<z>")
-  debug_380:
-  rx424_fail:
-    (rx424_rep, rx424_pos, $I10, $P10) = rx424_cur."!mark_fail"(0)
-    lt rx424_pos, -1, rx424_done
-    eq rx424_pos, -1, rx424_fail
-    jump $I10
-  rx424_done:
-    rx424_cur."!cursor_fail"()
-    if_null rx424_debug, debug_381
-    rx424_cur."!cursor_debug"("FAIL", "backslash:sym<z>")
-  debug_381:
-    .return (rx424_cur)
+    if_null rx417_debug, debug_395
+    rx417_cur."!cursor_debug"("NEXT", "backslash:sym<o>")
+  debug_395:
+  rx417_fail:
+    (rx417_rep, rx417_pos, $I10, $P10) = rx417_cur."!mark_fail"(0)
+    lt rx417_pos, -1, rx417_done
+    eq rx417_pos, -1, rx417_fail
+    jump $I10
+  rx417_done:
+    rx417_cur."!cursor_fail"()
+    if_null rx417_debug, debug_396
+    rx417_cur."!cursor_debug"("FAIL", "backslash:sym<o>")
+  debug_396:
+    .return (rx417_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<z>"  :subid("122_1282323996.47527") :method
+.sub "!PREFIX__backslash:sym<o>"  :subid("122_1284728471.30547") :method
 .annotate 'line', 3
-    $P426 = self."!PREFIX__!subrule"("obs", "z")
-    new $P427, "ResizablePMCArray"
-    push $P427, $P426
-    .return ($P427)
+    $P419 = self."!PREFIX__!subrule"("octints", "O[")
+    $P420 = self."!PREFIX__!subrule"("octint", "O")
+    $P421 = self."!PREFIX__!subrule"("octints", "o[")
+    $P422 = self."!PREFIX__!subrule"("octint", "o")
+    new $P423, "ResizablePMCArray"
+    push $P423, $P419
+    push $P423, $P420
+    push $P423, $P421
+    push $P423, $P422
+    .return ($P423)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<Z>"  :subid("123_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "backslash:sym<x>"  :subid("123_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx430_tgt
-    .local int rx430_pos
-    .local int rx430_off
-    .local int rx430_eos
-    .local int rx430_rep
-    .local pmc rx430_cur
-    .local pmc rx430_debug
-    (rx430_cur, rx430_pos, rx430_tgt, $I10) = self."!cursor_start"()
-    getattribute rx430_debug, rx430_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx430_cur
+    .local string rx428_tgt
+    .local int rx428_pos
+    .local int rx428_off
+    .local int rx428_eos
+    .local int rx428_rep
+    .local pmc rx428_cur
+    .local pmc rx428_debug
+    (rx428_cur, rx428_pos, rx428_tgt, $I10) = self."!cursor_start"()
+    getattribute rx428_debug, rx428_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx428_cur
     .local pmc match
     .lex "$/", match
-    length rx430_eos, rx430_tgt
-    gt rx430_pos, rx430_eos, rx430_done
-    set rx430_off, 0
-    lt rx430_pos, 2, rx430_start
-    sub rx430_off, rx430_pos, 1
-    substr rx430_tgt, rx430_tgt, rx430_off
-  rx430_start:
-    eq $I10, 1, rx430_restart
-    if_null rx430_debug, debug_382
-    rx430_cur."!cursor_debug"("START", "backslash:sym<Z>")
-  debug_382:
+    length rx428_eos, rx428_tgt
+    gt rx428_pos, rx428_eos, rx428_done
+    set rx428_off, 0
+    lt rx428_pos, 2, rx428_start
+    sub rx428_off, rx428_pos, 1
+    substr rx428_tgt, rx428_tgt, rx428_off
+  rx428_start:
+    eq $I10, 1, rx428_restart
+    if_null rx428_debug, debug_397
+    rx428_cur."!cursor_debug"("START", "backslash:sym<x>")
+  debug_397:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan434_done
-    goto rxscan434_scan
-  rxscan434_loop:
-    ($P10) = rx430_cur."from"()
-    inc $P10
-    set rx430_pos, $P10
-    ge rx430_pos, rx430_eos, rxscan434_done
-  rxscan434_scan:
-    set_addr $I10, rxscan434_loop
-    rx430_cur."!mark_push"(0, rx430_pos, $I10)
-  rxscan434_done:
-.annotate 'line', 143
-  # rx literal  "Z"
-    add $I11, rx430_pos, 1
-    gt $I11, rx430_eos, rx430_fail
-    sub $I11, rx430_pos, rx430_off
-    ord $I11, rx430_tgt, $I11
-    ne $I11, 90, rx430_fail
-    add rx430_pos, 1
-  # rx subrule "obs" subtype=method negate=
-    rx430_cur."!cursor_pos"(rx430_pos)
-    $P10 = rx430_cur."obs"("\\Z as end-of-string matcher", "\\n?$")
-    unless $P10, rx430_fail
-    rx430_pos = $P10."pos"()
-  # rx pass
-    rx430_cur."!cursor_pass"(rx430_pos, "backslash:sym<Z>")
-    if_null rx430_debug, debug_383
-    rx430_cur."!cursor_debug"("PASS", "backslash:sym<Z>", " at pos=", rx430_pos)
-  debug_383:
-    .return (rx430_cur)
-  rx430_restart:
+    ne $I10, -1, rxscan435_done
+    goto rxscan435_scan
+  rxscan435_loop:
+    ($P10) = rx428_cur."from"()
+    inc $P10
+    set rx428_pos, $P10
+    ge rx428_pos, rx428_eos, rxscan435_done
+  rxscan435_scan:
+    set_addr $I10, rxscan435_loop
+    rx428_cur."!mark_push"(0, rx428_pos, $I10)
+  rxscan435_done:
+.annotate 'line', 145
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_436_fail
+    rx428_cur."!mark_push"(0, rx428_pos, $I10)
+  # rx enumcharlist negate=0 
+    ge rx428_pos, rx428_eos, rx428_fail
+    sub $I10, rx428_pos, rx428_off
+    substr $S10, rx428_tgt, $I10, 1
+    index $I11, "xX", $S10
+    lt $I11, 0, rx428_fail
+    inc rx428_pos
+    set_addr $I10, rxcap_436_fail
+    ($I12, $I11) = rx428_cur."!mark_peek"($I10)
+    rx428_cur."!cursor_pos"($I11)
+    ($P10) = rx428_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx428_pos, "")
+    rx428_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_436_done
+  rxcap_436_fail:
+    goto rx428_fail
+  rxcap_436_done:
+  alt437_0:
+    set_addr $I10, alt437_1
+    rx428_cur."!mark_push"(0, rx428_pos, $I10)
+  # rx subrule "hexint" subtype=capture negate=
+    rx428_cur."!cursor_pos"(rx428_pos)
+    $P10 = rx428_cur."hexint"()
+    unless $P10, rx428_fail
+    rx428_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("hexint")
+    rx428_pos = $P10."pos"()
+    goto alt437_end
+  alt437_1:
+  # rx literal  "["
+    add $I11, rx428_pos, 1
+    gt $I11, rx428_eos, rx428_fail
+    sub $I11, rx428_pos, rx428_off
+    ord $I11, rx428_tgt, $I11
+    ne $I11, 91, rx428_fail
+    add rx428_pos, 1
+  # rx subrule "hexints" subtype=capture negate=
+    rx428_cur."!cursor_pos"(rx428_pos)
+    $P10 = rx428_cur."hexints"()
+    unless $P10, rx428_fail
+    rx428_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("hexints")
+    rx428_pos = $P10."pos"()
+  # rx literal  "]"
+    add $I11, rx428_pos, 1
+    gt $I11, rx428_eos, rx428_fail
+    sub $I11, rx428_pos, rx428_off
+    ord $I11, rx428_tgt, $I11
+    ne $I11, 93, rx428_fail
+    add rx428_pos, 1
+  alt437_end:
+  # rx pass
+    rx428_cur."!cursor_pass"(rx428_pos, "backslash:sym<x>")
+    if_null rx428_debug, debug_398
+    rx428_cur."!cursor_debug"("PASS", "backslash:sym<x>", " at pos=", rx428_pos)
+  debug_398:
+    .return (rx428_cur)
+  rx428_restart:
 .annotate 'line', 3
-    if_null rx430_debug, debug_384
-    rx430_cur."!cursor_debug"("NEXT", "backslash:sym<Z>")
-  debug_384:
-  rx430_fail:
-    (rx430_rep, rx430_pos, $I10, $P10) = rx430_cur."!mark_fail"(0)
-    lt rx430_pos, -1, rx430_done
-    eq rx430_pos, -1, rx430_fail
-    jump $I10
-  rx430_done:
-    rx430_cur."!cursor_fail"()
-    if_null rx430_debug, debug_385
-    rx430_cur."!cursor_debug"("FAIL", "backslash:sym<Z>")
-  debug_385:
-    .return (rx430_cur)
+    if_null rx428_debug, debug_399
+    rx428_cur."!cursor_debug"("NEXT", "backslash:sym<x>")
+  debug_399:
+  rx428_fail:
+    (rx428_rep, rx428_pos, $I10, $P10) = rx428_cur."!mark_fail"(0)
+    lt rx428_pos, -1, rx428_done
+    eq rx428_pos, -1, rx428_fail
+    jump $I10
+  rx428_done:
+    rx428_cur."!cursor_fail"()
+    if_null rx428_debug, debug_400
+    rx428_cur."!cursor_debug"("FAIL", "backslash:sym<x>")
+  debug_400:
+    .return (rx428_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<Z>"  :subid("124_1282323996.47527") :method
+.sub "!PREFIX__backslash:sym<x>"  :subid("124_1284728471.30547") :method
 .annotate 'line', 3
-    $P432 = self."!PREFIX__!subrule"("obs", "Z")
-    new $P433, "ResizablePMCArray"
-    push $P433, $P432
-    .return ($P433)
+    $P430 = self."!PREFIX__!subrule"("hexints", "X[")
+    $P431 = self."!PREFIX__!subrule"("hexint", "X")
+    $P432 = self."!PREFIX__!subrule"("hexints", "x[")
+    $P433 = self."!PREFIX__!subrule"("hexint", "x")
+    new $P434, "ResizablePMCArray"
+    push $P434, $P430
+    push $P434, $P431
+    push $P434, $P432
+    push $P434, $P433
+    .return ($P434)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<Q>"  :subid("125_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "backslash:sym<c>"  :subid("125_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx436_tgt
-    .local int rx436_pos
-    .local int rx436_off
-    .local int rx436_eos
-    .local int rx436_rep
-    .local pmc rx436_cur
-    .local pmc rx436_debug
-    (rx436_cur, rx436_pos, rx436_tgt, $I10) = self."!cursor_start"()
-    getattribute rx436_debug, rx436_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx436_cur
+    .local string rx439_tgt
+    .local int rx439_pos
+    .local int rx439_off
+    .local int rx439_eos
+    .local int rx439_rep
+    .local pmc rx439_cur
+    .local pmc rx439_debug
+    (rx439_cur, rx439_pos, rx439_tgt, $I10) = self."!cursor_start"()
+    getattribute rx439_debug, rx439_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx439_cur
     .local pmc match
     .lex "$/", match
-    length rx436_eos, rx436_tgt
-    gt rx436_pos, rx436_eos, rx436_done
-    set rx436_off, 0
-    lt rx436_pos, 2, rx436_start
-    sub rx436_off, rx436_pos, 1
-    substr rx436_tgt, rx436_tgt, rx436_off
-  rx436_start:
-    eq $I10, 1, rx436_restart
-    if_null rx436_debug, debug_386
-    rx436_cur."!cursor_debug"("START", "backslash:sym<Q>")
-  debug_386:
+    length rx439_eos, rx439_tgt
+    gt rx439_pos, rx439_eos, rx439_done
+    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:
+    eq $I10, 1, rx439_restart
+    if_null rx439_debug, debug_401
+    rx439_cur."!cursor_debug"("START", "backslash:sym<c>")
+  debug_401:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan440_done
-    goto rxscan440_scan
-  rxscan440_loop:
-    ($P10) = rx436_cur."from"()
-    inc $P10
-    set rx436_pos, $P10
-    ge rx436_pos, rx436_eos, rxscan440_done
-  rxscan440_scan:
-    set_addr $I10, rxscan440_loop
-    rx436_cur."!mark_push"(0, rx436_pos, $I10)
-  rxscan440_done:
-.annotate 'line', 144
-  # rx literal  "Q"
-    add $I11, rx436_pos, 1
-    gt $I11, rx436_eos, rx436_fail
-    sub $I11, rx436_pos, rx436_off
-    ord $I11, rx436_tgt, $I11
-    ne $I11, 81, rx436_fail
-    add rx436_pos, 1
-  # rx subrule "obs" subtype=method negate=
-    rx436_cur."!cursor_pos"(rx436_pos)
-    $P10 = rx436_cur."obs"("\\Q as quotemeta", "quotes or literal variable match")
-    unless $P10, rx436_fail
-    rx436_pos = $P10."pos"()
-  # rx pass
-    rx436_cur."!cursor_pass"(rx436_pos, "backslash:sym<Q>")
-    if_null rx436_debug, debug_387
-    rx436_cur."!cursor_debug"("PASS", "backslash:sym<Q>", " at pos=", rx436_pos)
-  debug_387:
-    .return (rx436_cur)
-  rx436_restart:
+    ne $I10, -1, rxscan444_done
+    goto rxscan444_scan
+  rxscan444_loop:
+    ($P10) = rx439_cur."from"()
+    inc $P10
+    set rx439_pos, $P10
+    ge rx439_pos, rx439_eos, rxscan444_done
+  rxscan444_scan:
+    set_addr $I10, rxscan444_loop
+    rx439_cur."!mark_push"(0, rx439_pos, $I10)
+  rxscan444_done:
+.annotate 'line', 146
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_445_fail
+    rx439_cur."!mark_push"(0, rx439_pos, $I10)
+  # rx enumcharlist negate=0 
+    ge rx439_pos, rx439_eos, rx439_fail
+    sub $I10, rx439_pos, rx439_off
+    substr $S10, rx439_tgt, $I10, 1
+    index $I11, "cC", $S10
+    lt $I11, 0, rx439_fail
+    inc rx439_pos
+    set_addr $I10, rxcap_445_fail
+    ($I12, $I11) = rx439_cur."!mark_peek"($I10)
+    rx439_cur."!cursor_pos"($I11)
+    ($P10) = rx439_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx439_pos, "")
+    rx439_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_445_done
+  rxcap_445_fail:
+    goto rx439_fail
+  rxcap_445_done:
+  # rx subrule "charspec" subtype=capture negate=
+    rx439_cur."!cursor_pos"(rx439_pos)
+    $P10 = rx439_cur."charspec"()
+    unless $P10, rx439_fail
+    rx439_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("charspec")
+    rx439_pos = $P10."pos"()
+  # rx pass
+    rx439_cur."!cursor_pass"(rx439_pos, "backslash:sym<c>")
+    if_null rx439_debug, debug_402
+    rx439_cur."!cursor_debug"("PASS", "backslash:sym<c>", " at pos=", rx439_pos)
+  debug_402:
+    .return (rx439_cur)
+  rx439_restart:
 .annotate 'line', 3
-    if_null rx436_debug, debug_388
-    rx436_cur."!cursor_debug"("NEXT", "backslash:sym<Q>")
-  debug_388:
-  rx436_fail:
-    (rx436_rep, rx436_pos, $I10, $P10) = rx436_cur."!mark_fail"(0)
-    lt rx436_pos, -1, rx436_done
-    eq rx436_pos, -1, rx436_fail
-    jump $I10
-  rx436_done:
-    rx436_cur."!cursor_fail"()
-    if_null rx436_debug, debug_389
-    rx436_cur."!cursor_debug"("FAIL", "backslash:sym<Q>")
-  debug_389:
-    .return (rx436_cur)
+    if_null rx439_debug, debug_403
+    rx439_cur."!cursor_debug"("NEXT", "backslash:sym<c>")
+  debug_403:
+  rx439_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
+  rx439_done:
+    rx439_cur."!cursor_fail"()
+    if_null rx439_debug, debug_404
+    rx439_cur."!cursor_debug"("FAIL", "backslash:sym<c>")
+  debug_404:
+    .return (rx439_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<Q>"  :subid("126_1282323996.47527") :method
+.sub "!PREFIX__backslash:sym<c>"  :subid("126_1284728471.30547") :method
 .annotate 'line', 3
-    $P438 = self."!PREFIX__!subrule"("obs", "Q")
-    new $P439, "ResizablePMCArray"
-    push $P439, $P438
-    .return ($P439)
+    $P441 = self."!PREFIX__!subrule"("charspec", "C")
+    $P442 = self."!PREFIX__!subrule"("charspec", "c")
+    new $P443, "ResizablePMCArray"
+    push $P443, $P441
+    push $P443, $P442
+    .return ($P443)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "backslash:sym<misc>"  :subid("127_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "backslash:sym<A>"  :subid("127_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .local string rx442_tgt
-    .local int rx442_pos
-    .local int rx442_off
-    .local int rx442_eos
-    .local int rx442_rep
-    .local pmc rx442_cur
-    .local pmc rx442_debug
-    (rx442_cur, rx442_pos, rx442_tgt, $I10) = self."!cursor_start"()
-    getattribute rx442_debug, rx442_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx442_cur
+    .local string rx447_tgt
+    .local int rx447_pos
+    .local int rx447_off
+    .local int rx447_eos
+    .local int rx447_rep
+    .local pmc rx447_cur
+    .local pmc rx447_debug
+    (rx447_cur, rx447_pos, rx447_tgt, $I10) = self."!cursor_start"()
+    getattribute rx447_debug, rx447_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx447_cur
     .local pmc match
     .lex "$/", match
-    length rx442_eos, rx442_tgt
-    gt rx442_pos, rx442_eos, rx442_done
-    set rx442_off, 0
-    lt rx442_pos, 2, rx442_start
-    sub rx442_off, rx442_pos, 1
-    substr rx442_tgt, rx442_tgt, rx442_off
-  rx442_start:
-    eq $I10, 1, rx442_restart
-    if_null rx442_debug, debug_390
-    rx442_cur."!cursor_debug"("START", "backslash:sym<misc>")
-  debug_390:
+    length rx447_eos, rx447_tgt
+    gt rx447_pos, rx447_eos, rx447_done
+    set rx447_off, 0
+    lt rx447_pos, 2, rx447_start
+    sub rx447_off, rx447_pos, 1
+    substr rx447_tgt, rx447_tgt, rx447_off
+  rx447_start:
+    eq $I10, 1, rx447_restart
+    if_null rx447_debug, debug_405
+    rx447_cur."!cursor_debug"("START", "backslash:sym<A>")
+  debug_405:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan445_done
-    goto rxscan445_scan
-  rxscan445_loop:
-    ($P10) = rx442_cur."from"()
-    inc $P10
-    set rx442_pos, $P10
-    ge rx442_pos, rx442_eos, rxscan445_done
-  rxscan445_scan:
-    set_addr $I10, rxscan445_loop
-    rx442_cur."!mark_push"(0, rx442_pos, $I10)
-  rxscan445_done:
-.annotate 'line', 145
-  # rx charclass W
-    ge rx442_pos, rx442_eos, rx442_fail
-    sub $I10, rx442_pos, rx442_off
-    is_cclass $I11, 8192, rx442_tgt, $I10
-    if $I11, rx442_fail
-    inc rx442_pos
-  # rx pass
-    rx442_cur."!cursor_pass"(rx442_pos, "backslash:sym<misc>")
-    if_null rx442_debug, debug_391
-    rx442_cur."!cursor_debug"("PASS", "backslash:sym<misc>", " at pos=", rx442_pos)
-  debug_391:
-    .return (rx442_cur)
-  rx442_restart:
+    ne $I10, -1, rxscan451_done
+    goto rxscan451_scan
+  rxscan451_loop:
+    ($P10) = rx447_cur."from"()
+    inc $P10
+    set rx447_pos, $P10
+    ge rx447_pos, rx447_eos, rxscan451_done
+  rxscan451_scan:
+    set_addr $I10, rxscan451_loop
+    rx447_cur."!mark_push"(0, rx447_pos, $I10)
+  rxscan451_done:
+.annotate 'line', 147
+  # rx literal  "A"
+    add $I11, rx447_pos, 1
+    gt $I11, rx447_eos, rx447_fail
+    sub $I11, rx447_pos, rx447_off
+    ord $I11, rx447_tgt, $I11
+    ne $I11, 65, rx447_fail
+    add rx447_pos, 1
+  # rx subrule "obs" subtype=method negate=
+    rx447_cur."!cursor_pos"(rx447_pos)
+    $P10 = rx447_cur."obs"("\\A as beginning-of-string matcher", "^")
+    unless $P10, rx447_fail
+    rx447_pos = $P10."pos"()
+  # rx pass
+    rx447_cur."!cursor_pass"(rx447_pos, "backslash:sym<A>")
+    if_null rx447_debug, debug_406
+    rx447_cur."!cursor_debug"("PASS", "backslash:sym<A>", " at pos=", rx447_pos)
+  debug_406:
+    .return (rx447_cur)
+  rx447_restart:
 .annotate 'line', 3
-    if_null rx442_debug, debug_392
-    rx442_cur."!cursor_debug"("NEXT", "backslash:sym<misc>")
-  debug_392:
-  rx442_fail:
-    (rx442_rep, rx442_pos, $I10, $P10) = rx442_cur."!mark_fail"(0)
-    lt rx442_pos, -1, rx442_done
-    eq rx442_pos, -1, rx442_fail
-    jump $I10
-  rx442_done:
-    rx442_cur."!cursor_fail"()
-    if_null rx442_debug, debug_393
-    rx442_cur."!cursor_debug"("FAIL", "backslash:sym<misc>")
-  debug_393:
-    .return (rx442_cur)
+    if_null rx447_debug, debug_407
+    rx447_cur."!cursor_debug"("NEXT", "backslash:sym<A>")
+  debug_407:
+  rx447_fail:
+    (rx447_rep, rx447_pos, $I10, $P10) = rx447_cur."!mark_fail"(0)
+    lt rx447_pos, -1, rx447_done
+    eq rx447_pos, -1, rx447_fail
+    jump $I10
+  rx447_done:
+    rx447_cur."!cursor_fail"()
+    if_null rx447_debug, debug_408
+    rx447_cur."!cursor_debug"("FAIL", "backslash:sym<A>")
+  debug_408:
+    .return (rx447_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__backslash:sym<misc>"  :subid("128_1282323996.47527") :method
+.sub "!PREFIX__backslash:sym<A>"  :subid("128_1284728471.30547") :method
 .annotate 'line', 3
-    new $P444, "ResizablePMCArray"
-    push $P444, ""
-    .return ($P444)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion"  :subid("129_1282323996.47527") :method
-.annotate 'line', 147
-    $P447 = self."!protoregex"("assertion")
-    .return ($P447)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion"  :subid("130_1282323996.47527") :method
-.annotate 'line', 147
-    $P449 = self."!PREFIX__!protoregex"("assertion")
-    .return ($P449)
+    $P449 = self."!PREFIX__!subrule"("obs", "A")
+    new $P450, "ResizablePMCArray"
+    push $P450, $P449
+    .return ($P450)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<?>"  :subid("131_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "backslash:sym<z>"  :subid("129_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .const 'Sub' $P458 = "133_1282323996.47527" 
-    capture_lex $P458
-    .local string rx451_tgt
-    .local int rx451_pos
-    .local int rx451_off
-    .local int rx451_eos
-    .local int rx451_rep
-    .local pmc rx451_cur
-    .local pmc rx451_debug
-    (rx451_cur, rx451_pos, rx451_tgt, $I10) = self."!cursor_start"()
-    getattribute rx451_debug, rx451_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx451_cur
-    .local pmc match
-    .lex "$/", match
-    length rx451_eos, rx451_tgt
-    gt rx451_pos, rx451_eos, rx451_done
-    set rx451_off, 0
-    lt rx451_pos, 2, rx451_start
-    sub rx451_off, rx451_pos, 1
-    substr rx451_tgt, rx451_tgt, rx451_off
-  rx451_start:
-    eq $I10, 1, rx451_restart
-    if_null rx451_debug, debug_394
-    rx451_cur."!cursor_debug"("START", "assertion:sym<?>")
-  debug_394:
+    .local string rx453_tgt
+    .local int rx453_pos
+    .local int rx453_off
+    .local int rx453_eos
+    .local int rx453_rep
+    .local pmc rx453_cur
+    .local pmc rx453_debug
+    (rx453_cur, rx453_pos, rx453_tgt, $I10) = self."!cursor_start"()
+    getattribute rx453_debug, rx453_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx453_cur
+    .local pmc match
+    .lex "$/", match
+    length rx453_eos, rx453_tgt
+    gt rx453_pos, rx453_eos, rx453_done
+    set rx453_off, 0
+    lt rx453_pos, 2, rx453_start
+    sub rx453_off, rx453_pos, 1
+    substr rx453_tgt, rx453_tgt, rx453_off
+  rx453_start:
+    eq $I10, 1, rx453_restart
+    if_null rx453_debug, debug_409
+    rx453_cur."!cursor_debug"("START", "backslash:sym<z>")
+  debug_409:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan455_done
-    goto rxscan455_scan
-  rxscan455_loop:
-    ($P10) = rx451_cur."from"()
-    inc $P10
-    set rx451_pos, $P10
-    ge rx451_pos, rx451_eos, rxscan455_done
-  rxscan455_scan:
-    set_addr $I10, rxscan455_loop
-    rx451_cur."!mark_push"(0, rx451_pos, $I10)
-  rxscan455_done:
-.annotate 'line', 149
-  # rx literal  "?"
-    add $I11, rx451_pos, 1
-    gt $I11, rx451_eos, rx451_fail
-    sub $I11, rx451_pos, rx451_off
-    ord $I11, rx451_tgt, $I11
-    ne $I11, 63, rx451_fail
-    add rx451_pos, 1
-  alt456_0:
-    set_addr $I10, alt456_1
-    rx451_cur."!mark_push"(0, rx451_pos, $I10)
-  # rx subrule "before" subtype=zerowidth negate=
-    rx451_cur."!cursor_pos"(rx451_pos)
-    .const 'Sub' $P458 = "133_1282323996.47527" 
-    capture_lex $P458
-    $P10 = rx451_cur."before"($P458)
-    unless $P10, rx451_fail
-    goto alt456_end
-  alt456_1:
-  # rx subrule "assertion" subtype=capture negate=
-    rx451_cur."!cursor_pos"(rx451_pos)
-    $P10 = rx451_cur."assertion"()
-    unless $P10, rx451_fail
-    rx451_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("assertion")
-    rx451_pos = $P10."pos"()
-  alt456_end:
-  # rx pass
-    rx451_cur."!cursor_pass"(rx451_pos, "assertion:sym<?>")
-    if_null rx451_debug, debug_399
-    rx451_cur."!cursor_debug"("PASS", "assertion:sym<?>", " at pos=", rx451_pos)
-  debug_399:
-    .return (rx451_cur)
-  rx451_restart:
+    ne $I10, -1, rxscan457_done
+    goto rxscan457_scan
+  rxscan457_loop:
+    ($P10) = rx453_cur."from"()
+    inc $P10
+    set rx453_pos, $P10
+    ge rx453_pos, rx453_eos, rxscan457_done
+  rxscan457_scan:
+    set_addr $I10, rxscan457_loop
+    rx453_cur."!mark_push"(0, rx453_pos, $I10)
+  rxscan457_done:
+.annotate 'line', 148
+  # rx literal  "z"
+    add $I11, rx453_pos, 1
+    gt $I11, rx453_eos, rx453_fail
+    sub $I11, rx453_pos, rx453_off
+    ord $I11, rx453_tgt, $I11
+    ne $I11, 122, rx453_fail
+    add rx453_pos, 1
+  # rx subrule "obs" subtype=method negate=
+    rx453_cur."!cursor_pos"(rx453_pos)
+    $P10 = rx453_cur."obs"("\\z as end-of-string matcher", "$")
+    unless $P10, rx453_fail
+    rx453_pos = $P10."pos"()
+  # rx pass
+    rx453_cur."!cursor_pass"(rx453_pos, "backslash:sym<z>")
+    if_null rx453_debug, debug_410
+    rx453_cur."!cursor_debug"("PASS", "backslash:sym<z>", " at pos=", rx453_pos)
+  debug_410:
+    .return (rx453_cur)
+  rx453_restart:
 .annotate 'line', 3
-    if_null rx451_debug, debug_400
-    rx451_cur."!cursor_debug"("NEXT", "assertion:sym<?>")
-  debug_400:
-  rx451_fail:
-    (rx451_rep, rx451_pos, $I10, $P10) = rx451_cur."!mark_fail"(0)
-    lt rx451_pos, -1, rx451_done
-    eq rx451_pos, -1, rx451_fail
-    jump $I10
-  rx451_done:
-    rx451_cur."!cursor_fail"()
-    if_null rx451_debug, debug_401
-    rx451_cur."!cursor_debug"("FAIL", "assertion:sym<?>")
-  debug_401:
-    .return (rx451_cur)
+    if_null rx453_debug, debug_411
+    rx453_cur."!cursor_debug"("NEXT", "backslash:sym<z>")
+  debug_411:
+  rx453_fail:
+    (rx453_rep, rx453_pos, $I10, $P10) = rx453_cur."!mark_fail"(0)
+    lt rx453_pos, -1, rx453_done
+    eq rx453_pos, -1, rx453_fail
+    jump $I10
+  rx453_done:
+    rx453_cur."!cursor_fail"()
+    if_null rx453_debug, debug_412
+    rx453_cur."!cursor_debug"("FAIL", "backslash:sym<z>")
+  debug_412:
+    .return (rx453_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<?>"  :subid("132_1282323996.47527") :method
+.sub "!PREFIX__backslash:sym<z>"  :subid("130_1284728471.30547") :method
 .annotate 'line', 3
-    $P453 = self."!PREFIX__!subrule"("assertion", "?")
-    new $P454, "ResizablePMCArray"
-    push $P454, $P453
-    push $P454, "?"
-    .return ($P454)
+    $P455 = self."!PREFIX__!subrule"("obs", "z")
+    new $P456, "ResizablePMCArray"
+    push $P456, $P455
+    .return ($P456)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block457"  :anon :subid("133_1282323996.47527") :method :outer("131_1282323996.47527")
-.annotate 'line', 149
+.sub "backslash:sym<Z>"  :subid("131_1284728471.30547") :method :outer("11_1284728471.30547")
+.annotate 'line', 3
     .local string rx459_tgt
     .local int rx459_pos
     .local int rx459_off
@@ -6560,38 +6633,45 @@
     substr rx459_tgt, rx459_tgt, rx459_off
   rx459_start:
     eq $I10, 1, rx459_restart
-    if_null rx459_debug, debug_395
-    rx459_cur."!cursor_debug"("START", "")
-  debug_395:
+    if_null rx459_debug, debug_413
+    rx459_cur."!cursor_debug"("START", "backslash:sym<Z>")
+  debug_413:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan460_done
-    goto rxscan460_scan
-  rxscan460_loop:
+    ne $I10, -1, rxscan463_done
+    goto rxscan463_scan
+  rxscan463_loop:
     ($P10) = rx459_cur."from"()
     inc $P10
     set rx459_pos, $P10
-    ge rx459_pos, rx459_eos, rxscan460_done
-  rxscan460_scan:
-    set_addr $I10, rxscan460_loop
+    ge rx459_pos, rx459_eos, rxscan463_done
+  rxscan463_scan:
+    set_addr $I10, rxscan463_loop
     rx459_cur."!mark_push"(0, rx459_pos, $I10)
-  rxscan460_done:
-  # rx literal  ">"
+  rxscan463_done:
+.annotate 'line', 149
+  # rx literal  "Z"
     add $I11, rx459_pos, 1
     gt $I11, rx459_eos, rx459_fail
     sub $I11, rx459_pos, rx459_off
     ord $I11, rx459_tgt, $I11
-    ne $I11, 62, rx459_fail
+    ne $I11, 90, rx459_fail
     add rx459_pos, 1
-  # rx pass
-    rx459_cur."!cursor_pass"(rx459_pos, "")
-    if_null rx459_debug, debug_396
-    rx459_cur."!cursor_debug"("PASS", "", " at pos=", rx459_pos)
-  debug_396:
+  # rx subrule "obs" subtype=method negate=
+    rx459_cur."!cursor_pos"(rx459_pos)
+    $P10 = rx459_cur."obs"("\\Z as end-of-string matcher", "\\n?$")
+    unless $P10, rx459_fail
+    rx459_pos = $P10."pos"()
+  # rx pass
+    rx459_cur."!cursor_pass"(rx459_pos, "backslash:sym<Z>")
+    if_null rx459_debug, debug_414
+    rx459_cur."!cursor_debug"("PASS", "backslash:sym<Z>", " at pos=", rx459_pos)
+  debug_414:
     .return (rx459_cur)
   rx459_restart:
-    if_null rx459_debug, debug_397
-    rx459_cur."!cursor_debug"("NEXT", "")
-  debug_397:
+.annotate 'line', 3
+    if_null rx459_debug, debug_415
+    rx459_cur."!cursor_debug"("NEXT", "backslash:sym<Z>")
+  debug_415:
   rx459_fail:
     (rx459_rep, rx459_pos, $I10, $P10) = rx459_cur."!mark_fail"(0)
     lt rx459_pos, -1, rx459_done
@@ -6599,1269 +6679,1007 @@
     jump $I10
   rx459_done:
     rx459_cur."!cursor_fail"()
-    if_null rx459_debug, debug_398
-    rx459_cur."!cursor_debug"("FAIL", "")
-  debug_398:
+    if_null rx459_debug, debug_416
+    rx459_cur."!cursor_debug"("FAIL", "backslash:sym<Z>")
+  debug_416:
     .return (rx459_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<!>"  :subid("134_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "!PREFIX__backslash:sym<Z>"  :subid("132_1284728471.30547") :method
 .annotate 'line', 3
-    .const 'Sub' $P469 = "136_1282323996.47527" 
-    capture_lex $P469
-    .local string rx462_tgt
-    .local int rx462_pos
-    .local int rx462_off
-    .local int rx462_eos
-    .local int rx462_rep
-    .local pmc rx462_cur
-    .local pmc rx462_debug
-    (rx462_cur, rx462_pos, rx462_tgt, $I10) = self."!cursor_start"()
-    getattribute rx462_debug, rx462_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx462_cur
-    .local pmc match
-    .lex "$/", match
-    length rx462_eos, rx462_tgt
-    gt rx462_pos, rx462_eos, rx462_done
-    set rx462_off, 0
-    lt rx462_pos, 2, rx462_start
-    sub rx462_off, rx462_pos, 1
-    substr rx462_tgt, rx462_tgt, rx462_off
-  rx462_start:
-    eq $I10, 1, rx462_restart
-    if_null rx462_debug, debug_402
-    rx462_cur."!cursor_debug"("START", "assertion:sym<!>")
-  debug_402:
+    $P461 = self."!PREFIX__!subrule"("obs", "Z")
+    new $P462, "ResizablePMCArray"
+    push $P462, $P461
+    .return ($P462)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "backslash:sym<Q>"  :subid("133_1284728471.30547") :method :outer("11_1284728471.30547")
+.annotate 'line', 3
+    .local string rx465_tgt
+    .local int rx465_pos
+    .local int rx465_off
+    .local int rx465_eos
+    .local int rx465_rep
+    .local pmc rx465_cur
+    .local pmc rx465_debug
+    (rx465_cur, rx465_pos, rx465_tgt, $I10) = self."!cursor_start"()
+    getattribute rx465_debug, rx465_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx465_cur
+    .local pmc match
+    .lex "$/", match
+    length rx465_eos, rx465_tgt
+    gt rx465_pos, rx465_eos, rx465_done
+    set rx465_off, 0
+    lt rx465_pos, 2, rx465_start
+    sub rx465_off, rx465_pos, 1
+    substr rx465_tgt, rx465_tgt, rx465_off
+  rx465_start:
+    eq $I10, 1, rx465_restart
+    if_null rx465_debug, debug_417
+    rx465_cur."!cursor_debug"("START", "backslash:sym<Q>")
+  debug_417:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan466_done
-    goto rxscan466_scan
-  rxscan466_loop:
-    ($P10) = rx462_cur."from"()
-    inc $P10
-    set rx462_pos, $P10
-    ge rx462_pos, rx462_eos, rxscan466_done
-  rxscan466_scan:
-    set_addr $I10, rxscan466_loop
-    rx462_cur."!mark_push"(0, rx462_pos, $I10)
-  rxscan466_done:
+    ne $I10, -1, rxscan469_done
+    goto rxscan469_scan
+  rxscan469_loop:
+    ($P10) = rx465_cur."from"()
+    inc $P10
+    set rx465_pos, $P10
+    ge rx465_pos, rx465_eos, rxscan469_done
+  rxscan469_scan:
+    set_addr $I10, rxscan469_loop
+    rx465_cur."!mark_push"(0, rx465_pos, $I10)
+  rxscan469_done:
 .annotate 'line', 150
-  # rx literal  "!"
-    add $I11, rx462_pos, 1
-    gt $I11, rx462_eos, rx462_fail
-    sub $I11, rx462_pos, rx462_off
-    ord $I11, rx462_tgt, $I11
-    ne $I11, 33, rx462_fail
-    add rx462_pos, 1
-  alt467_0:
-    set_addr $I10, alt467_1
-    rx462_cur."!mark_push"(0, rx462_pos, $I10)
-  # rx subrule "before" subtype=zerowidth negate=
-    rx462_cur."!cursor_pos"(rx462_pos)
-    .const 'Sub' $P469 = "136_1282323996.47527" 
-    capture_lex $P469
-    $P10 = rx462_cur."before"($P469)
-    unless $P10, rx462_fail
-    goto alt467_end
-  alt467_1:
-  # rx subrule "assertion" subtype=capture negate=
-    rx462_cur."!cursor_pos"(rx462_pos)
-    $P10 = rx462_cur."assertion"()
-    unless $P10, rx462_fail
-    rx462_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("assertion")
-    rx462_pos = $P10."pos"()
-  alt467_end:
-  # rx pass
-    rx462_cur."!cursor_pass"(rx462_pos, "assertion:sym<!>")
-    if_null rx462_debug, debug_407
-    rx462_cur."!cursor_debug"("PASS", "assertion:sym<!>", " at pos=", rx462_pos)
-  debug_407:
-    .return (rx462_cur)
-  rx462_restart:
+  # rx literal  "Q"
+    add $I11, rx465_pos, 1
+    gt $I11, rx465_eos, rx465_fail
+    sub $I11, rx465_pos, rx465_off
+    ord $I11, rx465_tgt, $I11
+    ne $I11, 81, rx465_fail
+    add rx465_pos, 1
+  # rx subrule "obs" subtype=method negate=
+    rx465_cur."!cursor_pos"(rx465_pos)
+    $P10 = rx465_cur."obs"("\\Q as quotemeta", "quotes or literal variable match")
+    unless $P10, rx465_fail
+    rx465_pos = $P10."pos"()
+  # rx pass
+    rx465_cur."!cursor_pass"(rx465_pos, "backslash:sym<Q>")
+    if_null rx465_debug, debug_418
+    rx465_cur."!cursor_debug"("PASS", "backslash:sym<Q>", " at pos=", rx465_pos)
+  debug_418:
+    .return (rx465_cur)
+  rx465_restart:
 .annotate 'line', 3
-    if_null rx462_debug, debug_408
-    rx462_cur."!cursor_debug"("NEXT", "assertion:sym<!>")
-  debug_408:
-  rx462_fail:
-    (rx462_rep, rx462_pos, $I10, $P10) = rx462_cur."!mark_fail"(0)
-    lt rx462_pos, -1, rx462_done
-    eq rx462_pos, -1, rx462_fail
-    jump $I10
-  rx462_done:
-    rx462_cur."!cursor_fail"()
-    if_null rx462_debug, debug_409
-    rx462_cur."!cursor_debug"("FAIL", "assertion:sym<!>")
-  debug_409:
-    .return (rx462_cur)
+    if_null rx465_debug, debug_419
+    rx465_cur."!cursor_debug"("NEXT", "backslash:sym<Q>")
+  debug_419:
+  rx465_fail:
+    (rx465_rep, rx465_pos, $I10, $P10) = rx465_cur."!mark_fail"(0)
+    lt rx465_pos, -1, rx465_done
+    eq rx465_pos, -1, rx465_fail
+    jump $I10
+  rx465_done:
+    rx465_cur."!cursor_fail"()
+    if_null rx465_debug, debug_420
+    rx465_cur."!cursor_debug"("FAIL", "backslash:sym<Q>")
+  debug_420:
+    .return (rx465_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<!>"  :subid("135_1282323996.47527") :method
+.sub "!PREFIX__backslash:sym<Q>"  :subid("134_1284728471.30547") :method
 .annotate 'line', 3
-    $P464 = self."!PREFIX__!subrule"("assertion", "!")
-    new $P465, "ResizablePMCArray"
-    push $P465, $P464
-    push $P465, "!"
-    .return ($P465)
+    $P467 = self."!PREFIX__!subrule"("obs", "Q")
+    new $P468, "ResizablePMCArray"
+    push $P468, $P467
+    .return ($P468)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block468"  :anon :subid("136_1282323996.47527") :method :outer("134_1282323996.47527")
-.annotate 'line', 150
-    .local string rx470_tgt
-    .local int rx470_pos
-    .local int rx470_off
-    .local int rx470_eos
-    .local int rx470_rep
-    .local pmc rx470_cur
-    .local pmc rx470_debug
-    (rx470_cur, rx470_pos, rx470_tgt, $I10) = self."!cursor_start"()
-    getattribute rx470_debug, rx470_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx470_cur
-    .local pmc match
-    .lex "$/", match
-    length rx470_eos, rx470_tgt
-    gt rx470_pos, rx470_eos, rx470_done
-    set rx470_off, 0
-    lt rx470_pos, 2, rx470_start
-    sub rx470_off, rx470_pos, 1
-    substr rx470_tgt, rx470_tgt, rx470_off
-  rx470_start:
-    eq $I10, 1, rx470_restart
-    if_null rx470_debug, debug_403
-    rx470_cur."!cursor_debug"("START", "")
-  debug_403:
+.sub "backslash:sym<unrec>"  :subid("135_1284728471.30547") :method :outer("11_1284728471.30547")
+.annotate 'line', 3
+    .const 'Sub' $P478 = "137_1284728471.30547" 
+    capture_lex $P478
+    .local string rx471_tgt
+    .local int rx471_pos
+    .local int rx471_off
+    .local int rx471_eos
+    .local int rx471_rep
+    .local pmc rx471_cur
+    .local pmc rx471_debug
+    (rx471_cur, rx471_pos, rx471_tgt, $I10) = self."!cursor_start"()
+    getattribute rx471_debug, rx471_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx471_cur
+    .local pmc match
+    .lex "$/", match
+    length rx471_eos, rx471_tgt
+    gt rx471_pos, rx471_eos, rx471_done
+    set rx471_off, 0
+    lt rx471_pos, 2, rx471_start
+    sub rx471_off, rx471_pos, 1
+    substr rx471_tgt, rx471_tgt, rx471_off
+  rx471_start:
+    eq $I10, 1, rx471_restart
+    if_null rx471_debug, debug_421
+    rx471_cur."!cursor_debug"("START", "backslash:sym<unrec>")
+  debug_421:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan471_done
-    goto rxscan471_scan
-  rxscan471_loop:
-    ($P10) = rx470_cur."from"()
-    inc $P10
-    set rx470_pos, $P10
-    ge rx470_pos, rx470_eos, rxscan471_done
-  rxscan471_scan:
-    set_addr $I10, rxscan471_loop
-    rx470_cur."!mark_push"(0, rx470_pos, $I10)
-  rxscan471_done:
-  # rx literal  ">"
-    add $I11, rx470_pos, 1
-    gt $I11, rx470_eos, rx470_fail
-    sub $I11, rx470_pos, rx470_off
-    ord $I11, rx470_tgt, $I11
-    ne $I11, 62, rx470_fail
-    add rx470_pos, 1
-  # rx pass
-    rx470_cur."!cursor_pass"(rx470_pos, "")
-    if_null rx470_debug, debug_404
-    rx470_cur."!cursor_debug"("PASS", "", " at pos=", rx470_pos)
-  debug_404:
-    .return (rx470_cur)
-  rx470_restart:
-    if_null rx470_debug, debug_405
-    rx470_cur."!cursor_debug"("NEXT", "")
-  debug_405:
-  rx470_fail:
-    (rx470_rep, rx470_pos, $I10, $P10) = rx470_cur."!mark_fail"(0)
-    lt rx470_pos, -1, rx470_done
-    eq rx470_pos, -1, rx470_fail
-    jump $I10
-  rx470_done:
-    rx470_cur."!cursor_fail"()
-    if_null rx470_debug, debug_406
-    rx470_cur."!cursor_debug"("FAIL", "")
-  debug_406:
-    .return (rx470_cur)
+    ne $I10, -1, rxscan474_done
+    goto rxscan474_scan
+  rxscan474_loop:
+    ($P10) = rx471_cur."from"()
+    inc $P10
+    set rx471_pos, $P10
+    ge rx471_pos, rx471_eos, rxscan474_done
+  rxscan474_scan:
+    set_addr $I10, rxscan474_loop
+    rx471_cur."!mark_push"(0, rx471_pos, $I10)
+  rxscan474_done:
+.annotate 'line', 151
+    rx471_cur."!cursor_pos"(rx471_pos)
+    find_lex $P475, unicode:"$\x{a2}"
+    $P476 = $P475."MATCH"()
+    store_lex "$/", $P476
+    .const 'Sub' $P478 = "137_1284728471.30547" 
+    capture_lex $P478
+    $P479 = $P478()
+  # rx charclass w
+    ge rx471_pos, rx471_eos, rx471_fail
+    sub $I10, rx471_pos, rx471_off
+    is_cclass $I11, 8192, rx471_tgt, $I10
+    unless $I11, rx471_fail
+    inc rx471_pos
+  # rx subrule "panic" subtype=method negate=
+    rx471_cur."!cursor_pos"(rx471_pos)
+    $P10 = rx471_cur."panic"("Unrecognized backslash sequence")
+    unless $P10, rx471_fail
+    rx471_pos = $P10."pos"()
+  # rx pass
+    rx471_cur."!cursor_pass"(rx471_pos, "backslash:sym<unrec>")
+    if_null rx471_debug, debug_422
+    rx471_cur."!cursor_debug"("PASS", "backslash:sym<unrec>", " at pos=", rx471_pos)
+  debug_422:
+    .return (rx471_cur)
+  rx471_restart:
+.annotate 'line', 3
+    if_null rx471_debug, debug_423
+    rx471_cur."!cursor_debug"("NEXT", "backslash:sym<unrec>")
+  debug_423:
+  rx471_fail:
+    (rx471_rep, rx471_pos, $I10, $P10) = rx471_cur."!mark_fail"(0)
+    lt rx471_pos, -1, rx471_done
+    eq rx471_pos, -1, rx471_fail
+    jump $I10
+  rx471_done:
+    rx471_cur."!cursor_fail"()
+    if_null rx471_debug, debug_424
+    rx471_cur."!cursor_debug"("FAIL", "backslash:sym<unrec>")
+  debug_424:
+    .return (rx471_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<method>"  :subid("137_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "!PREFIX__backslash:sym<unrec>"  :subid("136_1284728471.30547") :method
 .annotate 'line', 3
-    .local string rx473_tgt
-    .local int rx473_pos
-    .local int rx473_off
-    .local int rx473_eos
-    .local int rx473_rep
-    .local pmc rx473_cur
-    .local pmc rx473_debug
-    (rx473_cur, rx473_pos, rx473_tgt, $I10) = self."!cursor_start"()
-    getattribute rx473_debug, rx473_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx473_cur
-    .local pmc match
-    .lex "$/", match
-    length rx473_eos, rx473_tgt
-    gt rx473_pos, rx473_eos, rx473_done
-    set rx473_off, 0
-    lt rx473_pos, 2, rx473_start
-    sub rx473_off, rx473_pos, 1
-    substr rx473_tgt, rx473_tgt, rx473_off
-  rx473_start:
-    eq $I10, 1, rx473_restart
-    if_null rx473_debug, debug_410
-    rx473_cur."!cursor_debug"("START", "assertion:sym<method>")
-  debug_410:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan477_done
-    goto rxscan477_scan
-  rxscan477_loop:
-    ($P10) = rx473_cur."from"()
-    inc $P10
-    set rx473_pos, $P10
-    ge rx473_pos, rx473_eos, rxscan477_done
-  rxscan477_scan:
-    set_addr $I10, rxscan477_loop
-    rx473_cur."!mark_push"(0, rx473_pos, $I10)
-  rxscan477_done:
-.annotate 'line', 153
-  # rx literal  "."
-    add $I11, rx473_pos, 1
-    gt $I11, rx473_eos, rx473_fail
-    sub $I11, rx473_pos, rx473_off
-    ord $I11, rx473_tgt, $I11
-    ne $I11, 46, rx473_fail
-    add rx473_pos, 1
-  # rx subrule "assertion" subtype=capture negate=
-    rx473_cur."!cursor_pos"(rx473_pos)
-    $P10 = rx473_cur."assertion"()
-    unless $P10, rx473_fail
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("assertion")
-    rx473_pos = $P10."pos"()
-.annotate 'line', 152
-  # rx pass
-    rx473_cur."!cursor_pass"(rx473_pos, "assertion:sym<method>")
-    if_null rx473_debug, debug_411
-    rx473_cur."!cursor_debug"("PASS", "assertion:sym<method>", " at pos=", rx473_pos)
-  debug_411:
-    .return (rx473_cur)
-  rx473_restart:
-.annotate 'line', 3
-    if_null rx473_debug, debug_412
-    rx473_cur."!cursor_debug"("NEXT", "assertion:sym<method>")
-  debug_412:
-  rx473_fail:
-    (rx473_rep, rx473_pos, $I10, $P10) = rx473_cur."!mark_fail"(0)
-    lt rx473_pos, -1, rx473_done
-    eq rx473_pos, -1, rx473_fail
-    jump $I10
-  rx473_done:
-    rx473_cur."!cursor_fail"()
-    if_null rx473_debug, debug_413
-    rx473_cur."!cursor_debug"("FAIL", "assertion:sym<method>")
-  debug_413:
-    .return (rx473_cur)
-    .return ()
+    new $P473, "ResizablePMCArray"
+    push $P473, ""
+    .return ($P473)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<method>"  :subid("138_1282323996.47527") :method
-.annotate 'line', 3
-    $P475 = self."!PREFIX__!subrule"("assertion", ".")
-    new $P476, "ResizablePMCArray"
-    push $P476, $P475
-    .return ($P476)
+.sub "_block477"  :anon :subid("137_1284728471.30547") :outer("135_1284728471.30547")
+.annotate 'line', 151
+    .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<name>"  :subid("139_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "backslash:sym<misc>"  :subid("138_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .const 'Sub' $P487 = "141_1282323996.47527" 
-    capture_lex $P487
-    .local string rx479_tgt
-    .local int rx479_pos
-    .local int rx479_off
-    .local int rx479_eos
-    .local int rx479_rep
-    .local pmc rx479_cur
-    .local pmc rx479_debug
-    (rx479_cur, rx479_pos, rx479_tgt, $I10) = self."!cursor_start"()
-    rx479_cur."!cursor_caparray"("nibbler", "arglist", "assertion")
-    getattribute rx479_debug, rx479_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx479_cur
+    .local string rx481_tgt
+    .local int rx481_pos
+    .local int rx481_off
+    .local int rx481_eos
+    .local int rx481_rep
+    .local pmc rx481_cur
+    .local pmc rx481_debug
+    (rx481_cur, rx481_pos, rx481_tgt, $I10) = self."!cursor_start"()
+    getattribute rx481_debug, rx481_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx481_cur
     .local pmc match
     .lex "$/", match
-    length rx479_eos, rx479_tgt
-    gt rx479_pos, rx479_eos, rx479_done
-    set rx479_off, 0
-    lt rx479_pos, 2, rx479_start
-    sub rx479_off, rx479_pos, 1
-    substr rx479_tgt, rx479_tgt, rx479_off
-  rx479_start:
-    eq $I10, 1, rx479_restart
-    if_null rx479_debug, debug_414
-    rx479_cur."!cursor_debug"("START", "assertion:sym<name>")
-  debug_414:
+    length rx481_eos, rx481_tgt
+    gt rx481_pos, rx481_eos, rx481_done
+    set rx481_off, 0
+    lt rx481_pos, 2, rx481_start
+    sub rx481_off, rx481_pos, 1
+    substr rx481_tgt, rx481_tgt, rx481_off
+  rx481_start:
+    eq $I10, 1, rx481_restart
+    if_null rx481_debug, debug_425
+    rx481_cur."!cursor_debug"("START", "backslash:sym<misc>")
+  debug_425:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan483_done
-    goto rxscan483_scan
-  rxscan483_loop:
-    ($P10) = rx479_cur."from"()
-    inc $P10
-    set rx479_pos, $P10
-    ge rx479_pos, rx479_eos, rxscan483_done
-  rxscan483_scan:
-    set_addr $I10, rxscan483_loop
-    rx479_cur."!mark_push"(0, rx479_pos, $I10)
-  rxscan483_done:
-.annotate 'line', 157
-  # rx subrule "identifier" subtype=capture negate=
-    rx479_cur."!cursor_pos"(rx479_pos)
-    $P10 = rx479_cur."identifier"()
-    unless $P10, rx479_fail
-    rx479_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("longname")
-    rx479_pos = $P10."pos"()
-.annotate 'line', 164
-  # rx rxquantr484 ** 0..1
-    set_addr $I10, rxquantr484_done
-    rx479_cur."!mark_push"(0, rx479_pos, $I10)
-  rxquantr484_loop:
-  alt485_0:
-.annotate 'line', 158
-    set_addr $I10, alt485_1
-    rx479_cur."!mark_push"(0, rx479_pos, $I10)
-.annotate 'line', 159
-  # rx subrule "before" subtype=zerowidth negate=
-    rx479_cur."!cursor_pos"(rx479_pos)
-    .const 'Sub' $P487 = "141_1282323996.47527" 
-    capture_lex $P487
-    $P10 = rx479_cur."before"($P487)
-    unless $P10, rx479_fail
-    goto alt485_end
-  alt485_1:
-    set_addr $I10, alt485_2
-    rx479_cur."!mark_push"(0, rx479_pos, $I10)
-.annotate 'line', 160
-  # rx literal  "="
-    add $I11, rx479_pos, 1
-    gt $I11, rx479_eos, rx479_fail
-    sub $I11, rx479_pos, rx479_off
-    ord $I11, rx479_tgt, $I11
-    ne $I11, 61, rx479_fail
-    add rx479_pos, 1
-  # rx subrule "assertion" subtype=capture negate=
-    rx479_cur."!cursor_pos"(rx479_pos)
-    $P10 = rx479_cur."assertion"()
-    unless $P10, rx479_fail
-    rx479_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("assertion")
-    rx479_pos = $P10."pos"()
-    goto alt485_end
-  alt485_2:
-    set_addr $I10, alt485_3
-    rx479_cur."!mark_push"(0, rx479_pos, $I10)
-.annotate 'line', 161
-  # rx literal  ":"
-    add $I11, rx479_pos, 1
-    gt $I11, rx479_eos, rx479_fail
-    sub $I11, rx479_pos, rx479_off
-    ord $I11, rx479_tgt, $I11
-    ne $I11, 58, rx479_fail
-    add rx479_pos, 1
-  # rx subrule "arglist" subtype=capture negate=
-    rx479_cur."!cursor_pos"(rx479_pos)
-    $P10 = rx479_cur."arglist"()
-    unless $P10, rx479_fail
-    rx479_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("arglist")
-    rx479_pos = $P10."pos"()
-    goto alt485_end
-  alt485_3:
-    set_addr $I10, alt485_4
-    rx479_cur."!mark_push"(0, rx479_pos, $I10)
-.annotate 'line', 162
-  # rx literal  "("
-    add $I11, rx479_pos, 1
-    gt $I11, rx479_eos, rx479_fail
-    sub $I11, rx479_pos, rx479_off
-    ord $I11, rx479_tgt, $I11
-    ne $I11, 40, rx479_fail
-    add rx479_pos, 1
-  # rx subrule "arglist" subtype=capture negate=
-    rx479_cur."!cursor_pos"(rx479_pos)
-    $P10 = rx479_cur."arglist"()
-    unless $P10, rx479_fail
-    rx479_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("arglist")
-    rx479_pos = $P10."pos"()
-  # rx literal  ")"
-    add $I11, rx479_pos, 1
-    gt $I11, rx479_eos, rx479_fail
-    sub $I11, rx479_pos, rx479_off
-    ord $I11, rx479_tgt, $I11
-    ne $I11, 41, rx479_fail
-    add rx479_pos, 1
-    goto alt485_end
-  alt485_4:
-.annotate 'line', 163
-  # rx subrule "normspace" subtype=method negate=
-    rx479_cur."!cursor_pos"(rx479_pos)
-    $P10 = rx479_cur."normspace"()
-    unless $P10, rx479_fail
-    rx479_pos = $P10."pos"()
-  # rx subrule "nibbler" subtype=capture negate=
-    rx479_cur."!cursor_pos"(rx479_pos)
-    $P10 = rx479_cur."nibbler"()
-    unless $P10, rx479_fail
-    rx479_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("nibbler")
-    rx479_pos = $P10."pos"()
-  alt485_end:
-.annotate 'line', 164
-    set_addr $I10, rxquantr484_done
-    (rx479_rep) = rx479_cur."!mark_commit"($I10)
-  rxquantr484_done:
-.annotate 'line', 156
-  # rx pass
-    rx479_cur."!cursor_pass"(rx479_pos, "assertion:sym<name>")
-    if_null rx479_debug, debug_419
-    rx479_cur."!cursor_debug"("PASS", "assertion:sym<name>", " at pos=", rx479_pos)
-  debug_419:
-    .return (rx479_cur)
-  rx479_restart:
+    ne $I10, -1, rxscan484_done
+    goto rxscan484_scan
+  rxscan484_loop:
+    ($P10) = rx481_cur."from"()
+    inc $P10
+    set rx481_pos, $P10
+    ge rx481_pos, rx481_eos, rxscan484_done
+  rxscan484_scan:
+    set_addr $I10, rxscan484_loop
+    rx481_cur."!mark_push"(0, rx481_pos, $I10)
+  rxscan484_done:
+.annotate 'line', 152
+  # rx charclass W
+    ge rx481_pos, rx481_eos, rx481_fail
+    sub $I10, rx481_pos, rx481_off
+    is_cclass $I11, 8192, rx481_tgt, $I10
+    if $I11, rx481_fail
+    inc rx481_pos
+  # rx pass
+    rx481_cur."!cursor_pass"(rx481_pos, "backslash:sym<misc>")
+    if_null rx481_debug, debug_426
+    rx481_cur."!cursor_debug"("PASS", "backslash:sym<misc>", " at pos=", rx481_pos)
+  debug_426:
+    .return (rx481_cur)
+  rx481_restart:
 .annotate 'line', 3
-    if_null rx479_debug, debug_420
-    rx479_cur."!cursor_debug"("NEXT", "assertion:sym<name>")
-  debug_420:
-  rx479_fail:
-    (rx479_rep, rx479_pos, $I10, $P10) = rx479_cur."!mark_fail"(0)
-    lt rx479_pos, -1, rx479_done
-    eq rx479_pos, -1, rx479_fail
-    jump $I10
-  rx479_done:
-    rx479_cur."!cursor_fail"()
-    if_null rx479_debug, debug_421
-    rx479_cur."!cursor_debug"("FAIL", "assertion:sym<name>")
-  debug_421:
-    .return (rx479_cur)
+    if_null rx481_debug, debug_427
+    rx481_cur."!cursor_debug"("NEXT", "backslash:sym<misc>")
+  debug_427:
+  rx481_fail:
+    (rx481_rep, rx481_pos, $I10, $P10) = rx481_cur."!mark_fail"(0)
+    lt rx481_pos, -1, rx481_done
+    eq rx481_pos, -1, rx481_fail
+    jump $I10
+  rx481_done:
+    rx481_cur."!cursor_fail"()
+    if_null rx481_debug, debug_428
+    rx481_cur."!cursor_debug"("FAIL", "backslash:sym<misc>")
+  debug_428:
+    .return (rx481_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<name>"  :subid("140_1282323996.47527") :method
+.sub "!PREFIX__backslash:sym<misc>"  :subid("139_1284728471.30547") :method
 .annotate 'line', 3
-    $P481 = self."!PREFIX__!subrule"("identifier", "")
-    new $P482, "ResizablePMCArray"
-    push $P482, $P481
-    .return ($P482)
+    new $P483, "ResizablePMCArray"
+    push $P483, ""
+    .return ($P483)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block486"  :anon :subid("141_1282323996.47527") :method :outer("139_1282323996.47527")
-.annotate 'line', 159
-    .local string rx488_tgt
-    .local int rx488_pos
-    .local int rx488_off
-    .local int rx488_eos
-    .local int rx488_rep
-    .local pmc rx488_cur
-    .local pmc rx488_debug
-    (rx488_cur, rx488_pos, rx488_tgt, $I10) = self."!cursor_start"()
-    getattribute rx488_debug, rx488_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx488_cur
-    .local pmc match
-    .lex "$/", match
-    length rx488_eos, rx488_tgt
-    gt rx488_pos, rx488_eos, rx488_done
-    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:
-    eq $I10, 1, rx488_restart
-    if_null rx488_debug, debug_415
-    rx488_cur."!cursor_debug"("START", "")
-  debug_415:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan489_done
-    goto rxscan489_scan
-  rxscan489_loop:
-    ($P10) = rx488_cur."from"()
-    inc $P10
-    set rx488_pos, $P10
-    ge rx488_pos, rx488_eos, rxscan489_done
-  rxscan489_scan:
-    set_addr $I10, rxscan489_loop
-    rx488_cur."!mark_push"(0, rx488_pos, $I10)
-  rxscan489_done:
-  # rx literal  ">"
-    add $I11, rx488_pos, 1
-    gt $I11, rx488_eos, rx488_fail
-    sub $I11, rx488_pos, rx488_off
-    ord $I11, rx488_tgt, $I11
-    ne $I11, 62, rx488_fail
-    add rx488_pos, 1
-  # rx pass
-    rx488_cur."!cursor_pass"(rx488_pos, "")
-    if_null rx488_debug, debug_416
-    rx488_cur."!cursor_debug"("PASS", "", " at pos=", rx488_pos)
-  debug_416:
-    .return (rx488_cur)
-  rx488_restart:
-    if_null rx488_debug, debug_417
-    rx488_cur."!cursor_debug"("NEXT", "")
-  debug_417:
-  rx488_fail:
-    (rx488_rep, rx488_pos, $I10, $P10) = rx488_cur."!mark_fail"(0)
-    lt rx488_pos, -1, rx488_done
-    eq rx488_pos, -1, rx488_fail
-    jump $I10
-  rx488_done:
-    rx488_cur."!cursor_fail"()
-    if_null rx488_debug, debug_418
-    rx488_cur."!cursor_debug"("FAIL", "")
-  debug_418:
-    .return (rx488_cur)
-    .return ()
+.sub "assertion"  :subid("140_1284728471.30547") :method
+.annotate 'line', 154
+    $P486 = self."!protoregex"("assertion")
+    .return ($P486)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "!PREFIX__assertion"  :subid("141_1284728471.30547") :method
+.annotate 'line', 154
+    $P488 = self."!PREFIX__!protoregex"("assertion")
+    .return ($P488)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "assertion:sym<[>"  :subid("142_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "assertion:sym<?>"  :subid("142_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .const 'Sub' $P496 = "144_1282323996.47527" 
-    capture_lex $P496
-    .local string rx491_tgt
-    .local int rx491_pos
-    .local int rx491_off
-    .local int rx491_eos
-    .local int rx491_rep
-    .local pmc rx491_cur
-    .local pmc rx491_debug
-    (rx491_cur, rx491_pos, rx491_tgt, $I10) = self."!cursor_start"()
-    rx491_cur."!cursor_caparray"("cclass_elem")
-    getattribute rx491_debug, rx491_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx491_cur
-    .local pmc match
-    .lex "$/", match
-    length rx491_eos, rx491_tgt
-    gt rx491_pos, rx491_eos, rx491_done
-    set rx491_off, 0
-    lt rx491_pos, 2, rx491_start
-    sub rx491_off, rx491_pos, 1
-    substr rx491_tgt, rx491_tgt, rx491_off
-  rx491_start:
-    eq $I10, 1, rx491_restart
-    if_null rx491_debug, debug_422
-    rx491_cur."!cursor_debug"("START", "assertion:sym<[>")
-  debug_422:
+    .const 'Sub' $P497 = "144_1284728471.30547" 
+    capture_lex $P497
+    .local string rx490_tgt
+    .local int rx490_pos
+    .local int rx490_off
+    .local int rx490_eos
+    .local int rx490_rep
+    .local pmc rx490_cur
+    .local pmc rx490_debug
+    (rx490_cur, rx490_pos, rx490_tgt, $I10) = self."!cursor_start"()
+    getattribute rx490_debug, rx490_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx490_cur
+    .local pmc match
+    .lex "$/", match
+    length rx490_eos, rx490_tgt
+    gt rx490_pos, rx490_eos, rx490_done
+    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:
+    eq $I10, 1, rx490_restart
+    if_null rx490_debug, debug_429
+    rx490_cur."!cursor_debug"("START", "assertion:sym<?>")
+  debug_429:
     $I10 = self.'from'()
     ne $I10, -1, rxscan494_done
     goto rxscan494_scan
   rxscan494_loop:
-    ($P10) = rx491_cur."from"()
+    ($P10) = rx490_cur."from"()
     inc $P10
-    set rx491_pos, $P10
-    ge rx491_pos, rx491_eos, rxscan494_done
+    set rx490_pos, $P10
+    ge rx490_pos, rx490_eos, rxscan494_done
   rxscan494_scan:
     set_addr $I10, rxscan494_loop
-    rx491_cur."!mark_push"(0, rx491_pos, $I10)
+    rx490_cur."!mark_push"(0, rx490_pos, $I10)
   rxscan494_done:
-.annotate 'line', 167
+.annotate 'line', 156
+  # rx literal  "?"
+    add $I11, rx490_pos, 1
+    gt $I11, rx490_eos, rx490_fail
+    sub $I11, rx490_pos, rx490_off
+    ord $I11, rx490_tgt, $I11
+    ne $I11, 63, rx490_fail
+    add rx490_pos, 1
+  alt495_0:
+    set_addr $I10, alt495_1
+    rx490_cur."!mark_push"(0, rx490_pos, $I10)
   # rx subrule "before" subtype=zerowidth negate=
-    rx491_cur."!cursor_pos"(rx491_pos)
-    .const 'Sub' $P496 = "144_1282323996.47527" 
-    capture_lex $P496
-    $P10 = rx491_cur."before"($P496)
-    unless $P10, rx491_fail
-  # rx rxquantr500 ** 1..*
-    set_addr $I10, rxquantr500_done
-    rx491_cur."!mark_push"(0, -1, $I10)
-  rxquantr500_loop:
-  # rx subrule "cclass_elem" subtype=capture negate=
-    rx491_cur."!cursor_pos"(rx491_pos)
-    $P10 = rx491_cur."cclass_elem"()
-    unless $P10, rx491_fail
-    goto rxsubrule501_pass
-  rxsubrule501_back:
-    $P10 = $P10."!cursor_next"()
-    unless $P10, rx491_fail
-  rxsubrule501_pass:
-    set_addr $I10, rxsubrule501_back
-    rx491_cur."!mark_push"(0, rx491_pos, $I10, $P10)
-    $P10."!cursor_names"("cclass_elem")
-    rx491_pos = $P10."pos"()
-    set_addr $I10, rxquantr500_done
-    (rx491_rep) = rx491_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr500_done
-    rx491_cur."!mark_push"(rx491_rep, rx491_pos, $I10)
-    goto rxquantr500_loop
-  rxquantr500_done:
-  # rx pass
-    rx491_cur."!cursor_pass"(rx491_pos, "assertion:sym<[>")
-    if_null rx491_debug, debug_427
-    rx491_cur."!cursor_debug"("PASS", "assertion:sym<[>", " at pos=", rx491_pos)
-  debug_427:
-    .return (rx491_cur)
-  rx491_restart:
-.annotate 'line', 3
-    if_null rx491_debug, debug_428
-    rx491_cur."!cursor_debug"("NEXT", "assertion:sym<[>")
-  debug_428:
-  rx491_fail:
-    (rx491_rep, rx491_pos, $I10, $P10) = rx491_cur."!mark_fail"(0)
-    lt rx491_pos, -1, rx491_done
-    eq rx491_pos, -1, rx491_fail
-    jump $I10
-  rx491_done:
-    rx491_cur."!cursor_fail"()
-    if_null rx491_debug, debug_429
-    rx491_cur."!cursor_debug"("FAIL", "assertion:sym<[>")
-  debug_429:
-    .return (rx491_cur)
-    .return ()
+    rx490_cur."!cursor_pos"(rx490_pos)
+    .const 'Sub' $P497 = "144_1284728471.30547" 
+    capture_lex $P497
+    $P10 = rx490_cur."before"($P497)
+    unless $P10, rx490_fail
+    goto alt495_end
+  alt495_1:
+  # rx subrule "assertion" subtype=capture negate=
+    rx490_cur."!cursor_pos"(rx490_pos)
+    $P10 = rx490_cur."assertion"()
+    unless $P10, rx490_fail
+    rx490_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("assertion")
+    rx490_pos = $P10."pos"()
+  alt495_end:
+  # rx pass
+    rx490_cur."!cursor_pass"(rx490_pos, "assertion:sym<?>")
+    if_null rx490_debug, debug_434
+    rx490_cur."!cursor_debug"("PASS", "assertion:sym<?>", " at pos=", rx490_pos)
+  debug_434:
+    .return (rx490_cur)
+  rx490_restart:
+.annotate 'line', 3
+    if_null rx490_debug, debug_435
+    rx490_cur."!cursor_debug"("NEXT", "assertion:sym<?>")
+  debug_435:
+  rx490_fail:
+    (rx490_rep, rx490_pos, $I10, $P10) = rx490_cur."!mark_fail"(0)
+    lt rx490_pos, -1, rx490_done
+    eq rx490_pos, -1, rx490_fail
+    jump $I10
+  rx490_done:
+    rx490_cur."!cursor_fail"()
+    if_null rx490_debug, debug_436
+    rx490_cur."!cursor_debug"("FAIL", "assertion:sym<?>")
+  debug_436:
+    .return (rx490_cur)
+    .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__assertion:sym<[>"  :subid("143_1282323996.47527") :method
+.sub "!PREFIX__assertion:sym<?>"  :subid("143_1284728471.30547") :method
 .annotate 'line', 3
+    $P492 = self."!PREFIX__!subrule"("assertion", "?")
     new $P493, "ResizablePMCArray"
-    push $P493, ""
+    push $P493, $P492
+    push $P493, "?"
     .return ($P493)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block495"  :anon :subid("144_1282323996.47527") :method :outer("142_1282323996.47527")
-.annotate 'line', 167
-    .local string rx497_tgt
-    .local int rx497_pos
-    .local int rx497_off
-    .local int rx497_eos
-    .local int rx497_rep
-    .local pmc rx497_cur
-    .local pmc rx497_debug
-    (rx497_cur, rx497_pos, rx497_tgt, $I10) = self."!cursor_start"()
-    getattribute rx497_debug, rx497_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx497_cur
-    .local pmc match
-    .lex "$/", match
-    length rx497_eos, rx497_tgt
-    gt rx497_pos, rx497_eos, rx497_done
-    set rx497_off, 0
-    lt rx497_pos, 2, rx497_start
-    sub rx497_off, rx497_pos, 1
-    substr rx497_tgt, rx497_tgt, rx497_off
-  rx497_start:
-    eq $I10, 1, rx497_restart
-    if_null rx497_debug, debug_423
-    rx497_cur."!cursor_debug"("START", "")
-  debug_423:
+.sub "_block496"  :anon :subid("144_1284728471.30547") :method :outer("142_1284728471.30547")
+.annotate 'line', 156
+    .local string rx498_tgt
+    .local int rx498_pos
+    .local int rx498_off
+    .local int rx498_eos
+    .local int rx498_rep
+    .local pmc rx498_cur
+    .local pmc rx498_debug
+    (rx498_cur, rx498_pos, rx498_tgt, $I10) = self."!cursor_start"()
+    getattribute rx498_debug, rx498_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx498_cur
+    .local pmc match
+    .lex "$/", match
+    length rx498_eos, rx498_tgt
+    gt rx498_pos, rx498_eos, rx498_done
+    set rx498_off, 0
+    lt rx498_pos, 2, rx498_start
+    sub rx498_off, rx498_pos, 1
+    substr rx498_tgt, rx498_tgt, rx498_off
+  rx498_start:
+    eq $I10, 1, rx498_restart
+    if_null rx498_debug, debug_430
+    rx498_cur."!cursor_debug"("START", "")
+  debug_430:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan498_done
-    goto rxscan498_scan
-  rxscan498_loop:
-    ($P10) = rx497_cur."from"()
-    inc $P10
-    set rx497_pos, $P10
-    ge rx497_pos, rx497_eos, rxscan498_done
-  rxscan498_scan:
-    set_addr $I10, rxscan498_loop
-    rx497_cur."!mark_push"(0, rx497_pos, $I10)
-  rxscan498_done:
-  alt499_0:
-    set_addr $I10, alt499_1
-    rx497_cur."!mark_push"(0, rx497_pos, $I10)
-  # rx literal  "["
-    add $I11, rx497_pos, 1
-    gt $I11, rx497_eos, rx497_fail
-    sub $I11, rx497_pos, rx497_off
-    ord $I11, rx497_tgt, $I11
-    ne $I11, 91, rx497_fail
-    add rx497_pos, 1
-    goto alt499_end
-  alt499_1:
-    set_addr $I10, alt499_2
-    rx497_cur."!mark_push"(0, rx497_pos, $I10)
-  # rx literal  "+"
-    add $I11, rx497_pos, 1
-    gt $I11, rx497_eos, rx497_fail
-    sub $I11, rx497_pos, rx497_off
-    ord $I11, rx497_tgt, $I11
-    ne $I11, 43, rx497_fail
-    add rx497_pos, 1
-    goto alt499_end
-  alt499_2:
-  # rx literal  "-"
-    add $I11, rx497_pos, 1
-    gt $I11, rx497_eos, rx497_fail
-    sub $I11, rx497_pos, rx497_off
-    ord $I11, rx497_tgt, $I11
-    ne $I11, 45, rx497_fail
-    add rx497_pos, 1
-  alt499_end:
-  # rx pass
-    rx497_cur."!cursor_pass"(rx497_pos, "")
-    if_null rx497_debug, debug_424
-    rx497_cur."!cursor_debug"("PASS", "", " at pos=", rx497_pos)
-  debug_424:
-    .return (rx497_cur)
-  rx497_restart:
-    if_null rx497_debug, debug_425
-    rx497_cur."!cursor_debug"("NEXT", "")
-  debug_425:
-  rx497_fail:
-    (rx497_rep, rx497_pos, $I10, $P10) = rx497_cur."!mark_fail"(0)
-    lt rx497_pos, -1, rx497_done
-    eq rx497_pos, -1, rx497_fail
-    jump $I10
-  rx497_done:
-    rx497_cur."!cursor_fail"()
-    if_null rx497_debug, debug_426
-    rx497_cur."!cursor_debug"("FAIL", "")
-  debug_426:
-    .return (rx497_cur)
+    ne $I10, -1, rxscan499_done
+    goto rxscan499_scan
+  rxscan499_loop:
+    ($P10) = rx498_cur."from"()
+    inc $P10
+    set rx498_pos, $P10
+    ge rx498_pos, rx498_eos, rxscan499_done
+  rxscan499_scan:
+    set_addr $I10, rxscan499_loop
+    rx498_cur."!mark_push"(0, rx498_pos, $I10)
+  rxscan499_done:
+  # rx literal  ">"
+    add $I11, rx498_pos, 1
+    gt $I11, rx498_eos, rx498_fail
+    sub $I11, rx498_pos, rx498_off
+    ord $I11, rx498_tgt, $I11
+    ne $I11, 62, rx498_fail
+    add rx498_pos, 1
+  # rx pass
+    rx498_cur."!cursor_pass"(rx498_pos, "")
+    if_null rx498_debug, debug_431
+    rx498_cur."!cursor_debug"("PASS", "", " at pos=", rx498_pos)
+  debug_431:
+    .return (rx498_cur)
+  rx498_restart:
+    if_null rx498_debug, debug_432
+    rx498_cur."!cursor_debug"("NEXT", "")
+  debug_432:
+  rx498_fail:
+    (rx498_rep, rx498_pos, $I10, $P10) = rx498_cur."!mark_fail"(0)
+    lt rx498_pos, -1, rx498_done
+    eq rx498_pos, -1, rx498_fail
+    jump $I10
+  rx498_done:
+    rx498_cur."!cursor_fail"()
+    if_null rx498_debug, debug_433
+    rx498_cur."!cursor_debug"("FAIL", "")
+  debug_433:
+    .return (rx498_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "cclass_elem"  :subid("145_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "assertion:sym<!>"  :subid("145_1284728471.30547") :method :outer("11_1284728471.30547")
 .annotate 'line', 3
-    .const 'Sub' $P514 = "147_1282323996.47527" 
-    capture_lex $P514
-    .local string rx503_tgt
-    .local int rx503_pos
-    .local int rx503_off
-    .local int rx503_eos
-    .local int rx503_rep
-    .local pmc rx503_cur
-    .local pmc rx503_debug
-    (rx503_cur, rx503_pos, rx503_tgt, $I10) = self."!cursor_start"()
-    rx503_cur."!cursor_caparray"("charspec")
-    getattribute rx503_debug, rx503_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx503_cur
-    .local pmc match
-    .lex "$/", match
-    length rx503_eos, rx503_tgt
-    gt rx503_pos, rx503_eos, rx503_done
-    set rx503_off, 0
-    lt rx503_pos, 2, rx503_start
-    sub rx503_off, rx503_pos, 1
-    substr rx503_tgt, rx503_tgt, rx503_off
-  rx503_start:
-    eq $I10, 1, rx503_restart
-    if_null rx503_debug, debug_430
-    rx503_cur."!cursor_debug"("START", "cclass_elem")
-  debug_430:
+    .const 'Sub' $P508 = "147_1284728471.30547" 
+    capture_lex $P508
+    .local string rx501_tgt
+    .local int rx501_pos
+    .local int rx501_off
+    .local int rx501_eos
+    .local int rx501_rep
+    .local pmc rx501_cur
+    .local pmc rx501_debug
+    (rx501_cur, rx501_pos, rx501_tgt, $I10) = self."!cursor_start"()
+    getattribute rx501_debug, rx501_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx501_cur
+    .local pmc match
+    .lex "$/", match
+    length rx501_eos, rx501_tgt
+    gt rx501_pos, rx501_eos, rx501_done
+    set rx501_off, 0
+    lt rx501_pos, 2, rx501_start
+    sub rx501_off, rx501_pos, 1
+    substr rx501_tgt, rx501_tgt, rx501_off
+  rx501_start:
+    eq $I10, 1, rx501_restart
+    if_null rx501_debug, debug_437
+    rx501_cur."!cursor_debug"("START", "assertion:sym<!>")
+  debug_437:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan506_done
-    goto rxscan506_scan
-  rxscan506_loop:
-    ($P10) = rx503_cur."from"()
-    inc $P10
-    set rx503_pos, $P10
-    ge rx503_pos, rx503_eos, rxscan506_done
-  rxscan506_scan:
-    set_addr $I10, rxscan506_loop
-    rx503_cur."!mark_push"(0, rx503_pos, $I10)
-  rxscan506_done:
-.annotate 'line', 170
-  # rx subcapture "sign"
-    set_addr $I10, rxcap_508_fail
-    rx503_cur."!mark_push"(0, rx503_pos, $I10)
-  alt507_0:
-    set_addr $I10, alt507_1
-    rx503_cur."!mark_push"(0, rx503_pos, $I10)
-  # rx literal  "+"
-    add $I11, rx503_pos, 1
-    gt $I11, rx503_eos, rx503_fail
-    sub $I11, rx503_pos, rx503_off
-    ord $I11, rx503_tgt, $I11
-    ne $I11, 43, rx503_fail
-    add rx503_pos, 1
-    goto alt507_end
-  alt507_1:
-    set_addr $I10, alt507_2
-    rx503_cur."!mark_push"(0, rx503_pos, $I10)
-  # rx literal  "-"
-    add $I11, rx503_pos, 1
-    gt $I11, rx503_eos, rx503_fail
-    sub $I11, rx503_pos, rx503_off
-    ord $I11, rx503_tgt, $I11
-    ne $I11, 45, rx503_fail
-    add rx503_pos, 1
-    goto alt507_end
-  alt507_2:
-  alt507_end:
-    set_addr $I10, rxcap_508_fail
-    ($I12, $I11) = rx503_cur."!mark_peek"($I10)
-    rx503_cur."!cursor_pos"($I11)
-    ($P10) = rx503_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx503_pos, "")
-    rx503_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sign")
-    goto rxcap_508_done
-  rxcap_508_fail:
-    goto rx503_fail
-  rxcap_508_done:
-.annotate 'line', 171
-  # rx rxquantr509 ** 0..1
-    set_addr $I10, rxquantr509_done
-    rx503_cur."!mark_push"(0, rx503_pos, $I10)
-  rxquantr509_loop:
-  # rx subrule "normspace" subtype=method negate=
-    rx503_cur."!cursor_pos"(rx503_pos)
-    $P10 = rx503_cur."normspace"()
-    unless $P10, rx503_fail
-    goto rxsubrule510_pass
-  rxsubrule510_back:
-    $P10 = $P10."!cursor_next"()
-    unless $P10, rx503_fail
-  rxsubrule510_pass:
-    set_addr $I10, rxsubrule510_back
-    rx503_cur."!mark_push"(0, rx503_pos, $I10, $P10)
-    rx503_pos = $P10."pos"()
-    set_addr $I10, rxquantr509_done
-    (rx503_rep) = rx503_cur."!mark_commit"($I10)
-  rxquantr509_done:
-  alt511_0:
-.annotate 'line', 172
-    set_addr $I10, alt511_1
-    rx503_cur."!mark_push"(0, rx503_pos, $I10)
-.annotate 'line', 173
-  # rx literal  "["
-    add $I11, rx503_pos, 1
-    gt $I11, rx503_eos, rx503_fail
-    sub $I11, rx503_pos, rx503_off
-    ord $I11, rx503_tgt, $I11
-    ne $I11, 91, rx503_fail
-    add rx503_pos, 1
-.annotate 'line', 176
-  # rx rxquantr512 ** 0..*
-    set_addr $I10, rxquantr512_done
-    rx503_cur."!mark_push"(0, rx503_pos, $I10)
-  rxquantr512_loop:
-.annotate 'line', 173
-  # rx subrule $P514 subtype=capture negate=
-    rx503_cur."!cursor_pos"(rx503_pos)
-    .const 'Sub' $P514 = "147_1282323996.47527" 
-    capture_lex $P514
-    $P10 = rx503_cur.$P514()
-    unless $P10, rx503_fail
-    goto rxsubrule532_pass
-  rxsubrule532_back:
-    $P10 = $P10."!cursor_next"()
-    unless $P10, rx503_fail
-  rxsubrule532_pass:
-    set_addr $I10, rxsubrule532_back
-    rx503_cur."!mark_push"(0, rx503_pos, $I10, $P10)
-    $P10."!cursor_names"("charspec")
-    rx503_pos = $P10."pos"()
-.annotate 'line', 176
-    set_addr $I10, rxquantr512_done
-    (rx503_rep) = rx503_cur."!mark_commit"($I10)
-    set_addr $I10, rxquantr512_done
-    rx503_cur."!mark_push"(rx503_rep, rx503_pos, $I10)
-    goto rxquantr512_loop
-  rxquantr512_done:
-.annotate 'line', 177
-  # rx charclass_q s r 0..-1
-    sub $I10, rx503_pos, rx503_off
-    find_not_cclass $I11, 32, rx503_tgt, $I10, rx503_eos
-    add rx503_pos, rx503_off, $I11
-  # rx literal  "]"
-    add $I11, rx503_pos, 1
-    gt $I11, rx503_eos, rx503_fail
-    sub $I11, rx503_pos, rx503_off
-    ord $I11, rx503_tgt, $I11
-    ne $I11, 93, rx503_fail
-    add rx503_pos, 1
-.annotate 'line', 173
-    goto alt511_end
-  alt511_1:
-.annotate 'line', 178
-  # rx subcapture "name"
-    set_addr $I10, rxcap_533_fail
-    rx503_cur."!mark_push"(0, rx503_pos, $I10)
-  # rx charclass_q w r 1..-1
-    sub $I10, rx503_pos, rx503_off
-    find_not_cclass $I11, 8192, rx503_tgt, $I10, rx503_eos
-    add $I12, $I10, 1
-    lt $I11, $I12, rx503_fail
-    add rx503_pos, rx503_off, $I11
-    set_addr $I10, rxcap_533_fail
-    ($I12, $I11) = rx503_cur."!mark_peek"($I10)
-    rx503_cur."!cursor_pos"($I11)
-    ($P10) = rx503_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx503_pos, "")
-    rx503_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("name")
-    goto rxcap_533_done
-  rxcap_533_fail:
-    goto rx503_fail
-  rxcap_533_done:
-  alt511_end:
-.annotate 'line', 180
-  # rx rxquantr534 ** 0..1
-    set_addr $I10, rxquantr534_done
-    rx503_cur."!mark_push"(0, rx503_pos, $I10)
-  rxquantr534_loop:
-  # rx subrule "normspace" subtype=method negate=
-    rx503_cur."!cursor_pos"(rx503_pos)
-    $P10 = rx503_cur."normspace"()
-    unless $P10, rx503_fail
-    goto rxsubrule535_pass
-  rxsubrule535_back:
-    $P10 = $P10."!cursor_next"()
-    unless $P10, rx503_fail
-  rxsubrule535_pass:
-    set_addr $I10, rxsubrule535_back
-    rx503_cur."!mark_push"(0, rx503_pos, $I10, $P10)
-    rx503_pos = $P10."pos"()
-    set_addr $I10, rxquantr534_done
-    (rx503_rep) = rx503_cur."!mark_commit"($I10)
-  rxquantr534_done:
-.annotate 'line', 169
+    ne $I10, -1, rxscan505_done
+    goto rxscan505_scan
+  rxscan505_loop:
+    ($P10) = rx501_cur."from"()
+    inc $P10
+    set rx501_pos, $P10
+    ge rx501_pos, rx501_eos, rxscan505_done
+  rxscan505_scan:
+    set_addr $I10, rxscan505_loop
+    rx501_cur."!mark_push"(0, rx501_pos, $I10)
+  rxscan505_done:
+.annotate 'line', 157
+  # rx literal  "!"
+    add $I11, rx501_pos, 1
+    gt $I11, rx501_eos, rx501_fail
+    sub $I11, rx501_pos, rx501_off
+    ord $I11, rx501_tgt, $I11
+    ne $I11, 33, rx501_fail
+    add rx501_pos, 1
+  alt506_0:
+    set_addr $I10, alt506_1
+    rx501_cur."!mark_push"(0, rx501_pos, $I10)
+  # rx subrule "before" subtype=zerowidth negate=
+    rx501_cur."!cursor_pos"(rx501_pos)
+    .const 'Sub' $P508 = "147_1284728471.30547" 
+    capture_lex $P508
+    $P10 = rx501_cur."before"($P508)
+    unless $P10, rx501_fail
+    goto alt506_end
+  alt506_1:
+  # rx subrule "assertion" subtype=capture negate=
+    rx501_cur."!cursor_pos"(rx501_pos)
+    $P10 = rx501_cur."assertion"()
+    unless $P10, rx501_fail
+    rx501_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("assertion")
+    rx501_pos = $P10."pos"()
+  alt506_end:
   # rx pass
-    rx503_cur."!cursor_pass"(rx503_pos, "cclass_elem")
-    if_null rx503_debug, debug_447
-    rx503_cur."!cursor_debug"("PASS", "cclass_elem", " at pos=", rx503_pos)
-  debug_447:
-    .return (rx503_cur)
-  rx503_restart:
+    rx501_cur."!cursor_pass"(rx501_pos, "assertion:sym<!>")
+    if_null rx501_debug, debug_442
+    rx501_cur."!cursor_debug"("PASS", "assertion:sym<!>", " at pos=", rx501_pos)
+  debug_442:
+    .return (rx501_cur)
+  rx501_restart:
 .annotate 'line', 3
-    if_null rx503_debug, debug_448
-    rx503_cur."!cursor_debug"("NEXT", "cclass_elem")
-  debug_448:
-  rx503_fail:
-    (rx503_rep, rx503_pos, $I10, $P10) = rx503_cur."!mark_fail"(0)
-    lt rx503_pos, -1, rx503_done
-    eq rx503_pos, -1, rx503_fail
-    jump $I10
-  rx503_done:
-    rx503_cur."!cursor_fail"()
-    if_null rx503_debug, debug_449
-    rx503_cur."!cursor_debug"("FAIL", "cclass_elem")
-  debug_449:
-    .return (rx503_cur)
+    if_null rx501_debug, debug_443
+    rx501_cur."!cursor_debug"("NEXT", "assertion:sym<!>")
+  debug_443:
+  rx501_fail:
+    (rx501_rep, rx501_pos, $I10, $P10) = rx501_cur."!mark_fail"(0)
+    lt rx501_pos, -1, rx501_done
+    eq rx501_pos, -1, rx501_fail
+    jump $I10
+  rx501_done:
+    rx501_cur."!cursor_fail"()
+    if_null rx501_debug, debug_444
+    rx501_cur."!cursor_debug"("FAIL", "assertion:sym<!>")
+  debug_444:
+    .return (rx501_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__cclass_elem"  :subid("146_1282323996.47527") :method
+.sub "!PREFIX__assertion:sym<!>"  :subid("146_1284728471.30547") :method
 .annotate 'line', 3
-    new $P505, "ResizablePMCArray"
-    push $P505, ""
-    push $P505, "-"
-    push $P505, "+"
-    .return ($P505)
+    $P503 = self."!PREFIX__!subrule"("assertion", "!")
+    new $P504, "ResizablePMCArray"
+    push $P504, $P503
+    push $P504, "!"
+    .return ($P504)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block513"  :anon :subid("147_1282323996.47527") :method :outer("145_1282323996.47527")
-.annotate 'line', 173
-    .const 'Sub' $P529 = "150_1282323996.47527" 
-    capture_lex $P529
-    .const 'Sub' $P524 = "149_1282323996.47527" 
-    capture_lex $P524
-    .const 'Sub' $P520 = "148_1282323996.47527" 
-    capture_lex $P520
-    .local string rx515_tgt
-    .local int rx515_pos
-    .local int rx515_off
-    .local int rx515_eos
-    .local int rx515_rep
-    .local pmc rx515_cur
-    .local pmc rx515_debug
-    (rx515_cur, rx515_pos, rx515_tgt, $I10) = self."!cursor_start"()
-    rx515_cur."!cursor_caparray"("1")
-    getattribute rx515_debug, rx515_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx515_cur
-    .local pmc match
-    .lex "$/", match
-    length rx515_eos, rx515_tgt
-    gt rx515_pos, rx515_eos, rx515_done
-    set rx515_off, 0
-    lt rx515_pos, 2, rx515_start
-    sub rx515_off, rx515_pos, 1
-    substr rx515_tgt, rx515_tgt, rx515_off
-  rx515_start:
-    eq $I10, 1, rx515_restart
-    if_null rx515_debug, debug_431
-    rx515_cur."!cursor_debug"("START", "")
-  debug_431:
+.sub "_block507"  :anon :subid("147_1284728471.30547") :method :outer("145_1284728471.30547")
+.annotate 'line', 157
+    .local string rx509_tgt
+    .local int rx509_pos
+    .local int rx509_off
+    .local int rx509_eos
+    .local int rx509_rep
+    .local pmc rx509_cur
+    .local pmc rx509_debug
+    (rx509_cur, rx509_pos, rx509_tgt, $I10) = self."!cursor_start"()
+    getattribute rx509_debug, rx509_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx509_cur
+    .local pmc match
+    .lex "$/", match
+    length rx509_eos, rx509_tgt
+    gt rx509_pos, rx509_eos, rx509_done
+    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:
+    eq $I10, 1, rx509_restart
+    if_null rx509_debug, debug_438
+    rx509_cur."!cursor_debug"("START", "")
+  debug_438:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan510_done
+    goto rxscan510_scan
+  rxscan510_loop:
+    ($P10) = rx509_cur."from"()
+    inc $P10
+    set rx509_pos, $P10
+    ge rx509_pos, rx509_eos, rxscan510_done
+  rxscan510_scan:
+    set_addr $I10, rxscan510_loop
+    rx509_cur."!mark_push"(0, rx509_pos, $I10)
+  rxscan510_done:
+  # rx literal  ">"
+    add $I11, rx509_pos, 1
+    gt $I11, rx509_eos, rx509_fail
+    sub $I11, rx509_pos, rx509_off
+    ord $I11, rx509_tgt, $I11
+    ne $I11, 62, rx509_fail
+    add rx509_pos, 1
+  # rx pass
+    rx509_cur."!cursor_pass"(rx509_pos, "")
+    if_null rx509_debug, debug_439
+    rx509_cur."!cursor_debug"("PASS", "", " at pos=", rx509_pos)
+  debug_439:
+    .return (rx509_cur)
+  rx509_restart:
+    if_null rx509_debug, debug_440
+    rx509_cur."!cursor_debug"("NEXT", "")
+  debug_440:
+  rx509_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
+  rx509_done:
+    rx509_cur."!cursor_fail"()
+    if_null rx509_debug, debug_441
+    rx509_cur."!cursor_debug"("FAIL", "")
+  debug_441:
+    .return (rx509_cur)
+    .return ()
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "assertion:sym<method>"  :subid("148_1284728471.30547") :method :outer("11_1284728471.30547")
+.annotate 'line', 3
+    .local string rx512_tgt
+    .local int rx512_pos
+    .local int rx512_off
+    .local int rx512_eos
+    .local int rx512_rep
+    .local pmc rx512_cur
+    .local pmc rx512_debug
+    (rx512_cur, rx512_pos, rx512_tgt, $I10) = self."!cursor_start"()
+    getattribute rx512_debug, rx512_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx512_cur
+    .local pmc match
+    .lex "$/", match
+    length rx512_eos, rx512_tgt
+    gt rx512_pos, rx512_eos, rx512_done
+    set rx512_off, 0
+    lt rx512_pos, 2, rx512_start
+    sub rx512_off, rx512_pos, 1
+    substr rx512_tgt, rx512_tgt, rx512_off
+  rx512_start:
+    eq $I10, 1, rx512_restart
+    if_null rx512_debug, debug_445
+    rx512_cur."!cursor_debug"("START", "assertion:sym<method>")
+  debug_445:
     $I10 = self.'from'()
     ne $I10, -1, rxscan516_done
     goto rxscan516_scan
   rxscan516_loop:
-    ($P10) = rx515_cur."from"()
+    ($P10) = rx512_cur."from"()
     inc $P10
-    set rx515_pos, $P10
-    ge rx515_pos, rx515_eos, rxscan516_done
+    set rx512_pos, $P10
+    ge rx512_pos, rx512_eos, rxscan516_done
   rxscan516_scan:
     set_addr $I10, rxscan516_loop
-    rx515_cur."!mark_push"(0, rx515_pos, $I10)
+    rx512_cur."!mark_push"(0, rx512_pos, $I10)
   rxscan516_done:
-  alt517_0:
-    set_addr $I10, alt517_1
-    rx515_cur."!mark_push"(0, rx515_pos, $I10)
-.annotate 'line', 174
-  # rx charclass_q s r 0..-1
-    sub $I10, rx515_pos, rx515_off
-    find_not_cclass $I11, 32, rx515_tgt, $I10, rx515_eos
-    add rx515_pos, rx515_off, $I11
-  # rx literal  "-"
-    add $I11, rx515_pos, 1
-    gt $I11, rx515_eos, rx515_fail
-    sub $I11, rx515_pos, rx515_off
-    ord $I11, rx515_tgt, $I11
-    ne $I11, 45, rx515_fail
-    add rx515_pos, 1
-  # rx subrule "obs" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."obs"("- as character range", "..")
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-    goto alt517_end
-  alt517_1:
-.annotate 'line', 175
-  # rx charclass_q s r 0..-1
-    sub $I10, rx515_pos, rx515_off
-    find_not_cclass $I11, 32, rx515_tgt, $I10, rx515_eos
-    add rx515_pos, rx515_off, $I11
-  alt518_0:
-    set_addr $I10, alt518_1
-    rx515_cur."!mark_push"(0, rx515_pos, $I10)
-  # rx literal  "\\"
-    add $I11, rx515_pos, 1
-    gt $I11, rx515_eos, rx515_fail
-    sub $I11, rx515_pos, rx515_off
-    ord $I11, rx515_tgt, $I11
-    ne $I11, 92, rx515_fail
-    add rx515_pos, 1
-  # rx subrule $P520 subtype=capture negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    .const 'Sub' $P520 = "148_1282323996.47527" 
-    capture_lex $P520
-    $P10 = rx515_cur.$P520()
-    unless $P10, rx515_fail
-    rx515_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"(0)
-    rx515_pos = $P10."pos"()
-    goto alt518_end
-  alt518_1:
-  # rx subrule $P524 subtype=capture negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    .const 'Sub' $P524 = "149_1282323996.47527" 
-    capture_lex $P524
-    $P10 = rx515_cur.$P524()
-    unless $P10, rx515_fail
-    rx515_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"(0)
-    rx515_pos = $P10."pos"()
-  alt518_end:
-  # rx rxquantr527 ** 0..1
-    set_addr $I10, rxquantr527_done
-    rx515_cur."!mark_push"(0, rx515_pos, $I10)
-  rxquantr527_loop:
-  # rx charclass_q s r 0..-1
-    sub $I10, rx515_pos, rx515_off
-    find_not_cclass $I11, 32, rx515_tgt, $I10, rx515_eos
-    add rx515_pos, rx515_off, $I11
-  # rx literal  ".."
-    add $I11, rx515_pos, 2
-    gt $I11, rx515_eos, rx515_fail
-    sub $I11, rx515_pos, rx515_off
-    substr $S10, rx515_tgt, $I11, 2
-    ne $S10, "..", rx515_fail
-    add rx515_pos, 2
-  # rx charclass_q s r 0..-1
-    sub $I10, rx515_pos, rx515_off
-    find_not_cclass $I11, 32, rx515_tgt, $I10, rx515_eos
-    add rx515_pos, rx515_off, $I11
-  # rx subrule $P529 subtype=capture negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    .const 'Sub' $P529 = "150_1282323996.47527" 
-    capture_lex $P529
-    $P10 = rx515_cur.$P529()
-    unless $P10, rx515_fail
-    rx515_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("1")
-    rx515_pos = $P10."pos"()
-    set_addr $I10, rxquantr527_done
-    (rx515_rep) = rx515_cur."!mark_commit"($I10)
-  rxquantr527_done:
-  alt517_end:
-.annotate 'line', 173
-  # rx pass
-    rx515_cur."!cursor_pass"(rx515_pos, "")
-    if_null rx515_debug, debug_444
-    rx515_cur."!cursor_debug"("PASS", "", " at pos=", rx515_pos)
-  debug_444:
-    .return (rx515_cur)
-  rx515_restart:
-    if_null rx515_debug, debug_445
-    rx515_cur."!cursor_debug"("NEXT", "")
-  debug_445:
-  rx515_fail:
-    (rx515_rep, rx515_pos, $I10, $P10) = rx515_cur."!mark_fail"(0)
-    lt rx515_pos, -1, rx515_done
-    eq rx515_pos, -1, rx515_fail
-    jump $I10
-  rx515_done:
-    rx515_cur."!cursor_fail"()
-    if_null rx515_debug, debug_446
-    rx515_cur."!cursor_debug"("FAIL", "")
+.annotate 'line', 160
+  # rx literal  "."
+    add $I11, rx512_pos, 1
+    gt $I11, rx512_eos, rx512_fail
+    sub $I11, rx512_pos, rx512_off
+    ord $I11, rx512_tgt, $I11
+    ne $I11, 46, rx512_fail
+    add rx512_pos, 1
+  # rx subrule "assertion" subtype=capture negate=
+    rx512_cur."!cursor_pos"(rx512_pos)
+    $P10 = rx512_cur."assertion"()
+    unless $P10, rx512_fail
+    rx512_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("assertion")
+    rx512_pos = $P10."pos"()
+.annotate 'line', 159
+  # rx pass
+    rx512_cur."!cursor_pass"(rx512_pos, "assertion:sym<method>")
+    if_null rx512_debug, debug_446
+    rx512_cur."!cursor_debug"("PASS", "assertion:sym<method>", " at pos=", rx512_pos)
   debug_446:
-    .return (rx515_cur)
+    .return (rx512_cur)
+  rx512_restart:
+.annotate 'line', 3
+    if_null rx512_debug, debug_447
+    rx512_cur."!cursor_debug"("NEXT", "assertion:sym<method>")
+  debug_447:
+  rx512_fail:
+    (rx512_rep, rx512_pos, $I10, $P10) = rx512_cur."!mark_fail"(0)
+    lt rx512_pos, -1, rx512_done
+    eq rx512_pos, -1, rx512_fail
+    jump $I10
+  rx512_done:
+    rx512_cur."!cursor_fail"()
+    if_null rx512_debug, debug_448
+    rx512_cur."!cursor_debug"("FAIL", "assertion:sym<method>")
+  debug_448:
+    .return (rx512_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block519"  :anon :subid("148_1282323996.47527") :method :outer("147_1282323996.47527")
-.annotate 'line', 175
-    .local string rx521_tgt
-    .local int rx521_pos
-    .local int rx521_off
-    .local int rx521_eos
-    .local int rx521_rep
-    .local pmc rx521_cur
-    .local pmc rx521_debug
-    (rx521_cur, rx521_pos, rx521_tgt, $I10) = self."!cursor_start"()
-    getattribute rx521_debug, rx521_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx521_cur
-    .local pmc match
-    .lex "$/", match
-    length rx521_eos, rx521_tgt
-    gt rx521_pos, rx521_eos, rx521_done
-    set rx521_off, 0
-    lt rx521_pos, 2, rx521_start
-    sub rx521_off, rx521_pos, 1
-    substr rx521_tgt, rx521_tgt, rx521_off
-  rx521_start:
-    eq $I10, 1, rx521_restart
-    if_null rx521_debug, debug_432
-    rx521_cur."!cursor_debug"("START", "")
-  debug_432:
+.sub "!PREFIX__assertion:sym<method>"  :subid("149_1284728471.30547") :method
+.annotate 'line', 3
+    $P514 = self."!PREFIX__!subrule"("assertion", ".")
+    new $P515, "ResizablePMCArray"
+    push $P515, $P514
+    .return ($P515)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "assertion:sym<name>"  :subid("150_1284728471.30547") :method :outer("11_1284728471.30547")
+.annotate 'line', 3
+    .const 'Sub' $P526 = "152_1284728471.30547" 
+    capture_lex $P526
+    .local string rx518_tgt
+    .local int rx518_pos
+    .local int rx518_off
+    .local int rx518_eos
+    .local int rx518_rep
+    .local pmc rx518_cur
+    .local pmc rx518_debug
+    (rx518_cur, rx518_pos, rx518_tgt, $I10) = self."!cursor_start"()
+    rx518_cur."!cursor_caparray"("nibbler", "arglist", "assertion")
+    getattribute rx518_debug, rx518_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx518_cur
+    .local pmc match
+    .lex "$/", match
+    length rx518_eos, rx518_tgt
+    gt rx518_pos, rx518_eos, rx518_done
+    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:
+    eq $I10, 1, rx518_restart
+    if_null rx518_debug, debug_449
+    rx518_cur."!cursor_debug"("START", "assertion:sym<name>")
+  debug_449:
     $I10 = self.'from'()
     ne $I10, -1, rxscan522_done
     goto rxscan522_scan
   rxscan522_loop:
-    ($P10) = rx521_cur."from"()
+    ($P10) = rx518_cur."from"()
     inc $P10
-    set rx521_pos, $P10
-    ge rx521_pos, rx521_eos, rxscan522_done
+    set rx518_pos, $P10
+    ge rx518_pos, rx518_eos, rxscan522_done
   rxscan522_scan:
     set_addr $I10, rxscan522_loop
-    rx521_cur."!mark_push"(0, rx521_pos, $I10)
+    rx518_cur."!mark_push"(0, rx518_pos, $I10)
   rxscan522_done:
-  # rx charclass .
-    ge rx521_pos, rx521_eos, rx521_fail
-    inc rx521_pos
+.annotate 'line', 164
+  # rx subrule "identifier" subtype=capture negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."identifier"()
+    unless $P10, rx518_fail
+    rx518_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("longname")
+    rx518_pos = $P10."pos"()
+.annotate 'line', 171
+  # rx rxquantr523 ** 0..1
+    set_addr $I10, rxquantr523_done
+    rx518_cur."!mark_push"(0, rx518_pos, $I10)
+  rxquantr523_loop:
+  alt524_0:
+.annotate 'line', 165
+    set_addr $I10, alt524_1
+    rx518_cur."!mark_push"(0, rx518_pos, $I10)
+.annotate 'line', 166
+  # rx subrule "before" subtype=zerowidth negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    .const 'Sub' $P526 = "152_1284728471.30547" 
+    capture_lex $P526
+    $P10 = rx518_cur."before"($P526)
+    unless $P10, rx518_fail
+    goto alt524_end
+  alt524_1:
+    set_addr $I10, alt524_2
+    rx518_cur."!mark_push"(0, rx518_pos, $I10)
+.annotate 'line', 167
+  # rx literal  "="
+    add $I11, rx518_pos, 1
+    gt $I11, rx518_eos, rx518_fail
+    sub $I11, rx518_pos, rx518_off
+    ord $I11, rx518_tgt, $I11
+    ne $I11, 61, rx518_fail
+    add rx518_pos, 1
+  # rx subrule "assertion" subtype=capture negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."assertion"()
+    unless $P10, rx518_fail
+    rx518_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("assertion")
+    rx518_pos = $P10."pos"()
+    goto alt524_end
+  alt524_2:
+    set_addr $I10, alt524_3
+    rx518_cur."!mark_push"(0, rx518_pos, $I10)
+.annotate 'line', 168
+  # rx literal  ":"
+    add $I11, rx518_pos, 1
+    gt $I11, rx518_eos, rx518_fail
+    sub $I11, rx518_pos, rx518_off
+    ord $I11, rx518_tgt, $I11
+    ne $I11, 58, rx518_fail
+    add rx518_pos, 1
+  # rx subrule "arglist" subtype=capture negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."arglist"()
+    unless $P10, rx518_fail
+    rx518_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("arglist")
+    rx518_pos = $P10."pos"()
+    goto alt524_end
+  alt524_3:
+    set_addr $I10, alt524_4
+    rx518_cur."!mark_push"(0, rx518_pos, $I10)
+.annotate 'line', 169
+  # rx literal  "("
+    add $I11, rx518_pos, 1
+    gt $I11, rx518_eos, rx518_fail
+    sub $I11, rx518_pos, rx518_off
+    ord $I11, rx518_tgt, $I11
+    ne $I11, 40, rx518_fail
+    add rx518_pos, 1
+  # rx subrule "arglist" subtype=capture negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."arglist"()
+    unless $P10, rx518_fail
+    rx518_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("arglist")
+    rx518_pos = $P10."pos"()
+  # rx literal  ")"
+    add $I11, rx518_pos, 1
+    gt $I11, rx518_eos, rx518_fail
+    sub $I11, rx518_pos, rx518_off
+    ord $I11, rx518_tgt, $I11
+    ne $I11, 41, rx518_fail
+    add rx518_pos, 1
+    goto alt524_end
+  alt524_4:
+.annotate 'line', 170
+  # rx subrule "normspace" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."normspace"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+  # rx subrule "nibbler" subtype=capture negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."nibbler"()
+    unless $P10, rx518_fail
+    rx518_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("nibbler")
+    rx518_pos = $P10."pos"()
+  alt524_end:
+.annotate 'line', 171
+    set_addr $I10, rxquantr523_done
+    (rx518_rep) = rx518_cur."!mark_commit"($I10)
+  rxquantr523_done:
+.annotate 'line', 163
   # rx pass
-    rx521_cur."!cursor_pass"(rx521_pos, "")
-    if_null rx521_debug, debug_433
-    rx521_cur."!cursor_debug"("PASS", "", " at pos=", rx521_pos)
-  debug_433:
-    .return (rx521_cur)
-  rx521_restart:
-    if_null rx521_debug, debug_434
-    rx521_cur."!cursor_debug"("NEXT", "")
-  debug_434:
-  rx521_fail:
-    (rx521_rep, rx521_pos, $I10, $P10) = rx521_cur."!mark_fail"(0)
-    lt rx521_pos, -1, rx521_done
-    eq rx521_pos, -1, rx521_fail
-    jump $I10
-  rx521_done:
-    rx521_cur."!cursor_fail"()
-    if_null rx521_debug, debug_435
-    rx521_cur."!cursor_debug"("FAIL", "")
-  debug_435:
-    .return (rx521_cur)
+    rx518_cur."!cursor_pass"(rx518_pos, "assertion:sym<name>")
+    if_null rx518_debug, debug_454
+    rx518_cur."!cursor_debug"("PASS", "assertion:sym<name>", " at pos=", rx518_pos)
+  debug_454:
+    .return (rx518_cur)
+  rx518_restart:
+.annotate 'line', 3
+    if_null rx518_debug, debug_455
+    rx518_cur."!cursor_debug"("NEXT", "assertion:sym<name>")
+  debug_455:
+  rx518_fail:
+    (rx518_rep, rx518_pos, $I10, $P10) = rx518_cur."!mark_fail"(0)
+    lt rx518_pos, -1, rx518_done
+    eq rx518_pos, -1, rx518_fail
+    jump $I10
+  rx518_done:
+    rx518_cur."!cursor_fail"()
+    if_null rx518_debug, debug_456
+    rx518_cur."!cursor_debug"("FAIL", "assertion:sym<name>")
+  debug_456:
+    .return (rx518_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block523"  :anon :subid("149_1282323996.47527") :method :outer("147_1282323996.47527")
-.annotate 'line', 175
-    .local string rx525_tgt
-    .local int rx525_pos
-    .local int rx525_off
-    .local int rx525_eos
-    .local int rx525_rep
-    .local pmc rx525_cur
-    .local pmc rx525_debug
-    (rx525_cur, rx525_pos, rx525_tgt, $I10) = self."!cursor_start"()
-    getattribute rx525_debug, rx525_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx525_cur
-    .local pmc match
-    .lex "$/", match
-    length rx525_eos, rx525_tgt
-    gt rx525_pos, rx525_eos, rx525_done
-    set rx525_off, 0
-    lt rx525_pos, 2, rx525_start
-    sub rx525_off, rx525_pos, 1
-    substr rx525_tgt, rx525_tgt, rx525_off
-  rx525_start:
-    eq $I10, 1, rx525_restart
-    if_null rx525_debug, debug_436
-    rx525_cur."!cursor_debug"("START", "")
-  debug_436:
+.sub "!PREFIX__assertion:sym<name>"  :subid("151_1284728471.30547") :method
+.annotate 'line', 3
+    $P520 = self."!PREFIX__!subrule"("identifier", "")
+    new $P521, "ResizablePMCArray"
+    push $P521, $P520
+    .return ($P521)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "_block525"  :anon :subid("152_1284728471.30547") :method :outer("150_1284728471.30547")
+.annotate 'line', 166
+    .local string rx527_tgt
+    .local int rx527_pos
+    .local int rx527_off
+    .local int rx527_eos
+    .local int rx527_rep
+    .local pmc rx527_cur
+    .local pmc rx527_debug
+    (rx527_cur, rx527_pos, rx527_tgt, $I10) = self."!cursor_start"()
+    getattribute rx527_debug, rx527_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx527_cur
+    .local pmc match
+    .lex "$/", match
+    length rx527_eos, rx527_tgt
+    gt rx527_pos, rx527_eos, rx527_done
+    set rx527_off, 0
+    lt rx527_pos, 2, rx527_start
+    sub rx527_off, rx527_pos, 1
+    substr rx527_tgt, rx527_tgt, rx527_off
+  rx527_start:
+    eq $I10, 1, rx527_restart
+    if_null rx527_debug, debug_450
+    rx527_cur."!cursor_debug"("START", "")
+  debug_450:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan526_done
-    goto rxscan526_scan
-  rxscan526_loop:
-    ($P10) = rx525_cur."from"()
-    inc $P10
-    set rx525_pos, $P10
-    ge rx525_pos, rx525_eos, rxscan526_done
-  rxscan526_scan:
-    set_addr $I10, rxscan526_loop
-    rx525_cur."!mark_push"(0, rx525_pos, $I10)
-  rxscan526_done:
-  # rx enumcharlist negate=1 
-    ge rx525_pos, rx525_eos, rx525_fail
-    sub $I10, rx525_pos, rx525_off
-    substr $S10, rx525_tgt, $I10, 1
-    index $I11, "]\\", $S10
-    ge $I11, 0, rx525_fail
-    inc rx525_pos
-  # rx pass
-    rx525_cur."!cursor_pass"(rx525_pos, "")
-    if_null rx525_debug, debug_437
-    rx525_cur."!cursor_debug"("PASS", "", " at pos=", rx525_pos)
-  debug_437:
-    .return (rx525_cur)
-  rx525_restart:
-    if_null rx525_debug, debug_438
-    rx525_cur."!cursor_debug"("NEXT", "")
-  debug_438:
-  rx525_fail:
-    (rx525_rep, rx525_pos, $I10, $P10) = rx525_cur."!mark_fail"(0)
-    lt rx525_pos, -1, rx525_done
-    eq rx525_pos, -1, rx525_fail
-    jump $I10
-  rx525_done:
-    rx525_cur."!cursor_fail"()
-    if_null rx525_debug, debug_439
-    rx525_cur."!cursor_debug"("FAIL", "")
-  debug_439:
-    .return (rx525_cur)
+    ne $I10, -1, rxscan528_done
+    goto rxscan528_scan
+  rxscan528_loop:
+    ($P10) = rx527_cur."from"()
+    inc $P10
+    set rx527_pos, $P10
+    ge rx527_pos, rx527_eos, rxscan528_done
+  rxscan528_scan:
+    set_addr $I10, rxscan528_loop
+    rx527_cur."!mark_push"(0, rx527_pos, $I10)
+  rxscan528_done:
+  # rx literal  ">"
+    add $I11, rx527_pos, 1
+    gt $I11, rx527_eos, rx527_fail
+    sub $I11, rx527_pos, rx527_off
+    ord $I11, rx527_tgt, $I11
+    ne $I11, 62, rx527_fail
+    add rx527_pos, 1
+  # rx pass
+    rx527_cur."!cursor_pass"(rx527_pos, "")
+    if_null rx527_debug, debug_451
+    rx527_cur."!cursor_debug"("PASS", "", " at pos=", rx527_pos)
+  debug_451:
+    .return (rx527_cur)
+  rx527_restart:
+    if_null rx527_debug, debug_452
+    rx527_cur."!cursor_debug"("NEXT", "")
+  debug_452:
+  rx527_fail:
+    (rx527_rep, rx527_pos, $I10, $P10) = rx527_cur."!mark_fail"(0)
+    lt rx527_pos, -1, rx527_done
+    eq rx527_pos, -1, rx527_fail
+    jump $I10
+  rx527_done:
+    rx527_cur."!cursor_fail"()
+    if_null rx527_debug, debug_453
+    rx527_cur."!cursor_debug"("FAIL", "")
+  debug_453:
+    .return (rx527_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block528"  :anon :subid("150_1282323996.47527") :method :outer("147_1282323996.47527")
-.annotate 'line', 175
+.sub "assertion:sym<[>"  :subid("153_1284728471.30547") :method :outer("11_1284728471.30547")
+.annotate 'line', 3
+    .const 'Sub' $P535 = "155_1284728471.30547" 
+    capture_lex $P535
     .local string rx530_tgt
     .local int rx530_pos
     .local int rx530_off
@@ -7870,6 +7688,7 @@
     .local pmc rx530_cur
     .local pmc rx530_debug
     (rx530_cur, rx530_pos, rx530_tgt, $I10) = self."!cursor_start"()
+    rx530_cur."!cursor_caparray"("cclass_elem")
     getattribute rx530_debug, rx530_cur, "$!debug"
     .lex unicode:"$\x{a2}", rx530_cur
     .local pmc match
@@ -7882,34 +7701,62 @@
     substr rx530_tgt, rx530_tgt, rx530_off
   rx530_start:
     eq $I10, 1, rx530_restart
-    if_null rx530_debug, debug_440
-    rx530_cur."!cursor_debug"("START", "")
-  debug_440:
+    if_null rx530_debug, debug_457
+    rx530_cur."!cursor_debug"("START", "assertion:sym<[>")
+  debug_457:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan531_done
-    goto rxscan531_scan
-  rxscan531_loop:
+    ne $I10, -1, rxscan533_done
+    goto rxscan533_scan
+  rxscan533_loop:
     ($P10) = rx530_cur."from"()
     inc $P10
     set rx530_pos, $P10
-    ge rx530_pos, rx530_eos, rxscan531_done
-  rxscan531_scan:
-    set_addr $I10, rxscan531_loop
+    ge rx530_pos, rx530_eos, rxscan533_done
+  rxscan533_scan:
+    set_addr $I10, rxscan533_loop
     rx530_cur."!mark_push"(0, rx530_pos, $I10)
-  rxscan531_done:
-  # rx charclass .
-    ge rx530_pos, rx530_eos, rx530_fail
-    inc rx530_pos
-  # rx pass
-    rx530_cur."!cursor_pass"(rx530_pos, "")
-    if_null rx530_debug, debug_441
-    rx530_cur."!cursor_debug"("PASS", "", " at pos=", rx530_pos)
-  debug_441:
+  rxscan533_done:
+.annotate 'line', 174
+  # rx subrule "before" subtype=zerowidth negate=
+    rx530_cur."!cursor_pos"(rx530_pos)
+    .const 'Sub' $P535 = "155_1284728471.30547" 
+    capture_lex $P535
+    $P10 = rx530_cur."before"($P535)
+    unless $P10, rx530_fail
+  # rx rxquantr539 ** 1..*
+    set_addr $I10, rxquantr539_done
+    rx530_cur."!mark_push"(0, -1, $I10)
+  rxquantr539_loop:
+  # rx subrule "cclass_elem" subtype=capture negate=
+    rx530_cur."!cursor_pos"(rx530_pos)
+    $P10 = rx530_cur."cclass_elem"()
+    unless $P10, rx530_fail
+    goto rxsubrule540_pass
+  rxsubrule540_back:
+    $P10 = $P10."!cursor_next"()
+    unless $P10, rx530_fail
+  rxsubrule540_pass:
+    set_addr $I10, rxsubrule540_back
+    rx530_cur."!mark_push"(0, rx530_pos, $I10, $P10)
+    $P10."!cursor_names"("cclass_elem")
+    rx530_pos = $P10."pos"()
+    set_addr $I10, rxquantr539_done
+    (rx530_rep) = rx530_cur."!mark_commit"($I10)
+    set_addr $I10, rxquantr539_done
+    rx530_cur."!mark_push"(rx530_rep, rx530_pos, $I10)
+    goto rxquantr539_loop
+  rxquantr539_done:
+  # rx pass
+    rx530_cur."!cursor_pass"(rx530_pos, "assertion:sym<[>")
+    if_null rx530_debug, debug_462
+    rx530_cur."!cursor_debug"("PASS", "assertion:sym<[>", " at pos=", rx530_pos)
+  debug_462:
     .return (rx530_cur)
   rx530_restart:
-    if_null rx530_debug, debug_442
-    rx530_cur."!cursor_debug"("NEXT", "")
-  debug_442:
+.annotate 'line', 3
+    if_null rx530_debug, debug_463
+    rx530_cur."!cursor_debug"("NEXT", "assertion:sym<[>")
+  debug_463:
   rx530_fail:
     (rx530_rep, rx530_pos, $I10, $P10) = rx530_cur."!mark_fail"(0)
     lt rx530_pos, -1, rx530_done
@@ -7917,411 +7764,582 @@
     jump $I10
   rx530_done:
     rx530_cur."!cursor_fail"()
-    if_null rx530_debug, debug_443
-    rx530_cur."!cursor_debug"("FAIL", "")
-  debug_443:
+    if_null rx530_debug, debug_464
+    rx530_cur."!cursor_debug"("FAIL", "assertion:sym<[>")
+  debug_464:
     .return (rx530_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_internal"  :subid("151_1282323996.47527") :method :outer("11_1282323996.47527")
+.sub "!PREFIX__assertion:sym<[>"  :subid("154_1284728471.30547") :method
 .annotate 'line', 3
-    .const 'Sub' $P545 = "153_1282323996.47527" 
-    capture_lex $P545
-    .local string rx537_tgt
-    .local int rx537_pos
-    .local int rx537_off
-    .local int rx537_eos
-    .local int rx537_rep
-    .local pmc rx537_cur
-    .local pmc rx537_debug
-    (rx537_cur, rx537_pos, rx537_tgt, $I10) = self."!cursor_start"()
-    rx537_cur."!cursor_caparray"("n")
-    getattribute rx537_debug, rx537_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx537_cur
-    .local pmc match
-    .lex "$/", match
-    length rx537_eos, rx537_tgt
-    gt rx537_pos, rx537_eos, rx537_done
-    set rx537_off, 0
-    lt rx537_pos, 2, rx537_start
-    sub rx537_off, rx537_pos, 1
-    substr rx537_tgt, rx537_tgt, rx537_off
-  rx537_start:
-    eq $I10, 1, rx537_restart
-    if_null rx537_debug, debug_450
-    rx537_cur."!cursor_debug"("START", "mod_internal")
-  debug_450:
+    new $P532, "ResizablePMCArray"
+    push $P532, ""
+    .return ($P532)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "_block534"  :anon :subid("155_1284728471.30547") :method :outer("153_1284728471.30547")
+.annotate 'line', 174
+    .local string rx536_tgt
+    .local int rx536_pos
+    .local int rx536_off
+    .local int rx536_eos
+    .local int rx536_rep
+    .local pmc rx536_cur
+    .local pmc rx536_debug
+    (rx536_cur, rx536_pos, rx536_tgt, $I10) = self."!cursor_start"()
+    getattribute rx536_debug, rx536_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx536_cur
+    .local pmc match
+    .lex "$/", match
+    length rx536_eos, rx536_tgt
+    gt rx536_pos, rx536_eos, rx536_done
+    set rx536_off, 0
+    lt rx536_pos, 2, rx536_start
+    sub rx536_off, rx536_pos, 1
+    substr rx536_tgt, rx536_tgt, rx536_off
+  rx536_start:
+    eq $I10, 1, rx536_restart
+    if_null rx536_debug, debug_458
+    rx536_cur."!cursor_debug"("START", "")
+  debug_458:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan541_done
-    goto rxscan541_scan
-  rxscan541_loop:
-    ($P10) = rx537_cur."from"()
-    inc $P10
-    set rx537_pos, $P10
-    ge rx537_pos, rx537_eos, rxscan541_done
-  rxscan541_scan:
-    set_addr $I10, rxscan541_loop
-    rx537_cur."!mark_push"(0, rx537_pos, $I10)
-  rxscan541_done:
-  alt542_0:
-.annotate 'line', 184
-    set_addr $I10, alt542_1
-    rx537_cur."!mark_push"(0, rx537_pos, $I10)
-.annotate 'line', 185
-  # rx literal  ":"
-    add $I11, rx537_pos, 1
-    gt $I11, rx537_eos, rx537_fail
-    sub $I11, rx537_pos, rx537_off
-    ord $I11, rx537_tgt, $I11
-    ne $I11, 58, rx537_fail
-    add rx537_pos, 1
-  # rx rxquantr543 ** 1..1
-    set_addr $I10, rxquantr543_done
-    rx537_cur."!mark_push"(0, -1, $I10)
-  rxquantr543_loop:
-  # rx subrule $P545 subtype=capture negate=
-    rx537_cur."!cursor_pos"(rx537_pos)
-    .const 'Sub' $P545 = "153_1282323996.47527" 
-    capture_lex $P545
-    $P10 = rx537_cur.$P545()
-    unless $P10, rx537_fail
+    ne $I10, -1, rxscan537_done
+    goto rxscan537_scan
+  rxscan537_loop:
+    ($P10) = rx536_cur."from"()
+    inc $P10
+    set rx536_pos, $P10
+    ge rx536_pos, rx536_eos, rxscan537_done
+  rxscan537_scan:
+    set_addr $I10, rxscan537_loop
+    rx536_cur."!mark_push"(0, rx536_pos, $I10)
+  rxscan537_done:
+  alt538_0:
+    set_addr $I10, alt538_1
+    rx536_cur."!mark_push"(0, rx536_pos, $I10)
+  # rx literal  "["
+    add $I11, rx536_pos, 1
+    gt $I11, rx536_eos, rx536_fail
+    sub $I11, rx536_pos, rx536_off
+    ord $I11, rx536_tgt, $I11
+    ne $I11, 91, rx536_fail
+    add rx536_pos, 1
+    goto alt538_end
+  alt538_1:
+    set_addr $I10, alt538_2
+    rx536_cur."!mark_push"(0, rx536_pos, $I10)
+  # rx literal  "+"
+    add $I11, rx536_pos, 1
+    gt $I11, rx536_eos, rx536_fail
+    sub $I11, rx536_pos, rx536_off
+    ord $I11, rx536_tgt, $I11
+    ne $I11, 43, rx536_fail
+    add rx536_pos, 1
+    goto alt538_end
+  alt538_2:
+  # rx literal  "-"
+    add $I11, rx536_pos, 1
+    gt $I11, rx536_eos, rx536_fail
+    sub $I11, rx536_pos, rx536_off
+    ord $I11, rx536_tgt, $I11
+    ne $I11, 45, rx536_fail
+    add rx536_pos, 1
+  alt538_end:
+  # rx pass
+    rx536_cur."!cursor_pass"(rx536_pos, "")
+    if_null rx536_debug, debug_459
+    rx536_cur."!cursor_debug"("PASS", "", " at pos=", rx536_pos)
+  debug_459:
+    .return (rx536_cur)
+  rx536_restart:
+    if_null rx536_debug, debug_460
+    rx536_cur."!cursor_debug"("NEXT", "")
+  debug_460:
+  rx536_fail:
+    (rx536_rep, rx536_pos, $I10, $P10) = rx536_cur."!mark_fail"(0)
+    lt rx536_pos, -1, rx536_done
+    eq rx536_pos, -1, rx536_fail
+    jump $I10
+  rx536_done:
+    rx536_cur."!cursor_fail"()
+    if_null rx536_debug, debug_461
+    rx536_cur."!cursor_debug"("FAIL", "")
+  debug_461:
+    .return (rx536_cur)
+    .return ()
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "cclass_elem"  :subid("156_1284728471.30547") :method :outer("11_1284728471.30547")
+.annotate 'line', 3
+    .const 'Sub' $P553 = "158_1284728471.30547" 
+    capture_lex $P553
+    .local string rx542_tgt
+    .local int rx542_pos
+    .local int rx542_off
+    .local int rx542_eos
+    .local int rx542_rep
+    .local pmc rx542_cur
+    .local pmc rx542_debug
+    (rx542_cur, rx542_pos, rx542_tgt, $I10) = self."!cursor_start"()
+    rx542_cur."!cursor_caparray"("charspec")
+    getattribute rx542_debug, rx542_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx542_cur
+    .local pmc match
+    .lex "$/", match
+    length rx542_eos, rx542_tgt
+    gt rx542_pos, rx542_eos, rx542_done
+    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:
+    eq $I10, 1, rx542_restart
+    if_null rx542_debug, debug_465
+    rx542_cur."!cursor_debug"("START", "cclass_elem")
+  debug_465:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan545_done
+    goto rxscan545_scan
+  rxscan545_loop:
+    ($P10) = rx542_cur."from"()
+    inc $P10
+    set rx542_pos, $P10
+    ge rx542_pos, rx542_eos, rxscan545_done
+  rxscan545_scan:
+    set_addr $I10, rxscan545_loop
+    rx542_cur."!mark_push"(0, rx542_pos, $I10)
+  rxscan545_done:
+.annotate 'line', 177
+  # rx subcapture "sign"
+    set_addr $I10, rxcap_547_fail
+    rx542_cur."!mark_push"(0, rx542_pos, $I10)
+  alt546_0:
+    set_addr $I10, alt546_1
+    rx542_cur."!mark_push"(0, rx542_pos, $I10)
+  # rx literal  "+"
+    add $I11, rx542_pos, 1
+    gt $I11, rx542_eos, rx542_fail
+    sub $I11, rx542_pos, rx542_off
+    ord $I11, rx542_tgt, $I11
+    ne $I11, 43, rx542_fail
+    add rx542_pos, 1
+    goto alt546_end
+  alt546_1:
+    set_addr $I10, alt546_2
+    rx542_cur."!mark_push"(0, rx542_pos, $I10)
+  # rx literal  "-"
+    add $I11, rx542_pos, 1
+    gt $I11, rx542_eos, rx542_fail
+    sub $I11, rx542_pos, rx542_off
+    ord $I11, rx542_tgt, $I11
+    ne $I11, 45, rx542_fail
+    add rx542_pos, 1
+    goto alt546_end
+  alt546_2:
+  alt546_end:
+    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)
+    $P10."!cursor_names"("sign")
+    goto rxcap_547_done
+  rxcap_547_fail:
+    goto rx542_fail
+  rxcap_547_done:
+.annotate 'line', 178
+  # rx rxquantr548 ** 0..1
+    set_addr $I10, rxquantr548_done
+    rx542_cur."!mark_push"(0, rx542_pos, $I10)
+  rxquantr548_loop:
+  # rx subrule "normspace" subtype=method negate=
+    rx542_cur."!cursor_pos"(rx542_pos)
+    $P10 = rx542_cur."normspace"()
+    unless $P10, rx542_fail
     goto rxsubrule549_pass
   rxsubrule549_back:
     $P10 = $P10."!cursor_next"()
-    unless $P10, rx537_fail
+    unless $P10, rx542_fail
   rxsubrule549_pass:
     set_addr $I10, rxsubrule549_back
-    rx537_cur."!mark_push"(0, rx537_pos, $I10, $P10)
-    $P10."!cursor_names"("n")
-    rx537_pos = $P10."pos"()
-    set_addr $I10, rxquantr543_done
-    (rx537_rep) = rx537_cur."!mark_commit"($I10)
-  rxquantr543_done:
-  # rx subrule "mod_ident" subtype=capture negate=
-    rx537_cur."!cursor_pos"(rx537_pos)
-    $P10 = rx537_cur."mod_ident"()
-    unless $P10, rx537_fail
-    rx537_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("mod_ident")
-    rx537_pos = $P10."pos"()
-  # rxanchor rwb
-    le rx537_pos, 0, rx537_fail
-    sub $I10, rx537_pos, rx537_off
-    is_cclass $I11, 8192, rx537_tgt, $I10
-    if $I11, rx537_fail
-    dec $I10
-    is_cclass $I11, 8192, rx537_tgt, $I10
-    unless $I11, rx537_fail
-    goto alt542_end
-  alt542_1:
-.annotate 'line', 186
-  # rx literal  ":"
-    add $I11, rx537_pos, 1
-    gt $I11, rx537_eos, rx537_fail
-    sub $I11, rx537_pos, rx537_off
-    ord $I11, rx537_tgt, $I11
-    ne $I11, 58, rx537_fail
-    add rx537_pos, 1
-  # rx subrule "mod_ident" subtype=capture negate=
-    rx537_cur."!cursor_pos"(rx537_pos)
-    $P10 = rx537_cur."mod_ident"()
-    unless $P10, rx537_fail
-    rx537_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("mod_ident")
-    rx537_pos = $P10."pos"()
-  # rx rxquantr550 ** 0..1
-    set_addr $I10, rxquantr550_done
-    rx537_cur."!mark_push"(0, rx537_pos, $I10)
-  rxquantr550_loop:
-  # rx literal  "("
-    add $I11, rx537_pos, 1
-    gt $I11, rx537_eos, rx537_fail
-    sub $I11, rx537_pos, rx537_off
-    ord $I11, rx537_tgt, $I11
-    ne $I11, 40, rx537_fail
-    add rx537_pos, 1
-  # rx subcapture "n"
-    set_addr $I10, rxcap_551_fail
-    rx537_cur."!mark_push"(0, rx537_pos, $I10)
-  # rx charclass_q d r 1..-1
-    sub $I10, rx537_pos, rx537_off
-    find_not_cclass $I11, 8, rx537_tgt, $I10, rx537_eos
-    add $I12, $I10, 1
-    lt $I11, $I12, rx537_fail
-    add rx537_pos, rx537_off, $I11
-    set_addr $I10, rxcap_551_fail
-    ($I12, $I11) = rx537_cur."!mark_peek"($I10)
-    rx537_cur."!cursor_pos"($I11)
-    ($P10) = rx537_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx537_pos, "")
-    rx537_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("n")
-    goto rxcap_551_done
-  rxcap_551_fail:
-    goto rx537_fail
-  rxcap_551_done:
-  # rx literal  ")"
-    add $I11, rx537_pos, 1
-    gt $I11, rx537_eos, rx537_fail
-    sub $I11, rx537_pos, rx537_off
-    ord $I11, rx537_tgt, $I11
-    ne $I11, 41, rx537_fail
-    add rx537_pos, 1
-    set_addr $I10, rxquantr550_done
-    (rx537_rep) = rx537_cur."!mark_commit"($I10)
-  rxquantr550_done:
-  alt542_end:
+    rx542_cur."!mark_push"(0, rx542_pos, $I10, $P10)
+    rx542_pos = $P10."pos"()
+    set_addr $I10, rxquantr548_done
+    (rx542_rep) = rx542_cur."!mark_commit"($I10)
+  rxquantr548_done:
+  alt550_0:
+.annotate 'line', 179
+    set_addr $I10, alt550_1
+    rx542_cur."!mark_push"(0, rx542_pos, $I10)
+.annotate 'line', 180
+  # rx literal  "["
+    add $I11, rx542_pos, 1
+    gt $I11, rx542_eos, rx542_fail
+    sub $I11, rx542_pos, rx542_off
+    ord $I11, rx542_tgt, $I11
+    ne $I11, 91, rx542_fail
+    add rx542_pos, 1
 .annotate 'line', 183
+  # rx rxquantr551 ** 0..*
+    set_addr $I10, rxquantr551_done
+    rx542_cur."!mark_push"(0, rx542_pos, $I10)
+  rxquantr551_loop:
+.annotate 'line', 180
+  # rx subrule $P553 subtype=capture negate=
+    rx542_cur."!cursor_pos"(rx542_pos)
+    .const 'Sub' $P553 = "158_1284728471.30547" 
+    capture_lex $P553
+    $P10 = rx542_cur.$P553()
+    unless $P10, rx542_fail
+    goto rxsubrule571_pass
+  rxsubrule571_back:
+    $P10 = $P10."!cursor_next"()
+    unless $P10, rx542_fail
+  rxsubrule571_pass:
+    set_addr $I10, rxsubrule571_back
+    rx542_cur."!mark_push"(0, rx542_pos, $I10, $P10)
+    $P10."!cursor_names"("charspec")
+    rx542_pos = $P10."pos"()
+.annotate 'line', 183
+    set_addr $I10, rxquantr551_done
+    (rx542_rep) = rx542_cur."!mark_commit"($I10)
+    set_addr $I10, rxquantr551_done
+    rx542_cur."!mark_push"(rx542_rep, rx542_pos, $I10)
+    goto rxquantr551_loop
+  rxquantr551_done:
+.annotate 'line', 184
+  # rx charclass_q s r 0..-1
+    sub $I10, rx542_pos, rx542_off
+    find_not_cclass $I11, 32, rx542_tgt, $I10, rx542_eos
+    add rx542_pos, rx542_off, $I11
+  # rx literal  "]"
+    add $I11, rx542_pos, 1
+    gt $I11, rx542_eos, rx542_fail
+    sub $I11, rx542_pos, rx542_off
+    ord $I11, rx542_tgt, $I11
+    ne $I11, 93, rx542_fail
+    add rx542_pos, 1
+.annotate 'line', 180
+    goto alt550_end
+  alt550_1:
+.annotate 'line', 185
+  # rx subcapture "name"
+    set_addr $I10, rxcap_572_fail
+    rx542_cur."!mark_push"(0, rx542_pos, $I10)
+  # rx charclass_q w r 1..-1
+    sub $I10, rx542_pos, rx542_off
+    find_not_cclass $I11, 8192, rx542_tgt, $I10, rx542_eos
+    add $I12, $I10, 1
+    lt $I11, $I12, rx542_fail
+    add rx542_pos, rx542_off, $I11
+    set_addr $I10, rxcap_572_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)
+    $P10."!cursor_names"("name")
+    goto rxcap_572_done
+  rxcap_572_fail:
+    goto rx542_fail
+  rxcap_572_done:
+  alt550_end:
+.annotate 'line', 187
+  # rx rxquantr573 ** 0..1
+    set_addr $I10, rxquantr573_done
+    rx542_cur."!mark_push"(0, rx542_pos, $I10)
+  rxquantr573_loop:
+  # rx subrule "normspace" subtype=method negate=
+    rx542_cur."!cursor_pos"(rx542_pos)
+    $P10 = rx542_cur."normspace"()
+    unless $P10, rx542_fail
+    goto rxsubrule574_pass
+  rxsubrule574_back:
+    $P10 = $P10."!cursor_next"()
+    unless $P10, rx542_fail
+  rxsubrule574_pass:
+    set_addr $I10, rxsubrule574_back
+    rx542_cur."!mark_push"(0, rx542_pos, $I10, $P10)
+    rx542_pos = $P10."pos"()
+    set_addr $I10, rxquantr573_done
+    (rx542_rep) = rx542_cur."!mark_commit"($I10)
+  rxquantr573_done:
+.annotate 'line', 176
   # rx pass
-    rx537_cur."!cursor_pass"(rx537_pos, "mod_internal")
-    if_null rx537_debug, debug_455
-    rx537_cur."!cursor_debug"("PASS", "mod_internal", " at pos=", rx537_pos)
-  debug_455:
-    .return (rx537_cur)
-  rx537_restart:
+    rx542_cur."!cursor_pass"(rx542_pos, "cclass_elem")
+    if_null rx542_debug, debug_482
+    rx542_cur."!cursor_debug"("PASS", "cclass_elem", " at pos=", rx542_pos)
+  debug_482:
+    .return (rx542_cur)
+  rx542_restart:
 .annotate 'line', 3
-    if_null rx537_debug, debug_456
-    rx537_cur."!cursor_debug"("NEXT", "mod_internal")
-  debug_456:
-  rx537_fail:
-    (rx537_rep, rx537_pos, $I10, $P10) = rx537_cur."!mark_fail"(0)
-    lt rx537_pos, -1, rx537_done
-    eq rx537_pos, -1, rx537_fail
-    jump $I10
-  rx537_done:
-    rx537_cur."!cursor_fail"()
-    if_null rx537_debug, debug_457
-    rx537_cur."!cursor_debug"("FAIL", "mod_internal")
-  debug_457:
-    .return (rx537_cur)
+    if_null rx542_debug, debug_483
+    rx542_cur."!cursor_debug"("NEXT", "cclass_elem")
+  debug_483:
+  rx542_fail:
+    (rx542_rep, rx542_pos, $I10, $P10) = rx542_cur."!mark_fail"(0)
+    lt rx542_pos, -1, rx542_done
+    eq rx542_pos, -1, rx542_fail
+    jump $I10
+  rx542_done:
+    rx542_cur."!cursor_fail"()
+    if_null rx542_debug, debug_484
+    rx542_cur."!cursor_debug"("FAIL", "cclass_elem")
+  debug_484:
+    .return (rx542_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_internal"  :subid("152_1282323996.47527") :method
+.sub "!PREFIX__cclass_elem"  :subid("157_1284728471.30547") :method
 .annotate 'line', 3
-    $P539 = self."!PREFIX__!subrule"("mod_ident", ":")
-    new $P540, "ResizablePMCArray"
-    push $P540, $P539
-    push $P540, ":"
-    .return ($P540)
+    new $P544, "ResizablePMCArray"
+    push $P544, ""
+    push $P544, "-"
+    push $P544, "+"
+    .return ($P544)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block544"  :anon :subid("153_1282323996.47527") :method :outer("151_1282323996.47527")
-.annotate 'line', 185
-    .local string rx546_tgt
-    .local int rx546_pos
-    .local int rx546_off
-    .local int rx546_eos
-    .local int rx546_rep
-    .local pmc rx546_cur
-    .local pmc rx546_debug
-    (rx546_cur, rx546_pos, rx546_tgt, $I10) = self."!cursor_start"()
-    getattribute rx546_debug, rx546_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx546_cur
-    .local pmc match
-    .lex "$/", match
-    length rx546_eos, rx546_tgt
-    gt rx546_pos, rx546_eos, rx546_done
-    set rx546_off, 0
-    lt rx546_pos, 2, rx546_start
-    sub rx546_off, rx546_pos, 1
-    substr rx546_tgt, rx546_tgt, rx546_off
-  rx546_start:
-    eq $I10, 1, rx546_restart
-    if_null rx546_debug, debug_451
-    rx546_cur."!cursor_debug"("START", "")
-  debug_451:
+.sub "_block552"  :anon :subid("158_1284728471.30547") :method :outer("156_1284728471.30547")
+.annotate 'line', 180
+    .const 'Sub' $P568 = "161_1284728471.30547" 
+    capture_lex $P568
+    .const 'Sub' $P563 = "160_1284728471.30547" 
+    capture_lex $P563
+    .const 'Sub' $P559 = "159_1284728471.30547" 
+    capture_lex $P559
+    .local string rx554_tgt
+    .local int rx554_pos
+    .local int rx554_off
+    .local int rx554_eos
+    .local int rx554_rep
+    .local pmc rx554_cur
+    .local pmc rx554_debug
+    (rx554_cur, rx554_pos, rx554_tgt, $I10) = self."!cursor_start"()
+    rx554_cur."!cursor_caparray"("1")
+    getattribute rx554_debug, rx554_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx554_cur
+    .local pmc match
+    .lex "$/", match
+    length rx554_eos, rx554_tgt
+    gt rx554_pos, rx554_eos, rx554_done
+    set rx554_off, 0
+    lt rx554_pos, 2, rx554_start
+    sub rx554_off, rx554_pos, 1
+    substr rx554_tgt, rx554_tgt, rx554_off
+  rx554_start:
+    eq $I10, 1, rx554_restart
+    if_null rx554_debug, debug_466
+    rx554_cur."!cursor_debug"("START", "")
+  debug_466:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan547_done
-    goto rxscan547_scan
-  rxscan547_loop:
-    ($P10) = rx546_cur."from"()
-    inc $P10
-    set rx546_pos, $P10
-    ge rx546_pos, rx546_eos, rxscan547_done
-  rxscan547_scan:
-    set_addr $I10, rxscan547_loop
-    rx546_cur."!mark_push"(0, rx546_pos, $I10)
-  rxscan547_done:
-  alt548_0:
-    set_addr $I10, alt548_1
-    rx546_cur."!mark_push"(0, rx546_pos, $I10)
-  # rx literal  "!"
-    add $I11, rx546_pos, 1
-    gt $I11, rx546_eos, rx546_fail
-    sub $I11, rx546_pos, rx546_off
-    ord $I11, rx546_tgt, $I11
-    ne $I11, 33, rx546_fail
-    add rx546_pos, 1
-    goto alt548_end
-  alt548_1:
-  # rx charclass_q d r 1..-1
-    sub $I10, rx546_pos, rx546_off
-    find_not_cclass $I11, 8, rx546_tgt, $I10, rx546_eos
-    add $I12, $I10, 1
-    lt $I11, $I12, rx546_fail
-    add rx546_pos, rx546_off, $I11
-  alt548_end:
-  # rx pass
-    rx546_cur."!cursor_pass"(rx546_pos, "")
-    if_null rx546_debug, debug_452
-    rx546_cur."!cursor_debug"("PASS", "", " at pos=", rx546_pos)
-  debug_452:
-    .return (rx546_cur)
-  rx546_restart:
-    if_null rx546_debug, debug_453
-    rx546_cur."!cursor_debug"("NEXT", "")
-  debug_453:
-  rx546_fail:
-    (rx546_rep, rx546_pos, $I10, $P10) = rx546_cur."!mark_fail"(0)
-    lt rx546_pos, -1, rx546_done
-    eq rx546_pos, -1, rx546_fail
-    jump $I10
-  rx546_done:
-    rx546_cur."!cursor_fail"()
-    if_null rx546_debug, debug_454
-    rx546_cur."!cursor_debug"("FAIL", "")
-  debug_454:
-    .return (rx546_cur)
+    ne $I10, -1, rxscan555_done
+    goto rxscan555_scan
+  rxscan555_loop:
+    ($P10) = rx554_cur."from"()
+    inc $P10
+    set rx554_pos, $P10
+    ge rx554_pos, rx554_eos, rxscan555_done
+  rxscan555_scan:
+    set_addr $I10, rxscan555_loop
+    rx554_cur."!mark_push"(0, rx554_pos, $I10)
+  rxscan555_done:
+  alt556_0:
+    set_addr $I10, alt556_1
+    rx554_cur."!mark_push"(0, rx554_pos, $I10)
+.annotate 'line', 181
+  # rx charclass_q s r 0..-1
+    sub $I10, rx554_pos, rx554_off
+    find_not_cclass $I11, 32, rx554_tgt, $I10, rx554_eos
+    add rx554_pos, rx554_off, $I11
+  # rx literal  "-"
+    add $I11, rx554_pos, 1
+    gt $I11, rx554_eos, rx554_fail
+    sub $I11, rx554_pos, rx554_off
+    ord $I11, rx554_tgt, $I11
+    ne $I11, 45, rx554_fail
+    add rx554_pos, 1
+  # rx subrule "obs" subtype=method negate=
+    rx554_cur."!cursor_pos"(rx554_pos)
+    $P10 = rx554_cur."obs"("- as character range", "..")
+    unless $P10, rx554_fail
+    rx554_pos = $P10."pos"()
+    goto alt556_end
+  alt556_1:
+.annotate 'line', 182
+  # rx charclass_q s r 0..-1
+    sub $I10, rx554_pos, rx554_off
+    find_not_cclass $I11, 32, rx554_tgt, $I10, rx554_eos
+    add rx554_pos, rx554_off, $I11
+  alt557_0:
+    set_addr $I10, alt557_1
+    rx554_cur."!mark_push"(0, rx554_pos, $I10)
+  # rx literal  "\\"
+    add $I11, rx554_pos, 1
+    gt $I11, rx554_eos, rx554_fail
+    sub $I11, rx554_pos, rx554_off
+    ord $I11, rx554_tgt, $I11
+    ne $I11, 92, rx554_fail
+    add rx554_pos, 1
+  # rx subrule $P559 subtype=capture negate=
+    rx554_cur."!cursor_pos"(rx554_pos)
+    .const 'Sub' $P559 = "159_1284728471.30547" 
+    capture_lex $P559
+    $P10 = rx554_cur.$P559()
+    unless $P10, rx554_fail
+    rx554_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"(0)
+    rx554_pos = $P10."pos"()
+    goto alt557_end
+  alt557_1:
+  # rx subrule $P563 subtype=capture negate=
+    rx554_cur."!cursor_pos"(rx554_pos)
+    .const 'Sub' $P563 = "160_1284728471.30547" 
+    capture_lex $P563
+    $P10 = rx554_cur.$P563()
+    unless $P10, rx554_fail
+    rx554_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"(0)
+    rx554_pos = $P10."pos"()
+  alt557_end:
+  # rx rxquantr566 ** 0..1
+    set_addr $I10, rxquantr566_done
+    rx554_cur."!mark_push"(0, rx554_pos, $I10)
+  rxquantr566_loop:
+  # rx charclass_q s r 0..-1
+    sub $I10, rx554_pos, rx554_off
+    find_not_cclass $I11, 32, rx554_tgt, $I10, rx554_eos
+    add rx554_pos, rx554_off, $I11
+  # rx literal  ".."
+    add $I11, rx554_pos, 2
+    gt $I11, rx554_eos, rx554_fail
+    sub $I11, rx554_pos, rx554_off
+    substr $S10, rx554_tgt, $I11, 2
+    ne $S10, "..", rx554_fail
+    add rx554_pos, 2
+  # rx charclass_q s r 0..-1
+    sub $I10, rx554_pos, rx554_off
+    find_not_cclass $I11, 32, rx554_tgt, $I10, rx554_eos
+    add rx554_pos, rx554_off, $I11
+  # rx subrule $P568 subtype=capture negate=
+    rx554_cur."!cursor_pos"(rx554_pos)
+    .const 'Sub' $P568 = "161_1284728471.30547" 
+    capture_lex $P568
+    $P10 = rx554_cur.$P568()
+    unless $P10, rx554_fail
+    rx554_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("1")
+    rx554_pos = $P10."pos"()
+    set_addr $I10, rxquantr566_done
+    (rx554_rep) = rx554_cur."!mark_commit"($I10)
+  rxquantr566_done:
+  alt556_end:
+.annotate 'line', 180
+  # rx pass
+    rx554_cur."!cursor_pass"(rx554_pos, "")
+    if_null rx554_debug, debug_479
+    rx554_cur."!cursor_debug"("PASS", "", " at pos=", rx554_pos)
+  debug_479:
+    .return (rx554_cur)
+  rx554_restart:
+    if_null rx554_debug, debug_480
+    rx554_cur."!cursor_debug"("NEXT", "")
+  debug_480:
+  rx554_fail:
+    (rx554_rep, rx554_pos, $I10, $P10) = rx554_cur."!mark_fail"(0)
+    lt rx554_pos, -1, rx554_done
+    eq rx554_pos, -1, rx554_fail
+    jump $I10
+  rx554_done:
+    rx554_cur."!cursor_fail"()
+    if_null rx554_debug, debug_481
+    rx554_cur."!cursor_debug"("FAIL", "")
+  debug_481:
+    .return (rx554_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_ident"  :subid("154_1282323996.47527") :method
-.annotate 'line', 190
-    $P553 = self."!protoregex"("mod_ident")
-    .return ($P553)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_ident"  :subid("155_1282323996.47527") :method
-.annotate 'line', 190
-    $P555 = self."!PREFIX__!protoregex"("mod_ident")
-    .return ($P555)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_ident:sym<ignorecase>"  :subid("156_1282323996.47527") :method :outer("11_1282323996.47527")
-.annotate 'line', 3
-    .local string rx557_tgt
-    .local int rx557_pos
-    .local int rx557_off
-    .local int rx557_eos
-    .local int rx557_rep
-    .local pmc rx557_cur
-    .local pmc rx557_debug
-    (rx557_cur, rx557_pos, rx557_tgt, $I10) = self."!cursor_start"()
-    getattribute rx557_debug, rx557_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx557_cur
-    .local pmc match
-    .lex "$/", match
-    length rx557_eos, rx557_tgt
-    gt rx557_pos, rx557_eos, rx557_done
-    set rx557_off, 0
-    lt rx557_pos, 2, rx557_start
-    sub rx557_off, rx557_pos, 1
-    substr rx557_tgt, rx557_tgt, rx557_off
-  rx557_start:
-    eq $I10, 1, rx557_restart
-    if_null rx557_debug, debug_458
-    rx557_cur."!cursor_debug"("START", "mod_ident:sym<ignorecase>")
-  debug_458:
+.sub "_block558"  :anon :subid("159_1284728471.30547") :method :outer("158_1284728471.30547")
+.annotate 'line', 182
+    .local string rx560_tgt
+    .local int rx560_pos
+    .local int rx560_off
+    .local int rx560_eos
+    .local int rx560_rep
+    .local pmc rx560_cur
+    .local pmc rx560_debug
+    (rx560_cur, rx560_pos, rx560_tgt, $I10) = self."!cursor_start"()
+    getattribute rx560_debug, rx560_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx560_cur
+    .local pmc match
+    .lex "$/", match
+    length rx560_eos, rx560_tgt
+    gt rx560_pos, rx560_eos, rx560_done
+    set rx560_off, 0
+    lt rx560_pos, 2, rx560_start
+    sub rx560_off, rx560_pos, 1
+    substr rx560_tgt, rx560_tgt, rx560_off
+  rx560_start:
+    eq $I10, 1, rx560_restart
+    if_null rx560_debug, debug_467
+    rx560_cur."!cursor_debug"("START", "")
+  debug_467:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan560_done
-    goto rxscan560_scan
-  rxscan560_loop:
-    ($P10) = rx557_cur."from"()
-    inc $P10
-    set rx557_pos, $P10
-    ge rx557_pos, rx557_eos, rxscan560_done
-  rxscan560_scan:
-    set_addr $I10, rxscan560_loop
-    rx557_cur."!mark_push"(0, rx557_pos, $I10)
-  rxscan560_done:
-.annotate 'line', 191
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_561_fail
-    rx557_cur."!mark_push"(0, rx557_pos, $I10)
-  # rx literal  "i"
-    add $I11, rx557_pos, 1
-    gt $I11, rx557_eos, rx557_fail
-    sub $I11, rx557_pos, rx557_off
-    ord $I11, rx557_tgt, $I11
-    ne $I11, 105, rx557_fail
-    add rx557_pos, 1
-    set_addr $I10, rxcap_561_fail
-    ($I12, $I11) = rx557_cur."!mark_peek"($I10)
-    rx557_cur."!cursor_pos"($I11)
-    ($P10) = rx557_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx557_pos, "")
-    rx557_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_561_done
-  rxcap_561_fail:
-    goto rx557_fail
-  rxcap_561_done:
-  # rx rxquantr562 ** 0..1
-    set_addr $I10, rxquantr562_done
-    rx557_cur."!mark_push"(0, rx557_pos, $I10)
-  rxquantr562_loop:
-  # rx literal  "gnorecase"
-    add $I11, rx557_pos, 9
-    gt $I11, rx557_eos, rx557_fail
-    sub $I11, rx557_pos, rx557_off
-    substr $S10, rx557_tgt, $I11, 9
-    ne $S10, "gnorecase", rx557_fail
-    add rx557_pos, 9
-    set_addr $I10, rxquantr562_done
-    (rx557_rep) = rx557_cur."!mark_commit"($I10)
-  rxquantr562_done:
-  # rx pass
-    rx557_cur."!cursor_pass"(rx557_pos, "mod_ident:sym<ignorecase>")
-    if_null rx557_debug, debug_459
-    rx557_cur."!cursor_debug"("PASS", "mod_ident:sym<ignorecase>", " at pos=", rx557_pos)
-  debug_459:
-    .return (rx557_cur)
-  rx557_restart:
-.annotate 'line', 3
-    if_null rx557_debug, debug_460
-    rx557_cur."!cursor_debug"("NEXT", "mod_ident:sym<ignorecase>")
-  debug_460:
-  rx557_fail:
-    (rx557_rep, rx557_pos, $I10, $P10) = rx557_cur."!mark_fail"(0)
-    lt rx557_pos, -1, rx557_done
-    eq rx557_pos, -1, rx557_fail
-    jump $I10
-  rx557_done:
-    rx557_cur."!cursor_fail"()
-    if_null rx557_debug, debug_461
-    rx557_cur."!cursor_debug"("FAIL", "mod_ident:sym<ignorecase>")
-  debug_461:
-    .return (rx557_cur)
+    ne $I10, -1, rxscan561_done
+    goto rxscan561_scan
+  rxscan561_loop:
+    ($P10) = rx560_cur."from"()
+    inc $P10
+    set rx560_pos, $P10
+    ge rx560_pos, rx560_eos, rxscan561_done
+  rxscan561_scan:
+    set_addr $I10, rxscan561_loop
+    rx560_cur."!mark_push"(0, rx560_pos, $I10)
+  rxscan561_done:
+  # rx charclass .
+    ge rx560_pos, rx560_eos, rx560_fail
+    inc rx560_pos
+  # rx pass
+    rx560_cur."!cursor_pass"(rx560_pos, "")
+    if_null rx560_debug, debug_468
+    rx560_cur."!cursor_debug"("PASS", "", " at pos=", rx560_pos)
+  debug_468:
+    .return (rx560_cur)
+  rx560_restart:
+    if_null rx560_debug, debug_469
+    rx560_cur."!cursor_debug"("NEXT", "")
+  debug_469:
+  rx560_fail:
+    (rx560_rep, rx560_pos, $I10, $P10) = rx560_cur."!mark_fail"(0)
+    lt rx560_pos, -1, rx560_done
+    eq rx560_pos, -1, rx560_fail
+    jump $I10
+  rx560_done:
+    rx560_cur."!cursor_fail"()
+    if_null rx560_debug, debug_470
+    rx560_cur."!cursor_debug"("FAIL", "")
+  debug_470:
+    .return (rx560_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_ident:sym<ignorecase>"  :subid("157_1282323996.47527") :method
-.annotate 'line', 3
-    new $P559, "ResizablePMCArray"
-    push $P559, "i"
-    .return ($P559)
-.end
-
-
-.namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_ident:sym<ratchet>"  :subid("158_1282323996.47527") :method :outer("11_1282323996.47527")
-.annotate 'line', 3
+.sub "_block562"  :anon :subid("160_1284728471.30547") :method :outer("158_1284728471.30547")
+.annotate 'line', 182
     .local string rx564_tgt
     .local int rx564_pos
     .local int rx564_off
@@ -8342,68 +8360,38 @@
     substr rx564_tgt, rx564_tgt, rx564_off
   rx564_start:
     eq $I10, 1, rx564_restart
-    if_null rx564_debug, debug_462
-    rx564_cur."!cursor_debug"("START", "mod_ident:sym<ratchet>")
-  debug_462:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan567_done
-    goto rxscan567_scan
-  rxscan567_loop:
+    if_null rx564_debug, debug_471
+    rx564_cur."!cursor_debug"("START", "")
+  debug_471:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan565_done
+    goto rxscan565_scan
+  rxscan565_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
+    ge rx564_pos, rx564_eos, rxscan565_done
+  rxscan565_scan:
+    set_addr $I10, rxscan565_loop
     rx564_cur."!mark_push"(0, rx564_pos, $I10)
-  rxscan567_done:
-.annotate 'line', 192
-  # rx subcapture "sym"
-    set_addr $I10, rxcap_568_fail
-    rx564_cur."!mark_push"(0, rx564_pos, $I10)
-  # rx literal  "r"
-    add $I11, rx564_pos, 1
-    gt $I11, rx564_eos, rx564_fail
-    sub $I11, rx564_pos, rx564_off
-    ord $I11, rx564_tgt, $I11
-    ne $I11, 114, rx564_fail
-    add rx564_pos, 1
-    set_addr $I10, rxcap_568_fail
-    ($I12, $I11) = rx564_cur."!mark_peek"($I10)
-    rx564_cur."!cursor_pos"($I11)
-    ($P10) = rx564_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx564_pos, "")
-    rx564_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sym")
-    goto rxcap_568_done
-  rxcap_568_fail:
-    goto rx564_fail
-  rxcap_568_done:
-  # rx rxquantr569 ** 0..1
-    set_addr $I10, rxquantr569_done
-    rx564_cur."!mark_push"(0, rx564_pos, $I10)
-  rxquantr569_loop:
-  # rx literal  "atchet"
-    add $I11, rx564_pos, 6
-    gt $I11, rx564_eos, rx564_fail
-    sub $I11, rx564_pos, rx564_off
-    substr $S10, rx564_tgt, $I11, 6
-    ne $S10, "atchet", rx564_fail
-    add rx564_pos, 6
-    set_addr $I10, rxquantr569_done
-    (rx564_rep) = rx564_cur."!mark_commit"($I10)
-  rxquantr569_done:
-  # rx pass
-    rx564_cur."!cursor_pass"(rx564_pos, "mod_ident:sym<ratchet>")
-    if_null rx564_debug, debug_463
-    rx564_cur."!cursor_debug"("PASS", "mod_ident:sym<ratchet>", " at pos=", rx564_pos)
-  debug_463:
+  rxscan565_done:
+  # rx enumcharlist negate=1 
+    ge rx564_pos, rx564_eos, rx564_fail
+    sub $I10, rx564_pos, rx564_off
+    substr $S10, rx564_tgt, $I10, 1
+    index $I11, "]\\", $S10
+    ge $I11, 0, rx564_fail
+    inc rx564_pos
+  # rx pass
+    rx564_cur."!cursor_pass"(rx564_pos, "")
+    if_null rx564_debug, debug_472
+    rx564_cur."!cursor_debug"("PASS", "", " at pos=", rx564_pos)
+  debug_472:
     .return (rx564_cur)
   rx564_restart:
-.annotate 'line', 3
-    if_null rx564_debug, debug_464
-    rx564_cur."!cursor_debug"("NEXT", "mod_ident:sym<ratchet>")
-  debug_464:
+    if_null rx564_debug, debug_473
+    rx564_cur."!cursor_debug"("NEXT", "")
+  debug_473:
   rx564_fail:
     (rx564_rep, rx564_pos, $I10, $P10) = rx564_cur."!mark_fail"(0)
     lt rx564_pos, -1, rx564_done
@@ -8411,153 +8399,713 @@
     jump $I10
   rx564_done:
     rx564_cur."!cursor_fail"()
-    if_null rx564_debug, debug_465
-    rx564_cur."!cursor_debug"("FAIL", "mod_ident:sym<ratchet>")
-  debug_465:
+    if_null rx564_debug, debug_474
+    rx564_cur."!cursor_debug"("FAIL", "")
+  debug_474:
     .return (rx564_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_ident:sym<ratchet>"  :subid("159_1282323996.47527") :method
-.annotate 'line', 3
-    new $P566, "ResizablePMCArray"
-    push $P566, "r"
-    .return ($P566)
+.sub "_block567"  :anon :subid("161_1284728471.30547") :method :outer("158_1284728471.30547")
+.annotate 'line', 182
+    .local string rx569_tgt
+    .local int rx569_pos
+    .local int rx569_off
+    .local int rx569_eos
+    .local int rx569_rep
+    .local pmc rx569_cur
+    .local pmc rx569_debug
+    (rx569_cur, rx569_pos, rx569_tgt, $I10) = self."!cursor_start"()
+    getattribute rx569_debug, rx569_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx569_cur
+    .local pmc match
+    .lex "$/", match
+    length rx569_eos, rx569_tgt
+    gt rx569_pos, rx569_eos, rx569_done
+    set rx569_off, 0
+    lt rx569_pos, 2, rx569_start
+    sub rx569_off, rx569_pos, 1
+    substr rx569_tgt, rx569_tgt, rx569_off
+  rx569_start:
+    eq $I10, 1, rx569_restart
+    if_null rx569_debug, debug_475
+    rx569_cur."!cursor_debug"("START", "")
+  debug_475:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan570_done
+    goto rxscan570_scan
+  rxscan570_loop:
+    ($P10) = rx569_cur."from"()
+    inc $P10
+    set rx569_pos, $P10
+    ge rx569_pos, rx569_eos, rxscan570_done
+  rxscan570_scan:
+    set_addr $I10, rxscan570_loop
+    rx569_cur."!mark_push"(0, rx569_pos, $I10)
+  rxscan570_done:
+  # rx charclass .
+    ge rx569_pos, rx569_eos, rx569_fail
+    inc rx569_pos
+  # rx pass
+    rx569_cur."!cursor_pass"(rx569_pos, "")
+    if_null rx569_debug, debug_476
+    rx569_cur."!cursor_debug"("PASS", "", " at pos=", rx569_pos)
+  debug_476:
+    .return (rx569_cur)
+  rx569_restart:
+    if_null rx569_debug, debug_477
+    rx569_cur."!cursor_debug"("NEXT", "")
+  debug_477:
+  rx569_fail:
+    (rx569_rep, rx569_pos, $I10, $P10) = rx569_cur."!mark_fail"(0)
+    lt rx569_pos, -1, rx569_done
+    eq rx569_pos, -1, rx569_fail
+    jump $I10
+  rx569_done:
+    rx569_cur."!cursor_fail"()
+    if_null rx569_debug, debug_478
+    rx569_cur."!cursor_debug"("FAIL", "")
+  debug_478:
+    .return (rx569_cur)
+    .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "mod_ident:sym<sigspace>"  :subid("160_1282323996.47527") :method :outer("11_1282323996.47527")
-.annotate 'line', 3
-    .local string rx571_tgt
-    .local int rx571_pos
-    .local int rx571_off
-    .local int rx571_eos
-    .local int rx571_rep
-    .local pmc rx571_cur
-    .local pmc rx571_debug
-    (rx571_cur, rx571_pos, rx571_tgt, $I10) = self."!cursor_start"()
-    getattribute rx571_debug, rx571_cur, "$!debug"
-    .lex unicode:"$\x{a2}", rx571_cur
-    .local pmc match
-    .lex "$/", match
-    length rx571_eos, rx571_tgt
-    gt rx571_pos, rx571_eos, rx571_done
-    set rx571_off, 0
-    lt rx571_pos, 2, rx571_start
-    sub rx571_off, rx571_pos, 1
-    substr rx571_tgt, rx571_tgt, rx571_off
-  rx571_start:
-    eq $I10, 1, rx571_restart
-    if_null rx571_debug, debug_466
-    rx571_cur."!cursor_debug"("START", "mod_ident:sym<sigspace>")
-  debug_466:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan574_done
-    goto rxscan574_scan
-  rxscan574_loop:
-    ($P10) = rx571_cur."from"()
-    inc $P10
-    set rx571_pos, $P10
-    ge rx571_pos, rx571_eos, rxscan574_done
-  rxscan574_scan:
-    set_addr $I10, rxscan574_loop
-    rx571_cur."!mark_push"(0, rx571_pos, $I10)
-  rxscan574_done:
+.sub "mod_internal"  :subid("162_1284728471.30547") :method :outer("11_1284728471.30547")
+.annotate 'line', 3
+    .const 'Sub' $P584 = "164_1284728471.30547" 
+    capture_lex $P584
+    .local string rx576_tgt
+    .local int rx576_pos
+    .local int rx576_off
+    .local int rx576_eos
+    .local int rx576_rep
+    .local pmc rx576_cur
+    .local pmc rx576_debug
+    (rx576_cur, rx576_pos, rx576_tgt, $I10) = self."!cursor_start"()
+    rx576_cur."!cursor_caparray"("n")
+    getattribute rx576_debug, rx576_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx576_cur
+    .local pmc match
+    .lex "$/", match
+    length rx576_eos, rx576_tgt
+    gt rx576_pos, rx576_eos, rx576_done
+    set rx576_off, 0
+    lt rx576_pos, 2, rx576_start
+    sub rx576_off, rx576_pos, 1
+    substr rx576_tgt, rx576_tgt, rx576_off
+  rx576_start:
+    eq $I10, 1, rx576_restart
+    if_null rx576_debug, debug_485
+    rx576_cur."!cursor_debug"("START", "mod_internal")
+  debug_485:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan580_done
+    goto rxscan580_scan
+  rxscan580_loop:
+    ($P10) = rx576_cur."from"()
+    inc $P10
+    set rx576_pos, $P10
+    ge rx576_pos, rx576_eos, rxscan580_done
+  rxscan580_scan:
+    set_addr $I10, rxscan580_loop
+    rx576_cur."!mark_push"(0, rx576_pos, $I10)
+  rxscan580_done:
+  alt581_0:
+.annotate 'line', 191
+    set_addr $I10, alt581_1
+    rx576_cur."!mark_push"(0, rx576_pos, $I10)
+.annotate 'line', 192
+  # rx literal  ":"
+    add $I11, rx576_pos, 1
+    gt $I11, rx576_eos, rx576_fail
+    sub $I11, rx576_pos, rx576_off
+    ord $I11, rx576_tgt, $I11
+    ne $I11, 58, rx576_fail
+    add rx576_pos, 1
+  # rx rxquantr582 ** 1..1
+    set_addr $I10, rxquantr582_done
+    rx576_cur."!mark_push"(0, -1, $I10)
+  rxquantr582_loop:
+  # rx subrule $P584 subtype=capture negate=
+    rx576_cur."!cursor_pos"(rx576_pos)
+    .const 'Sub' $P584 = "164_1284728471.30547" 
+    capture_lex $P584
+    $P10 = rx576_cur.$P584()
+    unless $P10, rx576_fail
+    goto rxsubrule588_pass
+  rxsubrule588_back:
+    $P10 = $P10."!cursor_next"()
+    unless $P10, rx576_fail
+  rxsubrule588_pass:
+    set_addr $I10, rxsubrule588_back
+    rx576_cur."!mark_push"(0, rx576_pos, $I10, $P10)
+    $P10."!cursor_names"("n")
+    rx576_pos = $P10."pos"()
+    set_addr $I10, rxquantr582_done
+    (rx576_rep) = rx576_cur."!mark_commit"($I10)
+  rxquantr582_done:
+  # rx subrule "mod_ident" subtype=capture negate=
+    rx576_cur."!cursor_pos"(rx576_pos)
+    $P10 = rx576_cur."mod_ident"()
+    unless $P10, rx576_fail
+    rx576_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("mod_ident")
+    rx576_pos = $P10."pos"()
+  # rxanchor rwb
+    le rx576_pos, 0, rx576_fail
+    sub $I10, rx576_pos, rx576_off
+    is_cclass $I11, 8192, rx576_tgt, $I10
+    if $I11, rx576_fail
+    dec $I10
+    is_cclass $I11, 8192, rx576_tgt, $I10
+    unless $I11, rx576_fail
+    goto alt581_end
+  alt581_1:
 .annotate 'line', 193
+  # rx literal  ":"
+    add $I11, rx576_pos, 1
+    gt $I11, rx576_eos, rx576_fail
+    sub $I11, rx576_pos, rx576_off
+    ord $I11, rx576_tgt, $I11
+    ne $I11, 58, rx576_fail
+    add rx576_pos, 1
+  # rx subrule "mod_ident" subtype=capture negate=
+    rx576_cur."!cursor_pos"(rx576_pos)
+    $P10 = rx576_cur."mod_ident"()
+    unless $P10, rx576_fail
+    rx576_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("mod_ident")
+    rx576_pos = $P10."pos"()
+  # rx rxquantr589 ** 0..1
+    set_addr $I10, rxquantr589_done
+    rx576_cur."!mark_push"(0, rx576_pos, $I10)
+  rxquantr589_loop:
+  # rx literal  "("
+    add $I11, rx576_pos, 1
+    gt $I11, rx576_eos, rx576_fail
+    sub $I11, rx576_pos, rx576_off
+    ord $I11, rx576_tgt, $I11
+    ne $I11, 40, rx576_fail
+    add rx576_pos, 1
+  # rx subcapture "n"
+    set_addr $I10, rxcap_590_fail
+    rx576_cur."!mark_push"(0, rx576_pos, $I10)
+  # rx charclass_q d r 1..-1
+    sub $I10, rx576_pos, rx576_off
+    find_not_cclass $I11, 8, rx576_tgt, $I10, rx576_eos
+    add $I12, $I10, 1
+    lt $I11, $I12, rx576_fail
+    add rx576_pos, rx576_off, $I11
+    set_addr $I10, rxcap_590_fail
+    ($I12, $I11) = rx576_cur."!mark_peek"($I10)
+    rx576_cur."!cursor_pos"($I11)
+    ($P10) = rx576_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx576_pos, "")
+    rx576_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("n")
+    goto rxcap_590_done
+  rxcap_590_fail:
+    goto rx576_fail
+  rxcap_590_done:
+  # rx literal  ")"
+    add $I11, rx576_pos, 1
+    gt $I11, rx576_eos, rx576_fail
+    sub $I11, rx576_pos, rx576_off
+    ord $I11, rx576_tgt, $I11
+    ne $I11, 41, rx576_fail
+    add rx576_pos, 1
+    set_addr $I10, rxquantr589_done
+    (rx576_rep) = rx576_cur."!mark_commit"($I10)
+  rxquantr589_done:
+  alt581_end:
+.annotate 'line', 190
+  # rx pass
+    rx576_cur."!cursor_pass"(rx576_pos, "mod_internal")
+    if_null rx576_debug, debug_490
+    rx576_cur."!cursor_debug"("PASS", "mod_internal", " at pos=", rx576_pos)
+  debug_490:
+    .return (rx576_cur)
+  rx576_restart:
+.annotate 'line', 3
+    if_null rx576_debug, debug_491
+    rx576_cur."!cursor_debug"("NEXT", "mod_internal")
+  debug_491:
+  rx576_fail:
+    (rx576_rep, rx576_pos, $I10, $P10) = rx576_cur."!mark_fail"(0)
+    lt rx576_pos, -1, rx576_done
+    eq rx576_pos, -1, rx576_fail
+    jump $I10
+  rx576_done:
+    rx576_cur."!cursor_fail"()
+    if_null rx576_debug, debug_492
+    rx576_cur."!cursor_debug"("FAIL", "mod_internal")
+  debug_492:
+    .return (rx576_cur)
+    .return ()
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "!PREFIX__mod_internal"  :subid("163_1284728471.30547") :method
+.annotate 'line', 3
+    $P578 = self."!PREFIX__!subrule"("mod_ident", ":")
+    new $P579, "ResizablePMCArray"
+    push $P579, $P578
+    push $P579, ":"
+    .return ($P579)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "_block583"  :anon :subid("164_1284728471.30547") :method :outer("162_1284728471.30547")
+.annotate 'line', 192
+    .local string rx585_tgt
+    .local int rx585_pos
+    .local int rx585_off
+    .local int rx585_eos
+    .local int rx585_rep
+    .local pmc rx585_cur
+    .local pmc rx585_debug
+    (rx585_cur, rx585_pos, rx585_tgt, $I10) = self."!cursor_start"()
+    getattribute rx585_debug, rx585_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx585_cur
+    .local pmc match
+    .lex "$/", match
+    length rx585_eos, rx585_tgt
+    gt rx585_pos, rx585_eos, rx585_done
+    set rx585_off, 0
+    lt rx585_pos, 2, rx585_start
+    sub rx585_off, rx585_pos, 1
+    substr rx585_tgt, rx585_tgt, rx585_off
+  rx585_start:
+    eq $I10, 1, rx585_restart
+    if_null rx585_debug, debug_486
+    rx585_cur."!cursor_debug"("START", "")
+  debug_486:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan586_done
+    goto rxscan586_scan
+  rxscan586_loop:
+    ($P10) = rx585_cur."from"()
+    inc $P10
+    set rx585_pos, $P10
+    ge rx585_pos, rx585_eos, rxscan586_done
+  rxscan586_scan:
+    set_addr $I10, rxscan586_loop
+    rx585_cur."!mark_push"(0, rx585_pos, $I10)
+  rxscan586_done:
+  alt587_0:
+    set_addr $I10, alt587_1
+    rx585_cur."!mark_push"(0, rx585_pos, $I10)
+  # rx literal  "!"
+    add $I11, rx585_pos, 1
+    gt $I11, rx585_eos, rx585_fail
+    sub $I11, rx585_pos, rx585_off
+    ord $I11, rx585_tgt, $I11
+    ne $I11, 33, rx585_fail
+    add rx585_pos, 1
+    goto alt587_end
+  alt587_1:
+  # rx charclass_q d r 1..-1
+    sub $I10, rx585_pos, rx585_off
+    find_not_cclass $I11, 8, rx585_tgt, $I10, rx585_eos
+    add $I12, $I10, 1
+    lt $I11, $I12, rx585_fail
+    add rx585_pos, rx585_off, $I11
+  alt587_end:
+  # rx pass
+    rx585_cur."!cursor_pass"(rx585_pos, "")
+    if_null rx585_debug, debug_487
+    rx585_cur."!cursor_debug"("PASS", "", " at pos=", rx585_pos)
+  debug_487:
+    .return (rx585_cur)
+  rx585_restart:
+    if_null rx585_debug, debug_488
+    rx585_cur."!cursor_debug"("NEXT", "")
+  debug_488:
+  rx585_fail:
+    (rx585_rep, rx585_pos, $I10, $P10) = rx585_cur."!mark_fail"(0)
+    lt rx585_pos, -1, rx585_done
+    eq rx585_pos, -1, rx585_fail
+    jump $I10
+  rx585_done:
+    rx585_cur."!cursor_fail"()
+    if_null rx585_debug, debug_489
+    rx585_cur."!cursor_debug"("FAIL", "")
+  debug_489:
+    .return (rx585_cur)
+    .return ()
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "mod_ident"  :subid("165_1284728471.30547") :method
+.annotate 'line', 197
+    $P592 = self."!protoregex"("mod_ident")
+    .return ($P592)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "!PREFIX__mod_ident"  :subid("166_1284728471.30547") :method
+.annotate 'line', 197
+    $P594 = self."!PREFIX__!protoregex"("mod_ident")
+    .return ($P594)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "mod_ident:sym<ignorecase>"  :subid("167_1284728471.30547") :method :outer("11_1284728471.30547")
+.annotate 'line', 3
+    .local string rx596_tgt
+    .local int rx596_pos
+    .local int rx596_off
+    .local int rx596_eos
+    .local int rx596_rep
+    .local pmc rx596_cur
+    .local pmc rx596_debug
+    (rx596_cur, rx596_pos, rx596_tgt, $I10) = self."!cursor_start"()
+    getattribute rx596_debug, rx596_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx596_cur
+    .local pmc match
+    .lex "$/", match
+    length rx596_eos, rx596_tgt
+    gt rx596_pos, rx596_eos, rx596_done
+    set rx596_off, 0
+    lt rx596_pos, 2, rx596_start
+    sub rx596_off, rx596_pos, 1
+    substr rx596_tgt, rx596_tgt, rx596_off
+  rx596_start:
+    eq $I10, 1, rx596_restart
+    if_null rx596_debug, debug_493
+    rx596_cur."!cursor_debug"("START", "mod_ident:sym<ignorecase>")
+  debug_493:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan599_done
+    goto rxscan599_scan
+  rxscan599_loop:
+    ($P10) = rx596_cur."from"()
+    inc $P10
+    set rx596_pos, $P10
+    ge rx596_pos, rx596_eos, rxscan599_done
+  rxscan599_scan:
+    set_addr $I10, rxscan599_loop
+    rx596_cur."!mark_push"(0, rx596_pos, $I10)
+  rxscan599_done:
+.annotate 'line', 198
   # rx subcapture "sym"
-    set_addr $I10, rxcap_575_fail
-    rx571_cur."!mark_push"(0, rx571_pos, $I10)
+    set_addr $I10, rxcap_600_fail
+    rx596_cur."!mark_push"(0, rx596_pos, $I10)
+  # rx literal  "i"
+    add $I11, rx596_pos, 1
+    gt $I11, rx596_eos, rx596_fail
+    sub $I11, rx596_pos, rx596_off
+    ord $I11, rx596_tgt, $I11
+    ne $I11, 105, rx596_fail
+    add rx596_pos, 1
+    set_addr $I10, rxcap_600_fail
+    ($I12, $I11) = rx596_cur."!mark_peek"($I10)
+    rx596_cur."!cursor_pos"($I11)
+    ($P10) = rx596_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx596_pos, "")
+    rx596_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_600_done
+  rxcap_600_fail:
+    goto rx596_fail
+  rxcap_600_done:
+  # rx rxquantr601 ** 0..1
+    set_addr $I10, rxquantr601_done
+    rx596_cur."!mark_push"(0, rx596_pos, $I10)
+  rxquantr601_loop:
+  # rx literal  "gnorecase"
+    add $I11, rx596_pos, 9
+    gt $I11, rx596_eos, rx596_fail
+    sub $I11, rx596_pos, rx596_off
+    substr $S10, rx596_tgt, $I11, 9
+    ne $S10, "gnorecase", rx596_fail
+    add rx596_pos, 9
+    set_addr $I10, rxquantr601_done
+    (rx596_rep) = rx596_cur."!mark_commit"($I10)
+  rxquantr601_done:
+  # rx pass
+    rx596_cur."!cursor_pass"(rx596_pos, "mod_ident:sym<ignorecase>")
+    if_null rx596_debug, debug_494
+    rx596_cur."!cursor_debug"("PASS", "mod_ident:sym<ignorecase>", " at pos=", rx596_pos)
+  debug_494:
+    .return (rx596_cur)
+  rx596_restart:
+.annotate 'line', 3
+    if_null rx596_debug, debug_495
+    rx596_cur."!cursor_debug"("NEXT", "mod_ident:sym<ignorecase>")
+  debug_495:
+  rx596_fail:
+    (rx596_rep, rx596_pos, $I10, $P10) = rx596_cur."!mark_fail"(0)
+    lt rx596_pos, -1, rx596_done
+    eq rx596_pos, -1, rx596_fail
+    jump $I10
+  rx596_done:
+    rx596_cur."!cursor_fail"()
+    if_null rx596_debug, debug_496
+    rx596_cur."!cursor_debug"("FAIL", "mod_ident:sym<ignorecase>")
+  debug_496:
+    .return (rx596_cur)
+    .return ()
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "!PREFIX__mod_ident:sym<ignorecase>"  :subid("168_1284728471.30547") :method
+.annotate 'line', 3
+    new $P598, "ResizablePMCArray"
+    push $P598, "i"
+    .return ($P598)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "mod_ident:sym<ratchet>"  :subid("169_1284728471.30547") :method :outer("11_1284728471.30547")
+.annotate 'line', 3
+    .local string rx603_tgt
+    .local int rx603_pos
+    .local int rx603_off
+    .local int rx603_eos
+    .local int rx603_rep
+    .local pmc rx603_cur
+    .local pmc rx603_debug
+    (rx603_cur, rx603_pos, rx603_tgt, $I10) = self."!cursor_start"()
+    getattribute rx603_debug, rx603_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx603_cur
+    .local pmc match
+    .lex "$/", match
+    length rx603_eos, rx603_tgt
+    gt rx603_pos, rx603_eos, rx603_done
+    set rx603_off, 0
+    lt rx603_pos, 2, rx603_start
+    sub rx603_off, rx603_pos, 1
+    substr rx603_tgt, rx603_tgt, rx603_off
+  rx603_start:
+    eq $I10, 1, rx603_restart
+    if_null rx603_debug, debug_497
+    rx603_cur."!cursor_debug"("START", "mod_ident:sym<ratchet>")
+  debug_497:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan606_done
+    goto rxscan606_scan
+  rxscan606_loop:
+    ($P10) = rx603_cur."from"()
+    inc $P10
+    set rx603_pos, $P10
+    ge rx603_pos, rx603_eos, rxscan606_done
+  rxscan606_scan:
+    set_addr $I10, rxscan606_loop
+    rx603_cur."!mark_push"(0, rx603_pos, $I10)
+  rxscan606_done:
+.annotate 'line', 199
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_607_fail
+    rx603_cur."!mark_push"(0, rx603_pos, $I10)
+  # rx literal  "r"
+    add $I11, rx603_pos, 1
+    gt $I11, rx603_eos, rx603_fail
+    sub $I11, rx603_pos, rx603_off
+    ord $I11, rx603_tgt, $I11
+    ne $I11, 114, rx603_fail
+    add rx603_pos, 1
+    set_addr $I10, rxcap_607_fail
+    ($I12, $I11) = rx603_cur."!mark_peek"($I10)
+    rx603_cur."!cursor_pos"($I11)
+    ($P10) = rx603_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx603_pos, "")
+    rx603_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_607_done
+  rxcap_607_fail:
+    goto rx603_fail
+  rxcap_607_done:
+  # rx rxquantr608 ** 0..1
+    set_addr $I10, rxquantr608_done
+    rx603_cur."!mark_push"(0, rx603_pos, $I10)
+  rxquantr608_loop:
+  # rx literal  "atchet"
+    add $I11, rx603_pos, 6
+    gt $I11, rx603_eos, rx603_fail
+    sub $I11, rx603_pos, rx603_off
+    substr $S10, rx603_tgt, $I11, 6
+    ne $S10, "atchet", rx603_fail
+    add rx603_pos, 6
+    set_addr $I10, rxquantr608_done
+    (rx603_rep) = rx603_cur."!mark_commit"($I10)
+  rxquantr608_done:
+  # rx pass
+    rx603_cur."!cursor_pass"(rx603_pos, "mod_ident:sym<ratchet>")
+    if_null rx603_debug, debug_498
+    rx603_cur."!cursor_debug"("PASS", "mod_ident:sym<ratchet>", " at pos=", rx603_pos)
+  debug_498:
+    .return (rx603_cur)
+  rx603_restart:
+.annotate 'line', 3
+    if_null rx603_debug, debug_499
+    rx603_cur."!cursor_debug"("NEXT", "mod_ident:sym<ratchet>")
+  debug_499:
+  rx603_fail:
+    (rx603_rep, rx603_pos, $I10, $P10) = rx603_cur."!mark_fail"(0)
+    lt rx603_pos, -1, rx603_done
+    eq rx603_pos, -1, rx603_fail
+    jump $I10
+  rx603_done:
+    rx603_cur."!cursor_fail"()
+    if_null rx603_debug, debug_500
+    rx603_cur."!cursor_debug"("FAIL", "mod_ident:sym<ratchet>")
+  debug_500:
+    .return (rx603_cur)
+    .return ()
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "!PREFIX__mod_ident:sym<ratchet>"  :subid("170_1284728471.30547") :method
+.annotate 'line', 3
+    new $P605, "ResizablePMCArray"
+    push $P605, "r"
+    .return ($P605)
+.end
+
+
+.namespace ["Regex";"P6Regex";"Grammar"]
+.sub "mod_ident:sym<sigspace>"  :subid("171_1284728471.30547") :method :outer("11_1284728471.30547")
+.annotate 'line', 3
+    .local string rx610_tgt
+    .local int rx610_pos
+    .local int rx610_off
+    .local int rx610_eos
+    .local int rx610_rep
+    .local pmc rx610_cur
+    .local pmc rx610_debug
+    (rx610_cur, rx610_pos, rx610_tgt, $I10) = self."!cursor_start"()
+    getattribute rx610_debug, rx610_cur, "$!debug"
+    .lex unicode:"$\x{a2}", rx610_cur
+    .local pmc match
+    .lex "$/", match
+    length rx610_eos, rx610_tgt
+    gt rx610_pos, rx610_eos, rx610_done
+    set rx610_off, 0
+    lt rx610_pos, 2, rx610_start
+    sub rx610_off, rx610_pos, 1
+    substr rx610_tgt, rx610_tgt, rx610_off
+  rx610_start:
+    eq $I10, 1, rx610_restart
+    if_null rx610_debug, debug_501
+    rx610_cur."!cursor_debug"("START", "mod_ident:sym<sigspace>")
+  debug_501:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan613_done
+    goto rxscan613_scan
+  rxscan613_loop:
+    ($P10) = rx610_cur."from"()
+    inc $P10
+    set rx610_pos, $P10
+    ge rx610_pos, rx610_eos, rxscan613_done
+  rxscan613_scan:
+    set_addr $I10, rxscan613_loop
+    rx610_cur."!mark_push"(0, rx610_pos, $I10)
+  rxscan613_done:
+.annotate 'line', 200
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_614_fail
+    rx610_cur."!mark_push"(0, rx610_pos, $I10)
   # rx literal  "s"
-    add $I11, rx571_pos, 1
-    gt $I11, rx571_eos, rx571_fail
-    sub $I11, rx571_pos, rx571_off
-    ord $I11, rx571_tgt, $I11
-    ne $I11, 115, rx571_fail
-    add rx571_pos, 1
-    set_addr $I10, rxcap_575_fail
-    ($I12, $I11) = rx571_cur."!mark_peek"($I10)
-    rx571_cur."!cursor_pos"($I11)
-    ($P10) = rx571_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx571_pos, "")
-    rx571_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx610_pos, 1
+    gt $I11, rx610_eos, rx610_fail
+    sub $I11, rx610_pos, rx610_off
+    ord $I11, rx610_tgt, $I11
+    ne $I11, 115, rx610_fail
+    add rx610_pos, 1
+    set_addr $I10, rxcap_614_fail
+    ($I12, $I11) = rx610_cur."!mark_peek"($I10)
+    rx610_cur."!cursor_pos"($I11)
+    ($P10) = rx610_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx610_pos, "")
+    rx610_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_575_done
-  rxcap_575_fail:
-    goto rx571_fail
-  rxcap_575_done:
-  # rx rxquantr576 ** 0..1
-    set_addr $I10, rxquantr576_done
-    rx571_cur."!mark_push"(0, rx571_pos, $I10)
-  rxquantr576_loop:
+    goto rxcap_614_done
+  rxcap_614_fail:
+    goto rx610_fail
+  rxcap_614_done:
+  # rx rxquantr615 ** 0..1
+    set_addr $I10, rxquantr615_done
+    rx610_cur."!mark_push"(0, rx610_pos, $I10)
+  rxquantr615_loop:
   # rx literal  "igspace"
-    add $I11, rx571_pos, 7
-    gt $I11, rx571_eos, rx571_fail
-    sub $I11, rx571_pos, rx571_off
-    substr $S10, rx571_tgt, $I11, 7
-    ne $S10, "igspace", rx571_fail
-    add rx571_pos, 7
-    set_addr $I10, rxquantr576_done
-    (rx571_rep) = rx571_cur."!mark_commit"($I10)
-  rxquantr576_done:
-  # rx pass
-    rx571_cur."!cursor_pass"(rx571_pos, "mod_ident:sym<sigspace>")
-    if_null rx571_debug, debug_467
-    rx571_cur."!cursor_debug"("PASS", "mod_ident:sym<sigspace>", " at pos=", rx571_pos)
-  debug_467:
-    .return (rx571_cur)
-  rx571_restart:
+    add $I11, rx610_pos, 7
+    gt $I11, rx610_eos, rx610_fail
+    sub $I11, rx610_pos, rx610_off
+    substr $S10, rx610_tgt, $I11, 7
+    ne $S10, "igspace", rx610_fail
+    add rx610_pos, 7
+    set_addr $I10, rxquantr615_done
+    (rx610_rep) = rx610_cur."!mark_commit"($I10)
+  rxquantr615_done:
+  # rx pass
+    rx610_cur."!cursor_pass"(rx610_pos, "mod_ident:sym<sigspace>")
+    if_null rx610_debug, debug_502
+    rx610_cur."!cursor_debug"("PASS", "mod_ident:sym<sigspace>", " at pos=", rx610_pos)
+  debug_502:
+    .return (rx610_cur)
+  rx610_restart:
 .annotate 'line', 3
-    if_null rx571_debug, debug_468
-    rx571_cur."!cursor_debug"("NEXT", "mod_ident:sym<sigspace>")
-  debug_468:
-  rx571_fail:
-    (rx571_rep, rx571_pos, $I10, $P10) = rx571_cur."!mark_fail"(0)
-    lt rx571_pos, -1, rx571_done
-    eq rx571_pos, -1, rx571_fail
-    jump $I10
-  rx571_done:
-    rx571_cur."!cursor_fail"()
-    if_null rx571_debug, debug_469
-    rx571_cur."!cursor_debug"("FAIL", "mod_ident:sym<sigspace>")
-  debug_469:
-    .return (rx571_cur)
+    if_null rx610_debug, debug_503
+    rx610_cur."!cursor_debug"("NEXT", "mod_ident:sym<sigspace>")
+  debug_503:
+  rx610_fail:
+    (rx610_rep, rx610_pos, $I10, $P10) = rx610_cur."!mark_fail"(0)
+    lt rx610_pos, -1, rx610_done
+    eq rx610_pos, -1, rx610_fail
+    jump $I10
+  rx610_done:
+    rx610_cur."!cursor_fail"()
+    if_null rx610_debug, debug_504
+    rx610_cur."!cursor_debug"("FAIL", "mod_ident:sym<sigspace>")
+  debug_504:
+    .return (rx610_cur)
     .return ()
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "!PREFIX__mod_ident:sym<sigspace>"  :subid("161_1282323996.47527") :method
+.sub "!PREFIX__mod_ident:sym<sigspace>"  :subid("172_1284728471.30547") :method
 .annotate 'line', 3
-    new $P573, "ResizablePMCArray"
-    push $P573, "s"
-    .return ($P573)
+    new $P612, "ResizablePMCArray"
+    push $P612, "s"
+    .return ($P612)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Grammar"]
-.sub "_block577" :load :anon :subid("162_1282323996.47527")
+.sub "_block616" :load :anon :subid("173_1284728471.30547")
 .annotate 'line', 3
-    .const 'Sub' $P579 = "11_1282323996.47527" 
-    $P580 = $P579()
-    .return ($P580)
+    .const 'Sub' $P618 = "11_1284728471.30547" 
+    $P619 = $P618()
+    .return ($P619)
 .end
 
 
 .namespace []
-.sub "_block582" :load :anon :subid("163_1282323996.47527")
+.sub "_block621" :load :anon :subid("174_1284728471.30547")
 .annotate 'line', 1
-    .const 'Sub' $P584 = "10_1282323996.47527" 
-    $P585 = $P584()
-    .return ($P585)
+    .const 'Sub' $P623 = "10_1284728471.30547" 
+    $P624 = $P623()
+    .return ($P624)
 .end
 
 ### .include 'gen/p6regex-actions.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1282323999.42098")
+.sub "_block11"  :anon :subid("10_1284728474.62745")
 .annotate 'line', 0
     get_hll_global $P14, ["Regex";"P6Regex";"Actions"], "_block13" 
     capture_lex $P14
@@ -8574,15 +9122,15 @@
     $P1671 = $P14()
 .annotate 'line', 1
     .return ($P1671)
-    .const 'Sub' $P1673 = "94_1282323999.42098" 
+    .const 'Sub' $P1673 = "94_1284728474.62745" 
     .return ($P1673)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post95") :outer("10_1282323999.42098")
+.sub "" :load :init :subid("post95") :outer("10_1284728474.62745")
 .annotate 'line', 0
-    .const 'Sub' $P12 = "10_1282323999.42098" 
+    .const 'Sub' $P12 = "10_1284728474.62745" 
     .local pmc block
     set block, $P12
     $P1676 = get_root_global ["parrot"], "P6metaclass"
@@ -8591,119 +9139,119 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block13"  :subid("11_1282323999.42098") :outer("10_1282323999.42098")
+.sub "_block13"  :subid("11_1284728474.62745") :outer("10_1284728474.62745")
 .annotate 'line', 4
-    .const 'Sub' $P1648 = "92_1282323999.42098" 
+    .const 'Sub' $P1648 = "92_1284728474.62745" 
     capture_lex $P1648
-    .const 'Sub' $P1628 = "91_1282323999.42098" 
+    .const 'Sub' $P1628 = "91_1284728474.62745" 
     capture_lex $P1628
-    .const 'Sub' $P1596 = "90_1282323999.42098" 
+    .const 'Sub' $P1596 = "90_1284728474.62745" 
     capture_lex $P1596
-    .const 'Sub' $P1527 = "86_1282323999.42098" 
+    .const 'Sub' $P1527 = "86_1284728474.62745" 
     capture_lex $P1527
-    .const 'Sub' $P1459 = "84_1282323999.42098" 
+    .const 'Sub' $P1459 = "84_1284728474.62745" 
     capture_lex $P1459
-    .const 'Sub' $P1387 = "81_1282323999.42098" 
+    .const 'Sub' $P1387 = "81_1284728474.62745" 
     capture_lex $P1387
-    .const 'Sub' $P1373 = "80_1282323999.42098" 
+    .const 'Sub' $P1373 = "80_1284728474.62745" 
     capture_lex $P1373
-    .const 'Sub' $P1349 = "79_1282323999.42098" 
+    .const 'Sub' $P1349 = "79_1284728474.62745" 
     capture_lex $P1349
-    .const 'Sub' $P1331 = "78_1282323999.42098" 
+    .const 'Sub' $P1331 = "78_1284728474.62745" 
     capture_lex $P1331
-    .const 'Sub' $P1317 = "77_1282323999.42098" 
+    .const 'Sub' $P1317 = "77_1284728474.62745" 
     capture_lex $P1317
-    .const 'Sub' $P1304 = "76_1282323999.42098" 
+    .const 'Sub' $P1304 = "76_1284728474.62745" 
     capture_lex $P1304
-    .const 'Sub' $P1273 = "75_1282323999.42098" 
+    .const 'Sub' $P1273 = "75_1284728474.62745" 
     capture_lex $P1273
-    .const 'Sub' $P1242 = "74_1282323999.42098" 
+    .const 'Sub' $P1242 = "74_1284728474.62745" 
     capture_lex $P1242
-    .const 'Sub' $P1226 = "73_1282323999.42098" 
+    .const 'Sub' $P1226 = "73_1284728474.62745" 
     capture_lex $P1226
-    .const 'Sub' $P1210 = "72_1282323999.42098" 
+    .const 'Sub' $P1210 = "72_1284728474.62745" 
     capture_lex $P1210
-    .const 'Sub' $P1194 = "71_1282323999.42098" 
+    .const 'Sub' $P1194 = "71_1284728474.62745" 
     capture_lex $P1194
-    .const 'Sub' $P1178 = "70_1282323999.42098" 
+    .const 'Sub' $P1178 = "70_1284728474.62745" 
     capture_lex $P1178
-    .const 'Sub' $P1162 = "69_1282323999.42098" 
+    .const 'Sub' $P1162 = "69_1284728474.62745" 
     capture_lex $P1162
-    .const 'Sub' $P1146 = "68_1282323999.42098" 
+    .const 'Sub' $P1146 = "68_1284728474.62745" 
     capture_lex $P1146
-    .const 'Sub' $P1130 = "67_1282323999.42098" 
+    .const 'Sub' $P1130 = "67_1284728474.62745" 
     capture_lex $P1130
-    .const 'Sub' $P1106 = "66_1282323999.42098" 
+    .const 'Sub' $P1106 = "66_1284728474.62745" 
     capture_lex $P1106
-    .const 'Sub' $P1091 = "65_1282323999.42098" 
+    .const 'Sub' $P1091 = "65_1284728474.62745" 
     capture_lex $P1091
-    .const 'Sub' $P1033 = "64_1282323999.42098" 
+    .const 'Sub' $P1033 = "64_1284728474.62745" 
     capture_lex $P1033
-    .const 'Sub' $P1012 = "63_1282323999.42098" 
+    .const 'Sub' $P1012 = "63_1284728474.62745" 
     capture_lex $P1012
-    .const 'Sub' $P990 = "62_1282323999.42098" 
+    .const 'Sub' $P990 = "62_1284728474.62745" 
     capture_lex $P990
-    .const 'Sub' $P980 = "61_1282323999.42098" 
+    .const 'Sub' $P980 = "61_1284728474.62745" 
     capture_lex $P980
-    .const 'Sub' $P970 = "60_1282323999.42098" 
+    .const 'Sub' $P970 = "60_1284728474.62745" 
     capture_lex $P970
-    .const 'Sub' $P960 = "59_1282323999.42098" 
+    .const 'Sub' $P960 = "59_1284728474.62745" 
     capture_lex $P960
-    .const 'Sub' $P948 = "58_1282323999.42098" 
+    .const 'Sub' $P948 = "58_1284728474.62745" 
     capture_lex $P948
-    .const 'Sub' $P936 = "57_1282323999.42098" 
+    .const 'Sub' $P936 = "57_1284728474.62745" 
     capture_lex $P936
-    .const 'Sub' $P924 = "56_1282323999.42098" 
+    .const 'Sub' $P924 = "56_1284728474.62745" 
     capture_lex $P924
-    .const 'Sub' $P912 = "55_1282323999.42098" 
+    .const 'Sub' $P912 = "55_1284728474.62745" 
     capture_lex $P912
-    .const 'Sub' $P900 = "54_1282323999.42098" 
+    .const 'Sub' $P900 = "54_1284728474.62745" 
     capture_lex $P900
-    .const 'Sub' $P888 = "53_1282323999.42098" 
+    .const 'Sub' $P888 = "53_1284728474.62745" 
     capture_lex $P888
-    .const 'Sub' $P876 = "52_1282323999.42098" 
+    .const 'Sub' $P876 = "52_1284728474.62745" 
     capture_lex $P876
-    .const 'Sub' $P864 = "51_1282323999.42098" 
+    .const 'Sub' $P864 = "51_1284728474.62745" 
     capture_lex $P864
-    .const 'Sub' $P836 = "50_1282323999.42098" 
+    .const 'Sub' $P836 = "50_1284728474.62745" 
     capture_lex $P836
-    .const 'Sub' $P808 = "49_1282323999.42098" 
+    .const 'Sub' $P808 = "49_1284728474.62745" 
     capture_lex $P808
-    .const 'Sub' $P790 = "48_1282323999.42098" 
+    .const 'Sub' $P790 = "48_1284728474.62745" 
     capture_lex $P790
-    .const 'Sub' $P780 = "47_1282323999.42098" 
+    .const 'Sub' $P780 = "47_1284728474.62745" 
     capture_lex $P780
-    .const 'Sub' $P762 = "46_1282323999.42098" 
+    .const 'Sub' $P762 = "46_1284728474.62745" 
     capture_lex $P762
-    .const 'Sub' $P689 = "44_1282323999.42098" 
+    .const 'Sub' $P689 = "44_1284728474.62745" 
     capture_lex $P689
-    .const 'Sub' $P672 = "43_1282323999.42098" 
+    .const 'Sub' $P672 = "43_1284728474.62745" 
     capture_lex $P672
-    .const 'Sub' $P657 = "42_1282323999.42098" 
+    .const 'Sub' $P657 = "42_1284728474.62745" 
     capture_lex $P657
-    .const 'Sub' $P642 = "41_1282323999.42098" 
+    .const 'Sub' $P642 = "41_1284728474.62745" 
     capture_lex $P642
-    .const 'Sub' $P616 = "40_1282323999.42098" 
+    .const 'Sub' $P616 = "40_1284728474.62745" 
     capture_lex $P616
-    .const 'Sub' $P565 = "38_1282323999.42098" 
+    .const 'Sub' $P565 = "38_1284728474.62745" 
     capture_lex $P565
-    .const 'Sub' $P497 = "36_1282323999.42098" 
+    .const 'Sub' $P497 = "36_1284728474.62745" 
     capture_lex $P497
-    .const 'Sub' $P460 = "34_1282323999.42098" 
+    .const 'Sub' $P460 = "34_1284728474.62745" 
     capture_lex $P460
-    .const 'Sub' $P404 = "31_1282323999.42098" 
+    .const 'Sub' $P404 = "31_1284728474.62745" 
     capture_lex $P404
-    .const 'Sub' $P389 = "30_1282323999.42098" 
+    .const 'Sub' $P389 = "30_1284728474.62745" 
     capture_lex $P389
-    .const 'Sub' $P363 = "28_1282323999.42098" 
+    .const 'Sub' $P363 = "28_1284728474.62745" 
     capture_lex $P363
-    .const 'Sub' $P346 = "27_1282323999.42098" 
+    .const 'Sub' $P346 = "27_1284728474.62745" 
     capture_lex $P346
-    .const 'Sub' $P312 = "26_1282323999.42098" 
+    .const 'Sub' $P312 = "26_1284728474.62745" 
     capture_lex $P312
-    .const 'Sub' $P57 = "13_1282323999.42098" 
+    .const 'Sub' $P57 = "13_1284728474.62745" 
     capture_lex $P57
-    .const 'Sub' $P16 = "12_1282323999.42098" 
+    .const 'Sub' $P16 = "12_1284728474.62745" 
     capture_lex $P16
     get_global $P15, "@MODIFIERS"
     unless_null $P15, vivify_97
@@ -8711,15 +9259,15 @@
     set_global "@MODIFIERS", $P15
   vivify_97:
 .annotate 'line', 506
-    .const 'Sub' $P16 = "12_1282323999.42098" 
+    .const 'Sub' $P16 = "12_1284728474.62745" 
     newclosure $P56, $P16
     .lex "buildsub", $P56
 .annotate 'line', 524
-    .const 'Sub' $P57 = "13_1282323999.42098" 
+    .const 'Sub' $P57 = "13_1284728474.62745" 
     newclosure $P311, $P57
     .lex "capnames", $P311
 .annotate 'line', 590
-    .const 'Sub' $P312 = "26_1282323999.42098" 
+    .const 'Sub' $P312 = "26_1284728474.62745" 
     newclosure $P344, $P312
     .lex "backmod", $P344
 .annotate 'line', 4
@@ -8735,17 +9283,17 @@
     find_lex $P1626, "capnames"
     find_lex $P1627, "backmod"
 .annotate 'line', 603
-    .const 'Sub' $P1648 = "92_1282323999.42098" 
+    .const 'Sub' $P1648 = "92_1284728474.62745" 
     newclosure $P1665, $P1648
 .annotate 'line', 4
     .return ($P1665)
-    .const 'Sub' $P1667 = "93_1282323999.42098" 
+    .const 'Sub' $P1667 = "93_1284728474.62745" 
     .return ($P1667)
 .end
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "" :load :init :subid("post96") :outer("11_1282323999.42098")
+.sub "" :load :init :subid("post96") :outer("11_1284728474.62745")
 .annotate 'line', 4
     get_hll_global $P14, ["Regex";"P6Regex";"Actions"], "_block13" 
     .local pmc block
@@ -8762,7 +9310,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "buildsub"  :subid("12_1282323999.42098") :outer("11_1282323999.42098")
+.sub "buildsub"  :subid("12_1284728474.62745") :outer("11_1284728474.62745")
     .param pmc param_19
     .param pmc param_20 :optional
     .param int has_param_20 :opt_flag
@@ -8864,19 +9412,19 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "capnames"  :subid("13_1282323999.42098") :outer("11_1282323999.42098")
+.sub "capnames"  :subid("13_1284728474.62745") :outer("11_1284728474.62745")
     .param pmc param_60
     .param pmc param_61
 .annotate 'line', 524
-    .const 'Sub' $P286 = "24_1282323999.42098" 
+    .const 'Sub' $P286 = "24_1284728474.62745" 
     capture_lex $P286
-    .const 'Sub' $P223 = "21_1282323999.42098" 
+    .const 'Sub' $P223 = "21_1284728474.62745" 
     capture_lex $P223
-    .const 'Sub' $P181 = "19_1282323999.42098" 
+    .const 'Sub' $P181 = "19_1284728474.62745" 
     capture_lex $P181
-    .const 'Sub' $P139 = "17_1282323999.42098" 
+    .const 'Sub' $P139 = "17_1284728474.62745" 
     capture_lex $P139
-    .const 'Sub' $P72 = "14_1282323999.42098" 
+    .const 'Sub' $P72 = "14_1284728474.62745" 
     capture_lex $P72
     new $P59, 'ExceptionHandler'
     set_addr $P59, control_58
@@ -8932,21 +9480,21 @@
     set $S283, $P282
     iseq $I284, $S283, "quant"
     unless $I284, if_281_end
-    .const 'Sub' $P286 = "24_1282323999.42098" 
+    .const 'Sub' $P286 = "24_1284728474.62745" 
     capture_lex $P286
     $P286()
   if_281_end:
     goto if_218_end
   if_218:
 .annotate 'line', 562
-    .const 'Sub' $P223 = "21_1282323999.42098" 
+    .const 'Sub' $P223 = "21_1284728474.62745" 
     capture_lex $P223
     $P223()
   if_218_end:
     goto if_171_end
   if_171:
 .annotate 'line', 549
-    .const 'Sub' $P181 = "19_1282323999.42098" 
+    .const 'Sub' $P181 = "19_1284728474.62745" 
     capture_lex $P181
     $P181()
   if_171_end:
@@ -8966,7 +9514,7 @@
     unless $P133, loop168_done
     shift $P137, $P133
   loop168_redo:
-    .const 'Sub' $P139 = "17_1282323999.42098" 
+    .const 'Sub' $P139 = "17_1284728474.62745" 
     capture_lex $P139
     $P139($P137)
   loop168_next:
@@ -8985,7 +9533,7 @@
     goto if_67_end
   if_67:
 .annotate 'line', 527
-    .const 'Sub' $P72 = "14_1282323999.42098" 
+    .const 'Sub' $P72 = "14_1284728474.62745" 
     capture_lex $P72
     $P72()
   if_67_end:
@@ -9010,9 +9558,9 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "_block285"  :anon :subid("24_1282323999.42098") :outer("13_1282323999.42098")
+.sub "_block285"  :anon :subid("24_1284728474.62745") :outer("13_1284728474.62745")
 .annotate 'line', 579
-    .const 'Sub' $P297 = "25_1282323999.42098" 
+    .const 'Sub' $P297 = "25_1284728474.62745" 
     capture_lex $P297
 .annotate 'line', 580
     $P287 = root_new ['parrot';'Hash']
@@ -9041,7 +9589,7 @@
     unless $P292, loop302_done
     shift $P295, $P292
   loop302_redo:
-    .const 'Sub' $P297 = "25_1282323999.42098" 
+    .const 'Sub' $P297 = "25_1284728474.62745" 
     capture_lex $P297
     $P297($P295)
   loop302_next:
@@ -9071,7 +9619,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block296"  :anon :subid("25_1282323999.42098") :outer("24_1282323999.42098")
+.sub "_block296"  :anon :subid("25_1284728474.62745") :outer("24_1284728474.62745")
     .param pmc param_298
 .annotate 'line', 581
     .lex "$_", param_298
@@ -9092,11 +9640,11 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "_block222"  :anon :subid("21_1282323999.42098") :outer("13_1282323999.42098")
+.sub "_block222"  :anon :subid("21_1284728474.62745") :outer("13_1284728474.62745")
 .annotate 'line', 562
-    .const 'Sub' $P263 = "23_1282323999.42098" 
+    .const 'Sub' $P263 = "23_1284728474.62745" 
     capture_lex $P263
-    .const 'Sub' $P235 = "22_1282323999.42098" 
+    .const 'Sub' $P235 = "22_1284728474.62745" 
     capture_lex $P235
 .annotate 'line', 563
     new $P224, "Undef"
@@ -9131,7 +9679,7 @@
     unless $P230, loop251_done
     shift $P233, $P230
   loop251_redo:
-    .const 'Sub' $P235 = "22_1282323999.42098" 
+    .const 'Sub' $P235 = "22_1284728474.62745" 
     capture_lex $P235
     $P235($P233)
   loop251_next:
@@ -9170,7 +9718,7 @@
     unless $P258, loop276_done
     shift $P261, $P258
   loop276_redo:
-    .const 'Sub' $P263 = "23_1282323999.42098" 
+    .const 'Sub' $P263 = "23_1284728474.62745" 
     capture_lex $P263
     $P263($P261)
   loop276_next:
@@ -9200,7 +9748,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block234"  :anon :subid("22_1282323999.42098") :outer("21_1282323999.42098")
+.sub "_block234"  :anon :subid("22_1284728474.62745") :outer("21_1284728474.62745")
     .param pmc param_236
 .annotate 'line', 569
     .lex "$_", param_236
@@ -9240,7 +9788,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block262"  :anon :subid("23_1282323999.42098") :outer("21_1282323999.42098")
+.sub "_block262"  :anon :subid("23_1284728474.62745") :outer("21_1284728474.62745")
     .param pmc param_264
 .annotate 'line', 574
     .lex "$_", param_264
@@ -9281,9 +9829,9 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "_block180"  :anon :subid("19_1282323999.42098") :outer("13_1282323999.42098")
+.sub "_block180"  :anon :subid("19_1284728474.62745") :outer("13_1284728474.62745")
 .annotate 'line', 549
-    .const 'Sub' $P199 = "20_1282323999.42098" 
+    .const 'Sub' $P199 = "20_1284728474.62745" 
     capture_lex $P199
 .annotate 'line', 550
     new $P182, "Undef"
@@ -9326,7 +9874,7 @@
     unless $P194, loop215_done
     shift $P197, $P194
   loop215_redo:
-    .const 'Sub' $P199 = "20_1282323999.42098" 
+    .const 'Sub' $P199 = "20_1284728474.62745" 
     capture_lex $P199
     $P199($P197)
   loop215_next:
@@ -9346,7 +9894,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block198"  :anon :subid("20_1282323999.42098") :outer("19_1282323999.42098")
+.sub "_block198"  :anon :subid("20_1284728474.62745") :outer("19_1284728474.62745")
     .param pmc param_200
 .annotate 'line', 557
     .lex "$_", param_200
@@ -9387,10 +9935,10 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "_block138"  :anon :subid("17_1282323999.42098") :outer("13_1282323999.42098")
+.sub "_block138"  :anon :subid("17_1284728474.62745") :outer("13_1284728474.62745")
     .param pmc param_141
 .annotate 'line', 541
-    .const 'Sub' $P150 = "18_1282323999.42098" 
+    .const 'Sub' $P150 = "18_1284728474.62745" 
     capture_lex $P150
 .annotate 'line', 542
     $P140 = root_new ['parrot';'Hash']
@@ -9413,7 +9961,7 @@
     unless $P145, loop163_done
     shift $P148, $P145
   loop163_redo:
-    .const 'Sub' $P150 = "18_1282323999.42098" 
+    .const 'Sub' $P150 = "18_1284728474.62745" 
     capture_lex $P150
     $P150($P148)
   loop163_next:
@@ -9443,7 +9991,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block149"  :anon :subid("18_1282323999.42098") :outer("17_1282323999.42098")
+.sub "_block149"  :anon :subid("18_1284728474.62745") :outer("17_1284728474.62745")
     .param pmc param_151
 .annotate 'line', 543
     .lex "$_", param_151
@@ -9484,9 +10032,9 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "_block71"  :anon :subid("14_1282323999.42098") :outer("13_1282323999.42098")
+.sub "_block71"  :anon :subid("14_1284728474.62745") :outer("13_1284728474.62745")
 .annotate 'line', 527
-    .const 'Sub' $P81 = "15_1282323999.42098" 
+    .const 'Sub' $P81 = "15_1284728474.62745" 
     capture_lex $P81
 .annotate 'line', 528
     new $P73, "Undef"
@@ -9507,7 +10055,7 @@
     unless $P75, loop125_done
     shift $P79, $P75
   loop125_redo:
-    .const 'Sub' $P81 = "15_1282323999.42098" 
+    .const 'Sub' $P81 = "15_1284728474.62745" 
     capture_lex $P81
     $P81($P79)
   loop125_next:
@@ -9531,10 +10079,10 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "_block80"  :anon :subid("15_1282323999.42098") :outer("14_1282323999.42098")
+.sub "_block80"  :anon :subid("15_1284728474.62745") :outer("14_1284728474.62745")
     .param pmc param_83
 .annotate 'line', 529
-    .const 'Sub' $P92 = "16_1282323999.42098" 
+    .const 'Sub' $P92 = "16_1284728474.62745" 
     capture_lex $P92
 .annotate 'line', 530
     $P82 = root_new ['parrot';'Hash']
@@ -9557,7 +10105,7 @@
     unless $P87, loop112_done
     shift $P90, $P87
   loop112_redo:
-    .const 'Sub' $P92 = "16_1282323999.42098" 
+    .const 'Sub' $P92 = "16_1284728474.62745" 
     capture_lex $P92
     $P92($P90)
   loop112_next:
@@ -9606,7 +10154,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block91"  :anon :subid("16_1282323999.42098") :outer("15_1282323999.42098")
+.sub "_block91"  :anon :subid("16_1284728474.62745") :outer("15_1284728474.62745")
     .param pmc param_93
 .annotate 'line', 531
     .lex "$_", param_93
@@ -9666,7 +10214,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backmod"  :subid("26_1282323999.42098") :outer("11_1282323999.42098")
+.sub "backmod"  :subid("26_1284728474.62745") :outer("11_1284728474.62745")
     .param pmc param_315
     .param pmc param_316
 .annotate 'line', 590
@@ -9741,7 +10289,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "arg"  :subid("27_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "arg"  :subid("27_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_349
 .annotate 'line', 14
     new $P348, 'ExceptionHandler'
@@ -9798,10 +10346,10 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "arglist"  :subid("28_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "arglist"  :subid("28_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_366
 .annotate 'line', 18
-    .const 'Sub' $P376 = "29_1282323999.42098" 
+    .const 'Sub' $P376 = "29_1284728474.62745" 
     capture_lex $P376
     new $P365, 'ExceptionHandler'
     set_addr $P365, control_364
@@ -9835,7 +10383,7 @@
     unless $P370, loop382_done
     shift $P374, $P370
   loop382_redo:
-    .const 'Sub' $P376 = "29_1282323999.42098" 
+    .const 'Sub' $P376 = "29_1284728474.62745" 
     capture_lex $P376
     $P376($P374)
   loop382_next:
@@ -9864,7 +10412,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block375"  :anon :subid("29_1282323999.42098") :outer("28_1282323999.42098")
+.sub "_block375"  :anon :subid("29_1284728474.62745") :outer("28_1284728474.62745")
     .param pmc param_377
 .annotate 'line', 20
     .lex "$_", param_377
@@ -9878,7 +10426,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "TOP"  :subid("30_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "TOP"  :subid("30_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_392
 .annotate 'line', 24
     new $P391, 'ExceptionHandler'
@@ -9921,14 +10469,14 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "nibbler"  :subid("31_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "nibbler"  :subid("31_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_407
     .param pmc param_408 :optional
     .param int has_param_408 :opt_flag
 .annotate 'line', 30
-    .const 'Sub' $P443 = "33_1282323999.42098" 
+    .const 'Sub' $P443 = "33_1284728474.62745" 
     capture_lex $P443
-    .const 'Sub' $P416 = "32_1282323999.42098" 
+    .const 'Sub' $P416 = "32_1284728474.62745" 
     capture_lex $P416
     new $P406, 'ExceptionHandler'
     set_addr $P406, control_405
@@ -9949,7 +10497,7 @@
     set $S413, $P412
     iseq $I414, $S413, "open"
     unless $I414, if_411_end
-    .const 'Sub' $P416 = "32_1282323999.42098" 
+    .const 'Sub' $P416 = "32_1284728474.62745" 
     capture_lex $P416
     $P416()
   if_411_end:
@@ -10012,7 +10560,7 @@
     unless $P437, loop449_done
     shift $P441, $P437
   loop449_redo:
-    .const 'Sub' $P443 = "33_1282323999.42098" 
+    .const 'Sub' $P443 = "33_1284728474.62745" 
     capture_lex $P443
     $P443($P441)
   loop449_next:
@@ -10043,7 +10591,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "_block415"  :anon :subid("32_1282323999.42098") :outer("31_1282323999.42098")
+.sub "_block415"  :anon :subid("32_1284728474.62745") :outer("31_1284728474.62745")
 .annotate 'line', 32
     $P417 = root_new ['parrot';'Hash']
     .lex "%old", $P417
@@ -10081,7 +10629,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block442"  :anon :subid("33_1282323999.42098") :outer("31_1282323999.42098")
+.sub "_block442"  :anon :subid("33_1284728474.62745") :outer("31_1284728474.62745")
     .param pmc param_444
 .annotate 'line', 42
     .lex "$_", param_444
@@ -10097,10 +10645,10 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "termconj"  :subid("34_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "termconj"  :subid("34_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_463
 .annotate 'line', 52
-    .const 'Sub' $P480 = "35_1282323999.42098" 
+    .const 'Sub' $P480 = "35_1284728474.62745" 
     capture_lex $P480
     new $P462, 'ExceptionHandler'
     set_addr $P462, control_461
@@ -10168,7 +10716,7 @@
     unless $P474, loop486_done
     shift $P478, $P474
   loop486_redo:
-    .const 'Sub' $P480 = "35_1282323999.42098" 
+    .const 'Sub' $P480 = "35_1284728474.62745" 
     capture_lex $P480
     $P480($P478)
   loop486_next:
@@ -10198,7 +10746,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block479"  :anon :subid("35_1282323999.42098") :outer("34_1282323999.42098")
+.sub "_block479"  :anon :subid("35_1284728474.62745") :outer("34_1284728474.62745")
     .param pmc param_481
 .annotate 'line', 56
     .lex "$_", param_481
@@ -10214,10 +10762,10 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "termish"  :subid("36_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "termish"  :subid("36_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_500
 .annotate 'line', 66
-    .const 'Sub' $P513 = "37_1282323999.42098" 
+    .const 'Sub' $P513 = "37_1284728474.62745" 
     capture_lex $P513
     new $P499, 'ExceptionHandler'
     set_addr $P499, control_498
@@ -10260,7 +10808,7 @@
     unless $P507, loop558_done
     shift $P511, $P507
   loop558_redo:
-    .const 'Sub' $P513 = "37_1282323999.42098" 
+    .const 'Sub' $P513 = "37_1284728474.62745" 
     capture_lex $P513
     $P513($P511)
   loop558_next:
@@ -10289,7 +10837,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block512"  :anon :subid("37_1282323999.42098") :outer("36_1282323999.42098")
+.sub "_block512"  :anon :subid("37_1284728474.62745") :outer("36_1284728474.62745")
     .param pmc param_515
 .annotate 'line', 70
     new $P514, "Undef"
@@ -10417,10 +10965,10 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "quantified_atom"  :subid("38_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "quantified_atom"  :subid("38_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_568
 .annotate 'line', 87
-    .const 'Sub' $P577 = "39_1282323999.42098" 
+    .const 'Sub' $P577 = "39_1284728474.62745" 
     capture_lex $P577
     new $P567, 'ExceptionHandler'
     set_addr $P567, control_566
@@ -10483,7 +11031,7 @@
     goto if_573_end
   if_573:
 .annotate 'line', 89
-    .const 'Sub' $P577 = "39_1282323999.42098" 
+    .const 'Sub' $P577 = "39_1284728474.62745" 
     capture_lex $P577
     $P577()
   if_573_end:
@@ -10537,7 +11085,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block576"  :anon :subid("39_1282323999.42098") :outer("38_1282323999.42098")
+.sub "_block576"  :anon :subid("39_1284728474.62745") :outer("38_1284728474.62745")
 .annotate 'line', 91
     new $P578, "Undef"
     .lex "$qast", $P578
@@ -10578,7 +11126,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "atom"  :subid("40_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "atom"  :subid("40_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_619
 .annotate 'line', 102
     new $P618, 'ExceptionHandler'
@@ -10657,7 +11205,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "quantifier:sym<*>"  :subid("41_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "quantifier:sym<*>"  :subid("41_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_645
 .annotate 'line', 112
     new $P644, 'ExceptionHandler'
@@ -10698,7 +11246,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "quantifier:sym<+>"  :subid("42_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "quantifier:sym<+>"  :subid("42_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_660
 .annotate 'line', 117
     new $P659, 'ExceptionHandler'
@@ -10739,7 +11287,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "quantifier:sym<?>"  :subid("43_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "quantifier:sym<?>"  :subid("43_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_675
 .annotate 'line', 122
     new $P674, 'ExceptionHandler'
@@ -10784,10 +11332,10 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "quantifier:sym<**>"  :subid("44_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "quantifier:sym<**>"  :subid("44_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_692
 .annotate 'line', 128
-    .const 'Sub' $P707 = "45_1282323999.42098" 
+    .const 'Sub' $P707 = "45_1284728474.62745" 
     capture_lex $P707
     new $P691, 'ExceptionHandler'
     set_addr $P691, control_690
@@ -10925,7 +11473,7 @@
     goto if_703_end
   if_703:
 .annotate 'line', 131
-    .const 'Sub' $P707 = "45_1282323999.42098" 
+    .const 'Sub' $P707 = "45_1284728474.62745" 
     capture_lex $P707
     $P707()
   if_703_end:
@@ -10953,7 +11501,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block706"  :anon :subid("45_1282323999.42098") :outer("44_1282323999.42098")
+.sub "_block706"  :anon :subid("45_1284728474.62745") :outer("44_1284728474.62745")
 .annotate 'line', 132
     new $P708, "Undef"
     .lex "$ast", $P708
@@ -10996,7 +11544,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<ws>"  :subid("46_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<ws>"  :subid("46_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_765
 .annotate 'line', 157
     new $P764, 'ExceptionHandler'
@@ -11049,7 +11597,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<[ ]>"  :subid("47_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<[ ]>"  :subid("47_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_783
 .annotate 'line', 166
     new $P782, 'ExceptionHandler'
@@ -11082,7 +11630,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<( )>"  :subid("48_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<( )>"  :subid("48_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_793
 .annotate 'line', 170
     new $P792, 'ExceptionHandler'
@@ -11131,7 +11679,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<'>"  :subid("49_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<'>"  :subid("49_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_811
 .annotate 'line', 177
     new $P810, 'ExceptionHandler'
@@ -11205,7 +11753,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<\">"  :subid("50_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<\">"  :subid("50_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_839
 .annotate 'line', 185
     new $P838, 'ExceptionHandler'
@@ -11279,7 +11827,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<.>"  :subid("51_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<.>"  :subid("51_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_867
 .annotate 'line', 193
     new $P866, 'ExceptionHandler'
@@ -11311,7 +11859,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<^>"  :subid("52_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<^>"  :subid("52_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_879
 .annotate 'line', 198
     new $P878, 'ExceptionHandler'
@@ -11343,7 +11891,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<^^>"  :subid("53_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<^^>"  :subid("53_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_891
 .annotate 'line', 203
     new $P890, 'ExceptionHandler'
@@ -11375,7 +11923,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<$>"  :subid("54_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<$>"  :subid("54_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_903
 .annotate 'line', 208
     new $P902, 'ExceptionHandler'
@@ -11407,7 +11955,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<$$>"  :subid("55_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<$$>"  :subid("55_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_915
 .annotate 'line', 213
     new $P914, 'ExceptionHandler'
@@ -11439,7 +11987,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<:::>"  :subid("56_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<:::>"  :subid("56_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_927
 .annotate 'line', 218
     new $P926, 'ExceptionHandler'
@@ -11471,7 +12019,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<lwb>"  :subid("57_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<lwb>"  :subid("57_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_939
 .annotate 'line', 223
     new $P938, 'ExceptionHandler'
@@ -11503,7 +12051,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<rwb>"  :subid("58_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<rwb>"  :subid("58_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_951
 .annotate 'line', 228
     new $P950, 'ExceptionHandler'
@@ -11535,7 +12083,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<bs>"  :subid("59_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<bs>"  :subid("59_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_963
 .annotate 'line', 233
     new $P962, 'ExceptionHandler'
@@ -11568,7 +12116,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<mod>"  :subid("60_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<mod>"  :subid("60_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_973
 .annotate 'line', 237
     new $P972, 'ExceptionHandler'
@@ -11601,7 +12149,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<assert>"  :subid("61_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<assert>"  :subid("61_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_983
 .annotate 'line', 241
     new $P982, 'ExceptionHandler'
@@ -11634,7 +12182,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<~>"  :subid("62_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<~>"  :subid("62_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_993
 .annotate 'line', 245
     new $P992, 'ExceptionHandler'
@@ -11697,7 +12245,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<{*}>"  :subid("63_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<{*}>"  :subid("63_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1015
 .annotate 'line', 258
     new $P1014, 'ExceptionHandler'
@@ -11759,7 +12307,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<var>"  :subid("64_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<var>"  :subid("64_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1036
 .annotate 'line', 265
     new $P1035, 'ExceptionHandler'
@@ -11922,7 +12470,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "metachar:sym<PIR>"  :subid("65_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "metachar:sym<PIR>"  :subid("65_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1094
 .annotate 'line', 285
     new $P1093, 'ExceptionHandler'
@@ -11962,7 +12510,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<w>"  :subid("66_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "backslash:sym<w>"  :subid("66_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1109
 .annotate 'line', 293
     new $P1108, 'ExceptionHandler'
@@ -12029,7 +12577,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<b>"  :subid("67_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "backslash:sym<b>"  :subid("67_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1133
 .annotate 'line', 299
     new $P1132, 'ExceptionHandler'
@@ -12073,7 +12621,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<e>"  :subid("68_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "backslash:sym<e>"  :subid("68_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1149
 .annotate 'line', 305
     new $P1148, 'ExceptionHandler'
@@ -12117,7 +12665,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<f>"  :subid("69_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "backslash:sym<f>"  :subid("69_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1165
 .annotate 'line', 311
     new $P1164, 'ExceptionHandler'
@@ -12161,7 +12709,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<h>"  :subid("70_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "backslash:sym<h>"  :subid("70_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1181
 .annotate 'line', 317
     new $P1180, 'ExceptionHandler'
@@ -12205,7 +12753,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<r>"  :subid("71_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "backslash:sym<r>"  :subid("71_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1197
 .annotate 'line', 323
     new $P1196, 'ExceptionHandler'
@@ -12249,7 +12797,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<t>"  :subid("72_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "backslash:sym<t>"  :subid("72_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1213
 .annotate 'line', 329
     new $P1212, 'ExceptionHandler'
@@ -12293,7 +12841,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<v>"  :subid("73_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "backslash:sym<v>"  :subid("73_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1229
 .annotate 'line', 335
     new $P1228, 'ExceptionHandler'
@@ -12337,7 +12885,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<o>"  :subid("74_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "backslash:sym<o>"  :subid("74_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1245
 .annotate 'line', 342
     new $P1244, 'ExceptionHandler'
@@ -12421,7 +12969,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<x>"  :subid("75_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "backslash:sym<x>"  :subid("75_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1276
 .annotate 'line', 351
     new $P1275, 'ExceptionHandler'
@@ -12505,7 +13053,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<c>"  :subid("76_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "backslash:sym<c>"  :subid("76_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1307
 .annotate 'line', 360
     new $P1306, 'ExceptionHandler'
@@ -12541,7 +13089,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "backslash:sym<misc>"  :subid("77_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "backslash:sym<misc>"  :subid("77_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1320
 .annotate 'line', 364
     new $P1319, 'ExceptionHandler'
@@ -12575,7 +13123,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "assertion:sym<?>"  :subid("78_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "assertion:sym<?>"  :subid("78_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1334
 .annotate 'line', 370
     new $P1333, 'ExceptionHandler'
@@ -12636,7 +13184,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "assertion:sym<!>"  :subid("79_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "assertion:sym<!>"  :subid("79_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1352
 .annotate 'line', 380
     new $P1351, 'ExceptionHandler'
@@ -12705,7 +13253,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "assertion:sym<method>"  :subid("80_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "assertion:sym<method>"  :subid("80_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1376
 .annotate 'line', 393
     new $P1375, 'ExceptionHandler'
@@ -12749,12 +13297,12 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "assertion:sym<name>"  :subid("81_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "assertion:sym<name>"  :subid("81_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1390
 .annotate 'line', 400
-    .const 'Sub' $P1447 = "83_1282323999.42098" 
+    .const 'Sub' $P1447 = "83_1284728474.62745" 
     capture_lex $P1447
-    .const 'Sub' $P1413 = "82_1282323999.42098" 
+    .const 'Sub' $P1413 = "82_1284728474.62745" 
     capture_lex $P1413
     new $P1389, 'ExceptionHandler'
     set_addr $P1389, control_1388
@@ -12848,7 +13396,7 @@
     unless $P1438, loop1452_done
     shift $P1445, $P1438
   loop1452_redo:
-    .const 'Sub' $P1447 = "83_1282323999.42098" 
+    .const 'Sub' $P1447 = "83_1284728474.62745" 
     capture_lex $P1447
     $P1447($P1445)
   loop1452_next:
@@ -12888,7 +13436,7 @@
     goto if_1408_end
   if_1408:
 .annotate 'line', 407
-    .const 'Sub' $P1413 = "82_1282323999.42098" 
+    .const 'Sub' $P1413 = "82_1284728474.62745" 
     capture_lex $P1413
     $P1413()
   if_1408_end:
@@ -12930,7 +13478,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1446"  :anon :subid("83_1282323999.42098") :outer("81_1282323999.42098")
+.sub "_block1446"  :anon :subid("83_1284728474.62745") :outer("81_1284728474.62745")
     .param pmc param_1448
 .annotate 'line', 428
     .lex "$_", param_1448
@@ -12942,7 +13490,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1412"  :anon :subid("82_1282323999.42098") :outer("81_1282323999.42098")
+.sub "_block1412"  :anon :subid("82_1284728474.62745") :outer("81_1284728474.62745")
 .annotate 'line', 408
     new $P1414, "Undef"
     .lex "$regexsym", $P1414
@@ -12974,10 +13522,10 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "assertion:sym<[>"  :subid("84_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "assertion:sym<[>"  :subid("84_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1462
 .annotate 'line', 434
-    .const 'Sub' $P1497 = "85_1282323999.42098" 
+    .const 'Sub' $P1497 = "85_1284728474.62745" 
     capture_lex $P1497
     new $P1461, 'ExceptionHandler'
     set_addr $P1461, control_1460
@@ -13069,7 +13617,7 @@
     islt $I1495, $N1492, $N1494
     unless $I1495, loop1520_done
   loop1520_redo:
-    .const 'Sub' $P1497 = "85_1282323999.42098" 
+    .const 'Sub' $P1497 = "85_1284728474.62745" 
     capture_lex $P1497
     $P1497()
   loop1520_next:
@@ -13097,7 +13645,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1496"  :anon :subid("85_1282323999.42098") :outer("84_1282323999.42098")
+.sub "_block1496"  :anon :subid("85_1284728474.62745") :outer("84_1284728474.62745")
 .annotate 'line', 448
     new $P1498, "Undef"
     .lex "$ast", $P1498
@@ -13149,12 +13697,12 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "cclass_elem"  :subid("86_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "cclass_elem"  :subid("86_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1530
 .annotate 'line', 461
-    .const 'Sub' $P1555 = "88_1282323999.42098" 
+    .const 'Sub' $P1555 = "88_1284728474.62745" 
     capture_lex $P1555
-    .const 'Sub' $P1539 = "87_1282323999.42098" 
+    .const 'Sub' $P1539 = "87_1284728474.62745" 
     capture_lex $P1539
     new $P1529, 'ExceptionHandler'
     set_addr $P1529, control_1528
@@ -13203,7 +13751,7 @@
     unless $P1549, loop1580_done
     shift $P1553, $P1549
   loop1580_redo:
-    .const 'Sub' $P1555 = "88_1282323999.42098" 
+    .const 'Sub' $P1555 = "88_1284728474.62745" 
     capture_lex $P1555
     $P1555($P1553)
   loop1580_next:
@@ -13227,7 +13775,7 @@
     goto if_1535_end
   if_1535:
 .annotate 'line', 464
-    .const 'Sub' $P1539 = "87_1282323999.42098" 
+    .const 'Sub' $P1539 = "87_1284728474.62745" 
     capture_lex $P1539
     $P1539()
   if_1535_end:
@@ -13259,10 +13807,10 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1554"  :anon :subid("88_1282323999.42098") :outer("86_1282323999.42098")
+.sub "_block1554"  :anon :subid("88_1284728474.62745") :outer("86_1284728474.62745")
     .param pmc param_1556
 .annotate 'line', 468
-    .const 'Sub' $P1562 = "89_1282323999.42098" 
+    .const 'Sub' $P1562 = "89_1284728474.62745" 
     capture_lex $P1562
     .lex "$_", param_1556
 .annotate 'line', 469
@@ -13291,7 +13839,7 @@
 .annotate 'line', 469
     goto if_1558_end
   if_1558:
-    .const 'Sub' $P1562 = "89_1282323999.42098" 
+    .const 'Sub' $P1562 = "89_1284728474.62745" 
     capture_lex $P1562
     $P1575 = $P1562()
     set $P1557, $P1575
@@ -13302,7 +13850,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1561"  :anon :subid("89_1282323999.42098") :outer("88_1282323999.42098")
+.sub "_block1561"  :anon :subid("89_1284728474.62745") :outer("88_1284728474.62745")
 .annotate 'line', 470
     new $P1563, "Undef"
     .lex "$a", $P1563
@@ -13366,7 +13914,7 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1538"  :anon :subid("87_1282323999.42098") :outer("86_1282323999.42098")
+.sub "_block1538"  :anon :subid("87_1284728474.62745") :outer("86_1284728474.62745")
 .annotate 'line', 465
     new $P1540, "Undef"
     .lex "$name", $P1540
@@ -13395,7 +13943,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "mod_internal"  :subid("90_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "mod_internal"  :subid("90_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1599
 .annotate 'line', 499
     new $P1598, 'ExceptionHandler'
@@ -13494,7 +14042,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "subrule_alias"  :subid("91_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "subrule_alias"  :subid("91_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1631
     .param pmc param_1632
 .annotate 'line', 597
@@ -13540,7 +14088,7 @@
 
 .namespace ["Regex";"P6Regex";"Actions"]
 .include "except_types.pasm"
-.sub "named_assertion"  :subid("92_1282323999.42098") :method :outer("11_1282323999.42098")
+.sub "named_assertion"  :subid("92_1284728474.62745") :method :outer("11_1284728474.62745")
     .param pmc param_1651
 .annotate 'line', 603
     new $P1650, 'ExceptionHandler'
@@ -13587,18 +14135,18 @@
 
 
 .namespace ["Regex";"P6Regex";"Actions"]
-.sub "_block1666" :load :anon :subid("93_1282323999.42098")
+.sub "_block1666" :load :anon :subid("93_1284728474.62745")
 .annotate 'line', 4
-    .const 'Sub' $P1668 = "11_1282323999.42098" 
+    .const 'Sub' $P1668 = "11_1284728474.62745" 
     $P1669 = $P1668()
     .return ($P1669)
 .end
 
 
 .namespace []
-.sub "_block1672" :load :anon :subid("94_1282323999.42098")
+.sub "_block1672" :load :anon :subid("94_1284728474.62745")
 .annotate 'line', 1
-    .const 'Sub' $P1674 = "10_1282323999.42098" 
+    .const 'Sub' $P1674 = "10_1284728474.62745" 
     $P1675 = $P1674()
     .return ($P1675)
 .end

Modified: branches/html_cleanup/ext/nqp-rx/src/stage0/Regex-s0.pir
==============================================================================
--- branches/html_cleanup/ext/nqp-rx/src/stage0/Regex-s0.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/ext/nqp-rx/src/stage0/Regex-s0.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -294,8 +294,7 @@
     parrotclass = getattribute $P0, 'parrotclass'
     cur = new parrotclass
 
-    $P0 = new ['CodeString']
-    $P0 = target
+    $P0 = box target
     setattribute cur, '$!target', $P0
 
     if has_cont goto cursor_cont
@@ -502,7 +501,8 @@
     fmt = new ['ResizablePMCArray']
     from = getattribute self, '$!from'
     orig = getattribute self, '$!target'
-    line = orig.'lineof'(from)
+    $P0 = get_hll_global ['HLL'], 'Compiler'
+    line = $P0.'lineof'(orig, from, 'cache'=>1)
 
     $P0 = getinterp
     $P1 = $P0.'stdhandle'(2)
@@ -1074,11 +1074,23 @@
     .local int pos
     .local string tgt
     (cur, pos, tgt) = self.'!cursor_start'()
+    .local pmc debug
+    debug = getattribute cur, '$!debug'
+    if null debug goto debug_1
+    cur.'!cursor_debug'('START', name)
+  debug_1:
     $I0 = is_cclass cclass, tgt, pos
     unless $I0 goto fail
     inc pos
+  pass:
     cur.'!cursor_pass'(pos, name)
+    if null debug goto done
+    cur.'!cursor_debug'('PASS', name)
+    goto done
   fail:
+    if null debug goto done
+    cur.'!cursor_debug'('FAIL', name)
+  done:
     .return (cur)
 .end
 
@@ -1087,6 +1099,11 @@
     .local int pos
     .local string tgt
     (cur, pos, tgt) = self.'!cursor_start'()
+    .local pmc debug
+    debug = getattribute cur, '$!debug'
+    if null debug goto debug_1
+    cur.'!cursor_debug'('START', 'alpha')
+  debug_1:
     $I0 = is_cclass .CCLASS_ALPHABETIC, tgt, pos
     if $I0 goto pass
 
@@ -1098,7 +1115,13 @@
   pass:
     inc pos
     cur.'!cursor_pass'(pos, 'alpha')
+    if null debug goto done
+    cur.'!cursor_debug'('PASS', 'alpha')
+    goto done
   fail:
+    if null debug goto done
+    cur.'!cursor_debug'('FAIL', 'alpha')
+  done:
     .return (cur)
 .end
 
@@ -1157,12 +1180,11 @@
     message = concat "Unable to parse ", dba
     message .= ", couldn't find final "
     message .= goal
-    $P0 = getattribute self, '$!target'
-    $I0 = can $P0, 'lineof'
-    unless $I0 goto have_line
     message .= ' at line '
+    $P0 = getattribute self, '$!target'
+    $P1 = get_hll_global ['HLL'], 'Compiler'
     $I0 = self.'pos'()
-    $I0 = $P0.'lineof'($I0)
+    $I0 = $P1.'lineof'($P0, $I0)
     inc $I0
     $S0 = $I0
     message .= $S0
@@ -3226,7 +3248,9 @@
 
     ops.'push_pirop'('inline', negate, subtype, 'inline'=>'  # rx enumcharlist negate=%0 %1')
 
+    if zerowidth goto skip_zero_1 
     ops.'push_pirop'('ge', pos, eos, fail)
+  skip_zero_1:
     ops.'push_pirop'('sub', '$I10', pos, off)
     ops.'push_pirop'('substr', '$S10', tgt, '$I10', 1)
     ops.'push_pirop'('index', '$I11', charlist, '$S10')

Modified: branches/html_cleanup/ext/nqp-rx/src/stage0/nqp-setting.nqp
==============================================================================
--- branches/html_cleanup/ext/nqp-rx/src/stage0/nqp-setting.nqp	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/ext/nqp-rx/src/stage0/nqp-setting.nqp	Wed Sep 22 03:35:47 2010	(r49232)
@@ -213,6 +213,36 @@
     ~$result;
 }
 
+=begin item split
+Splits C<$text> on occurences of C<$regex>
+=end item
+
+# our sub split ($regex, $text) {
+#     my $pos := 0;
+#     my @result;
+#     my $looking := 1;
+#     while $looking {
+#         my $match :=
+#             Regex::Cursor.parse($text, :rule($regex), :c($pos)) ;
+# 
+#         if ?$match {
+#             my $from := $match.from();
+#             my $to := $match.to();
+#             my $prefix := pir::substr__sPii($text, $pos, $from-$pos);
+#             @result.push($prefix);
+#             $pos := $match.to();
+#         } else {
+#             my $len := pir::length($text);
+#             if $pos < $len {
+#                 @result.push(pir::substr__ssi($text, $pos) );
+#             }
+#             $looking := 0;
+#         }
+#     }
+#     return @result;
+# }
+
+
 # vim: ft=perl6
 # From src/setting/IO.pm
 

Modified: branches/html_cleanup/include/parrot/call.h
==============================================================================
--- branches/html_cleanup/include/parrot/call.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/call.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -303,10 +303,11 @@
 } while (0)
 
 #define ADD_OP_VAR_PART(interp, seg, pc, n) do { \
-    if (OPCODE_IS((interp), (seg), *(pc), PARROT_OP_set_args_pc)       \
-    ||  OPCODE_IS((interp), (seg), *(pc), PARROT_OP_get_results_pc)    \
-    ||  OPCODE_IS((interp), (seg), *(pc), PARROT_OP_get_params_pc)     \
-    ||  OPCODE_IS((interp), (seg), *(pc), PARROT_OP_set_returns_pc)) { \
+    op_lib_t *_core_ops = PARROT_GET_CORE_OPLIB(interp); \
+    if (OPCODE_IS((interp), (seg), *(pc), _core_ops, PARROT_OP_set_args_pc)       \
+    ||  OPCODE_IS((interp), (seg), *(pc), _core_ops, PARROT_OP_get_results_pc)    \
+    ||  OPCODE_IS((interp), (seg), *(pc), _core_ops, PARROT_OP_get_params_pc)     \
+    ||  OPCODE_IS((interp), (seg), *(pc), _core_ops, PARROT_OP_set_returns_pc)) { \
         PMC * const sig = (seg)->const_table->constants[(pc)[1]].u.key; \
         (n) += VTABLE_elements((interp), sig); \
     } \

Deleted: branches/html_cleanup/include/parrot/charset.h
==============================================================================
--- branches/html_cleanup/include/parrot/charset.h	Wed Sep 22 03:35:47 2010	(r49231)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,277 +0,0 @@
-/* charset.h
- *  Copyright (C) 2004-2010, Parrot Foundation.
- *  SVN Info
- *     $Id$
- *  Overview:
- *     This is the header for the 8-bit fixed-width encoding
- */
-
-#ifndef PARROT_CHARSET_H_GUARD
-#define PARROT_CHARSET_H_GUARD
-
-
-#include "parrot/encoding.h"
-#include "parrot/cclass.h"
-
-struct _charset;
-typedef struct _charset CHARSET;
-
-
-#if !defined PARROT_NO_EXTERN_CHARSET_PTRS
-PARROT_DATA CHARSET *Parrot_iso_8859_1_charset_ptr;
-PARROT_DATA CHARSET *Parrot_binary_charset_ptr;
-PARROT_DATA CHARSET *Parrot_default_charset_ptr;
-PARROT_DATA CHARSET *Parrot_unicode_charset_ptr;
-PARROT_DATA CHARSET *Parrot_ascii_charset_ptr;
-#endif
-
-#define PARROT_DEFAULT_CHARSET Parrot_ascii_charset_ptr
-#define PARROT_BINARY_CHARSET Parrot_binary_charset_ptr
-#define PARROT_UNICODE_CHARSET Parrot_unicode_charset_ptr
-
-typedef STRING * (*charset_get_graphemes_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count);
-typedef STRING * (*charset_to_charset_t)(PARROT_INTERP, ARGIN(const STRING *src));
-typedef STRING * (*charset_from_unicode_t)(PARROT_INTERP, ARGIN(const STRING *src));
-typedef STRING * (*charset_compose_t)(PARROT_INTERP, ARGIN(const STRING *src));
-typedef STRING * (*charset_decompose_t)(PARROT_INTERP, ARGIN(const STRING *src));
-typedef STRING * (*charset_upcase_t)(PARROT_INTERP, ARGIN(const STRING *src));
-typedef STRING * (*charset_downcase_t)(PARROT_INTERP, ARGIN(const STRING *src));
-typedef STRING * (*charset_titlecase_t)(PARROT_INTERP, ARGIN(const STRING *src));
-typedef STRING * (*charset_upcase_first_t)(PARROT_INTERP, ARGIN(const STRING *src));
-typedef STRING * (*charset_downcase_first_t)(PARROT_INTERP, ARGIN(const STRING *src));
-typedef STRING * (*charset_titlecase_first_t)(PARROT_INTERP, ARGIN(const STRING *src));
-typedef INTVAL   (*charset_compare_t)(PARROT_INTERP, ARGIN(const STRING *lhs), ARGIN(const STRING *rhs));
-typedef INTVAL   (*charset_index_t)(PARROT_INTERP, ARGIN(const STRING *src), ARGIN(const STRING *search_string), UINTVAL offset);
-typedef INTVAL   (*charset_rindex_t)(PARROT_INTERP, ARGIN(const STRING *src), ARGIN(const STRING *search_string), UINTVAL offset);
-typedef UINTVAL  (*charset_validate_t)(PARROT_INTERP, ARGIN(const STRING *src));
-typedef INTVAL   (*charset_is_cclass_t)(PARROT_INTERP, INTVAL, ARGIN(const STRING *src), UINTVAL offset);
-typedef INTVAL   (*charset_find_cclass_t)(PARROT_INTERP, INTVAL, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count);
-typedef INTVAL   (*charset_find_not_cclass_t)(PARROT_INTERP, INTVAL, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count);
-typedef INTVAL   (*charset_is_wordchar_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset);
-typedef INTVAL   (*charset_find_wordchar_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset);
-typedef INTVAL   (*charset_find_not_wordchar_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset);
-typedef INTVAL   (*charset_is_whitespace_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset);
-typedef INTVAL   (*charset_find_whitespace_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset);
-typedef INTVAL   (*charset_find_not_whitespace_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset);
-typedef INTVAL   (*charset_is_digit_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset);
-typedef INTVAL   (*charset_find_digit_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset);
-typedef INTVAL   (*charset_find_not_digit_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset);
-typedef INTVAL   (*charset_is_punctuation_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset);
-typedef INTVAL   (*charset_find_punctuation_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset);
-typedef INTVAL   (*charset_find_not_punctuation_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset);
-typedef INTVAL   (*charset_is_newline_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset);
-typedef INTVAL   (*charset_find_newline_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset);
-typedef INTVAL   (*charset_find_not_newline_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset);
-typedef INTVAL   (*charset_find_word_boundary_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset);
-typedef STRING * (*charset_string_from_codepoint_t)(PARROT_INTERP, UINTVAL codepoint);
-typedef size_t   (*charset_compute_hash_t)(PARROT_INTERP, ARGIN(const STRING *src), size_t seed);
-
-typedef STRING * (*charset_converter_t)(PARROT_INTERP, ARGIN(const STRING *src));
-
-/* HEADERIZER BEGIN: src/string/charset.c */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-PARROT_EXPORT
-PARROT_PURE_FUNCTION
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-const char * Parrot_charset_c_name(SHIM_INTERP, INTVAL number_of_charset);
-
-PARROT_EXPORT
-PARROT_PURE_FUNCTION
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-STRING * Parrot_charset_name(SHIM_INTERP, INTVAL number_of_charset);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-INTVAL Parrot_charset_number(PARROT_INTERP,
-    ARGIN(const STRING *charsetname))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
-PARROT_PURE_FUNCTION
-PARROT_WARN_UNUSED_RESULT
-INTVAL Parrot_charset_number_of_str(SHIM_INTERP, ARGIN(const STRING *src))
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
-void Parrot_charsets_encodings_deinit(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_charsets_encodings_init(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-PARROT_PURE_FUNCTION
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-const CHARSET * Parrot_default_charset(SHIM_INTERP);
-
-PARROT_EXPORT
-PARROT_PURE_FUNCTION
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-const CHARSET * Parrot_find_charset(SHIM_INTERP,
-    ARGIN(const char *charsetname))
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
-PARROT_PURE_FUNCTION
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-charset_converter_t Parrot_find_charset_converter(SHIM_INTERP,
-    ARGIN(const CHARSET *lhs),
-    ARGIN(const CHARSET *rhs))
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-PARROT_EXPORT
-PARROT_PURE_FUNCTION
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-const CHARSET * Parrot_get_charset(SHIM_INTERP, INTVAL number_of_charset);
-
-PARROT_EXPORT
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-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(const CHARSET *charset))
-        __attribute__nonnull__(3);
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-PARROT_MALLOC
-CHARSET * Parrot_new_charset(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-INTVAL Parrot_register_charset(PARROT_INTERP,
-    ARGIN(const char *charsetname),
-    ARGIN(CHARSET *charset))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-PARROT_EXPORT
-void Parrot_register_charset_converter(PARROT_INTERP,
-    ARGIN(const CHARSET *lhs),
-    ARGIN(const CHARSET *rhs),
-    ARGIN(charset_converter_t func))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        __attribute__nonnull__(4);
-
-#define ASSERT_ARGS_Parrot_charset_c_name __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_Parrot_charset_name __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_Parrot_charset_number __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(charsetname))
-#define ASSERT_ARGS_Parrot_charset_number_of_str __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_Parrot_charsets_encodings_deinit \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_charsets_encodings_init \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_default_charset __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_Parrot_find_charset __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(charsetname))
-#define ASSERT_ARGS_Parrot_find_charset_converter __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(lhs) \
-    , PARROT_ASSERT_ARG(rhs))
-#define ASSERT_ARGS_Parrot_get_charset __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_Parrot_load_charset __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(charsetname))
-#define ASSERT_ARGS_Parrot_make_default_charset __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(charset))
-#define ASSERT_ARGS_Parrot_new_charset __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_register_charset __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(charsetname) \
-    , PARROT_ASSERT_ARG(charset))
-#define ASSERT_ARGS_Parrot_register_charset_converter \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(lhs) \
-    , PARROT_ASSERT_ARG(rhs) \
-    , PARROT_ASSERT_ARG(func))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: src/string/charset.c */
-
-struct _charset {
-    const char *name;
-    charset_get_graphemes_t get_graphemes;
-    charset_to_charset_t to_charset;
-    charset_compose_t compose;
-    charset_decompose_t decompose;
-    charset_upcase_t upcase;
-    charset_downcase_t downcase;
-    charset_titlecase_t titlecase;
-    charset_upcase_first_t upcase_first;
-    charset_downcase_first_t downcase_first;
-    charset_titlecase_first_t titlecase_first;
-    charset_compare_t compare;
-    charset_index_t index;
-    charset_rindex_t rindex;
-    charset_validate_t validate;
-    charset_is_cclass_t is_cclass;
-    charset_find_cclass_t find_cclass;
-    charset_find_not_cclass_t find_not_cclass;
-    charset_string_from_codepoint_t string_from_codepoint;
-    charset_compute_hash_t compute_hash;
-    const ENCODING *preferred_encoding;
-};
-
-#define CHARSET_GET_GRAPEMES(interp, source, offset, count) ((source)->charset)->get_graphemes((interp), (source), (offset), (count))
-#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))
-#define CHARSET_UPCASE(interp, source) ((source)->charset)->upcase((interp), (source))
-#define CHARSET_DOWNCASE(interp, source) ((source)->charset)->downcase((interp), (source))
-#define CHARSET_TITLECASE(interp, source) ((source)->charset)->titlecase((interp), (source))
-#define CHARSET_UPCASE_FIRST(interp, source) ((source)->charset)->upcase_first((interp), (source))
-#define CHARSET_DOWNCASE_FIRST(interp, source) ((source)->charset)->downcase_first((interp), (source))
-#define CHARSET_TITLECASE_FIRST(interp, source) ((source)->charset)->titlecase_first((interp), (source))
-#define CHARSET_COMPARE(interp, lhs, rhs) ((const CHARSET *)(lhs)->charset)->compare((interp), (lhs), (rhs))
-#define CHARSET_INDEX(interp, source, search, offset) ((source)->charset)->index((interp), (source), (search), (offset))
-#define CHARSET_RINDEX(interp, source, search, offset) ((source)->charset)->rindex((interp), (source), (search), (offset))
-#define CHARSET_VALIDATE(interp, source) ((source)->charset)->validate((interp), (source))
-#define CHARSET_IS_CCLASS(interp, flags, source, offset) ((source)->charset)->is_cclass((interp), (flags), (source), (offset))
-#define CHARSET_FIND_CCLASS(interp, flags, source, offset, count) ((source)->charset)->find_cclass((interp), (flags), (source), (offset), (count))
-#define CHARSET_FIND_NOT_CCLASS(interp, flags, source, offset, count) ((source)->charset)->find_not_cclass((interp), (flags), (source), (offset), (count))
-#define CHARSET_COMPUTE_HASH(interp, source, seed) ((source)->charset)->compute_hash((interp), (source), (seed))
-#define CHARSET_GET_PREFERRED_ENCODING(interp, source) ((source)->charset)->preferred_encoding
-
-#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_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_BYTES(interp, source, offset, count) ((source)->encoding)->get_bytes((interp), (source), (offset), (count))
-#define CHARSET_CODEPOINTS(interp, source) ((source)->encoding)->codepoints((interp), (source))
-#define CHARSET_BYTES(interp, source) ((source)->encoding)->bytes((interp), (source))
-
-
-#endif /* PARROT_CHARSET_H_GUARD */
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/html_cleanup/include/parrot/context.h
==============================================================================
--- branches/html_cleanup/include/parrot/context.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/context.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -134,14 +134,6 @@
 
 PARROT_EXPORT
 PARROT_PURE_FUNCTION
-PARROT_CAN_RETURN_NULL
-INTVAL Parrot_pcc_get_int_constant_func(SHIM_INTERP,
-    ARGIN(PMC *ctx),
-    INTVAL idx)
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
-PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
 PMC* Parrot_pcc_get_lex_pad_func(SHIM_INTERP, ARGIN(PMC *ctx))
         __attribute__nonnull__(2);
@@ -339,9 +331,6 @@
        PARROT_ASSERT_ARG(ctx))
 #define ASSERT_ARGS_Parrot_pcc_get_HLL_func __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(ctx))
-#define ASSERT_ARGS_Parrot_pcc_get_int_constant_func \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(ctx))
 #define ASSERT_ARGS_Parrot_pcc_get_lex_pad_func __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(ctx))
 #define ASSERT_ARGS_Parrot_pcc_get_namespace_func __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -452,7 +441,6 @@
 #  define Parrot_pcc_get_signature(i, c) (CONTEXT_STRUCT(c)->current_sig)
 #  define Parrot_pcc_set_signature(i, c, value) (CONTEXT_STRUCT(c)->current_sig = (value))
 
-#  define Parrot_pcc_get_int_constant(i, c, idx) (CONTEXT_STRUCT(c)->constants[(idx)].u.integer)
 #  define Parrot_pcc_get_num_constant(i, c, idx) (CONTEXT_STRUCT(c)->constants[(idx)].u.number)
 #  define Parrot_pcc_get_string_constant(i, c, idx) (CONTEXT_STRUCT(c)->constants[(idx)].u.string)
 #  define Parrot_pcc_get_pmc_constant(i, c, idx) (CONTEXT_STRUCT(c)->constants[(idx)].u.key)
@@ -510,7 +498,6 @@
 #  define Parrot_pcc_get_signature(i, c) Parrot_pcc_get_signature_func((i), (c))
 #  define Parrot_pcc_set_signature(i, c, value) Parrot_pcc_set_signature_func((i), (c), (value))
 
-#  define Parrot_pcc_get_int_constant(i, c, idx) Parrot_pcc_get_int_constant_func((i), (c), (idx))
 #  define Parrot_pcc_get_num_constant(i, c, idx) Parrot_pcc_get_num_constant_func((i), (c), (idx))
 #  define Parrot_pcc_get_string_constant(i, c, idx) Parrot_pcc_get_string_constant_func((i), (c), (idx))
 #  define Parrot_pcc_get_pmc_constant(i, c, idx) Parrot_pcc_get_pmc_constant_func((i), (c), (idx))

Modified: branches/html_cleanup/include/parrot/debugger.h
==============================================================================
--- branches/html_cleanup/include/parrot/debugger.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/debugger.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -129,8 +129,9 @@
 /*  PDB_breakpoint_t
  *      List of breakpoints.
  *
- *  pc:             Where the breakpoint is
  *  id:             The identification number of this breakpoint
+ *  pc:             Where the breakpoint is
+ *  line:           The source file line number
  *  skip:           The number of times to skip this breakpoint
  *  condition:      The condition attached to the breakpoint; may be NULL
  *  prev, next:     The previous & next breakpoints in the list; may be NULL.
@@ -139,8 +140,9 @@
 typedef struct PDB_breakpoint *PDB_breakpoint_ptr;
 
 typedef struct PDB_breakpoint {
-    opcode_t                *pc;
     unsigned long           id;
+    opcode_t                *pc;
+    unsigned long           line;
     long                    skip;
     PDB_condition_t         *condition;
     PDB_breakpoint_ptr      prev;

Modified: branches/html_cleanup/include/parrot/encoding.h
==============================================================================
--- branches/html_cleanup/include/parrot/encoding.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/encoding.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -15,68 +15,15 @@
 
 #include "parrot/parrot.h"
 
-typedef STRING * (*encoding_to_encoding_t)(PARROT_INTERP, ARGIN(const STRING *src));
-typedef UINTVAL  (*encoding_get_codepoint_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset);
-typedef UINTVAL  (*encoding_get_byte_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset);
-typedef void     (*encoding_set_byte_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count);
-typedef STRING * (*encoding_get_codepoints_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count);
-typedef STRING * (*encoding_get_bytes_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count);
-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, ARGIN(const STRING *s), ARGIN(const INTVAL *typetable), INTVAL flags, UINTVAL offset, UINTVAL count);
-typedef size_t   (*encoding_hash_t)(PARROT_INTERP, ARGIN(const STRING *s), size_t hashval);
-
-/* iterator support */
-
-struct string_iterator_t;       /* s. parrot/string.h */
-
-typedef UINTVAL (*encoding_iter_get_t)(
-    PARROT_INTERP, const STRING *str, const String_iter *i, INTVAL  offset);
-typedef void    (*encoding_iter_skip_t)(
-    PARROT_INTERP, const STRING *str,       String_iter *i, INTVAL  skip);
-typedef UINTVAL (*encoding_iter_get_and_advance_t)(
-    PARROT_INTERP, const STRING *str,       String_iter *i);
-typedef void    (*encoding_iter_set_and_advance_t)(
-    PARROT_INTERP,       STRING *str,       String_iter *i, UINTVAL c);
-typedef void    (*encoding_iter_set_position_t)(
-    PARROT_INTERP, const STRING *str,       String_iter *i, UINTVAL pos);
-
-struct _encoding {
-    ARGIN(const char *name);
-    UINTVAL max_bytes_per_codepoint;
-    encoding_to_encoding_t              to_encoding;
-    encoding_get_codepoint_t            get_codepoint;
-    encoding_get_byte_t                 get_byte;
-    encoding_set_byte_t                 set_byte;
-    encoding_get_codepoints_t           get_codepoints;
-    encoding_get_bytes_t                get_bytes;
-    encoding_codepoints_t               codepoints;
-    encoding_bytes_t                    bytes;
-    encoding_find_cclass_t              find_cclass;
-    encoding_hash_t                     hash;
-    encoding_iter_get_t                 iter_get;
-    encoding_iter_skip_t                iter_skip;
-    encoding_iter_get_and_advance_t     iter_get_and_advance;
-    encoding_iter_set_and_advance_t     iter_set_and_advance;
-    encoding_iter_set_position_t        iter_set_position;
-};
-
-typedef struct _encoding ENCODING;
-
-#if !defined PARROT_NO_EXTERN_ENCODING_PTRS
-PARROT_DATA ENCODING *Parrot_fixed_8_encoding_ptr;
-PARROT_DATA ENCODING *Parrot_utf8_encoding_ptr;
-PARROT_DATA ENCODING *Parrot_utf16_encoding_ptr;
-PARROT_DATA ENCODING *Parrot_ucs2_encoding_ptr;
-PARROT_DATA ENCODING *Parrot_ucs4_encoding_ptr;
-PARROT_DATA ENCODING *Parrot_default_encoding_ptr;
-#endif
-
-#define PARROT_DEFAULT_ENCODING Parrot_fixed_8_encoding_ptr
-#define PARROT_FIXED_8_ENCODING Parrot_fixed_8_encoding_ptr
-#define PARROT_DEFAULT_FOR_UNICODE_ENCODING NULL
+PARROT_DATA STR_VTABLE *Parrot_ascii_encoding_ptr;
+PARROT_DATA STR_VTABLE *Parrot_latin1_encoding_ptr;
+PARROT_DATA STR_VTABLE *Parrot_binary_encoding_ptr;
+PARROT_DATA STR_VTABLE *Parrot_utf8_encoding_ptr;
+PARROT_DATA STR_VTABLE *Parrot_utf16_encoding_ptr;
+PARROT_DATA STR_VTABLE *Parrot_ucs2_encoding_ptr;
+PARROT_DATA STR_VTABLE *Parrot_ucs4_encoding_ptr;
 
-typedef INTVAL (*encoding_converter_t)(PARROT_INTERP, ENCODING *lhs, ENCODING *rhs);
+PARROT_DATA STR_VTABLE *Parrot_default_encoding_ptr;
 
 /* HEADERIZER BEGIN: src/string/encoding.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
@@ -85,7 +32,7 @@
 PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-const ENCODING * Parrot_default_encoding(SHIM_INTERP);
+const STR_VTABLE * Parrot_default_encoding(SHIM_INTERP);
 
 PARROT_EXPORT
 PARROT_PURE_FUNCTION
@@ -114,32 +61,28 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+void Parrot_encodings_init(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
+PARROT_EXPORT
 PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
-const ENCODING * Parrot_find_encoding(SHIM_INTERP,
+const STR_VTABLE * Parrot_find_encoding(SHIM_INTERP,
     ARGIN(const char *encodingname))
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-PARROT_DOES_NOT_RETURN
-encoding_converter_t Parrot_find_encoding_converter(PARROT_INTERP,
-    ARGIN(ENCODING *lhs),
-    ARGIN(ENCODING *rhs))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __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);
+const STR_VTABLE* Parrot_get_encoding(SHIM_INTERP,
+    INTVAL number_of_encoding);
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
 PARROT_CANNOT_RETURN_NULL
-const ENCODING * Parrot_load_encoding(PARROT_INTERP,
+const STR_VTABLE * Parrot_load_encoding(PARROT_INTERP,
     ARGIN(const char *encodingname))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -147,24 +90,21 @@
 PARROT_EXPORT
 INTVAL Parrot_make_default_encoding(SHIM_INTERP,
     SHIM(const char *encodingname),
-    ARGIN(ENCODING *encoding))
+    ARGIN(STR_VTABLE *encoding))
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
-ENCODING * Parrot_new_encoding(PARROT_INTERP)
+STR_VTABLE * Parrot_new_encoding(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
-INTVAL Parrot_register_encoding(PARROT_INTERP,
-    ARGIN(const char *encodingname),
-    ARGIN(ENCODING *encoding))
+INTVAL Parrot_register_encoding(PARROT_INTERP, ARGIN(STR_VTABLE *encoding))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
+        __attribute__nonnull__(2);
 
-void parrot_deinit_encodings(PARROT_INTERP)
+void Parrot_deinit_encodings(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 void Parrot_str_internal_register_encoding_names(PARROT_INTERP)
@@ -178,13 +118,10 @@
     , PARROT_ASSERT_ARG(encodingname))
 #define ASSERT_ARGS_Parrot_encoding_number_of_str __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_Parrot_encodings_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_find_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(encodingname))
-#define ASSERT_ARGS_Parrot_find_encoding_converter \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(lhs) \
-    , PARROT_ASSERT_ARG(rhs))
 #define ASSERT_ARGS_Parrot_get_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_Parrot_load_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -195,9 +132,8 @@
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_register_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(encodingname) \
     , PARROT_ASSERT_ARG(encoding))
-#define ASSERT_ARGS_parrot_deinit_encodings __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_Parrot_deinit_encodings __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_internal_register_encoding_names \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -205,27 +141,6 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/string/encoding.c */
 
-#define ENCODING_MAX_BYTES_PER_CODEPOINT(i, src) \
-    ((src)->encoding)->max_bytes_per_codepoint
-#define ENCODING_GET_CODEPOINT(i, src, offset) \
-    ((src)->encoding)->get_codepoint((i), (src), (offset))
-#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_BYTES(i, src, offset, count) \
-    ((src)->encoding)->get_bytes((i), (src), (offset), (count))
-#define ENCODING_CODEPOINTS(i, src) \
-    ((src)->encoding)->codepoints((i), (src))
-#define ENCODING_BYTES(i, src) \
-    ((src)->encoding)->bytes((i), (src))
-#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/html_cleanup/include/parrot/gc_api.h
==============================================================================
--- branches/html_cleanup/include/parrot/gc_api.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/gc_api.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -33,6 +33,8 @@
 
 #define ALIGNED_STRING_SIZE(len) (((len) + sizeof (void*) + WORD_ALIGN_1) & WORD_ALIGN_MASK)
 
+#define GC_DYNAMIC_THRESHOLD_DEFAULT 25
+
 /* pool iteration */
 typedef enum {
     POOL_PMC    = 0x01,

Modified: branches/html_cleanup/include/parrot/hash.h
==============================================================================
--- branches/html_cleanup/include/parrot/hash.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/hash.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -26,16 +26,15 @@
 #define HASH_ALLOC_SIZE(n) (N_BUCKETS(n) * sizeof (HashBucket) + \
                                      (n) * sizeof (HashBucket *))
 
-typedef int (*hash_comp_fn)(PARROT_INTERP, ARGIN(const void *), ARGIN(const void *));
-typedef size_t (*hash_hash_key_fn)(PARROT_INTERP, ARGIN(const void *), size_t seed);
-
 /* &gen_from_enum(hash_key_type.pasm) */
 typedef enum {
     Hash_key_type_int,
     Hash_key_type_cstring,
     Hash_key_type_STRING,
     Hash_key_type_PMC,
-    Hash_key_type_ptr
+    Hash_key_type_ptr,
+    Hash_key_type_PMC_ptr,
+    Hash_key_type_STRING_enc,
 } Hash_key_type;
 /* &end_gen */
 
@@ -70,15 +69,9 @@
     /* Random seed value for seeding hash algorithms */
     size_t seed;
 
-    /* Comparison function pointer. Returns 0 if elements are equal */
-    hash_comp_fn   compare;
-
-    /* Function pointer to generate a hash value for the object */
-    hash_hash_key_fn hash_val;
 };
 
 /* Utility macros - use them, do not reinvent the wheel */
-#define parrot_hash_iterate parrot_hash_iterate_linear
 
 #define parrot_hash_iterate_linear(_hash, _code)                            \
 {                                                                           \
@@ -86,10 +79,8 @@
     UINTVAL     _found  = 0;                                                \
     while (_found < (_hash)->entries){                                      \
         if (_bucket->key){                                                  \
+            _code                                                           \
             _found++;                                                       \
-            {                                                               \
-                _code                                                       \
-            }                                                               \
         }                                                                   \
        _bucket++;                                                           \
     }                                                                       \
@@ -97,31 +88,28 @@
 
 #define parrot_hash_iterate_indexed(_hash, _code)                           \
 {                                                                           \
-    INTVAL _loc;                                                            \
-    for (_loc = (_hash)->mask; _loc >= 0; --_loc) {                         \
-        HashBucket *_bucket = (_hash)->index[_loc];                         \
-        while (_bucket) {                                                   \
-            _code                                                           \
-            _bucket = _bucket->next;                                        \
+    UINTVAL _loc;                                                           \
+    if ((_hash)->entries){                                                  \
+        for (_loc = 0; _loc <= (_hash)->mask; ++_loc) {                     \
+            HashBucket *_bucket = (_hash)->index[_loc];                     \
+            while (_bucket) {                                               \
+                _code                                                       \
+                _bucket = _bucket->next;                                    \
+            }                                                               \
         }                                                                   \
     }                                                                       \
 }
 
-
-#define parrot_hash_iterator_advance(_hash, _bucket, _loc)                  \
+#define parrot_hash_iterate(_hash, _code)                                   \
 {                                                                           \
-    /* Try to advance current bucket */                                     \
-    if ((_bucket))                                                          \
-        (_bucket) = (_bucket)->next;                                        \
-    while (!(_bucket)) {                                                    \
-        /* If there is no more buckets */                                   \
-        if ((_loc) == (INTVAL)(_hash)->mask+1)                              \
-            break;                                                          \
-        (_bucket) = (_hash)->index[(_loc)++];                               \
-    }                                                                       \
+    if ((_hash)->key_type == Hash_key_type_int                              \
+    ||  (_hash)->key_type == Hash_key_type_cstring                          \
+    ||  (_hash)->key_type == Hash_key_type_ptr)                             \
+        parrot_hash_iterate_indexed((_hash), _code)                         \
+    else                                                                    \
+        parrot_hash_iterate_linear((_hash), _code)                          \
 }
 
-
 typedef void (*value_free)(ARGFREE(void *));
 
 /* To avoid creating OrderedHashItem PMC we reuse FixedPMCArray PMC */
@@ -233,40 +221,6 @@
 Hash * parrot_new_pointer_hash(PARROT_INTERP)
         __attribute__nonnull__(1);
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-int hash_compare_int(SHIM_INTERP,
-    ARGIN_NULLOK(const void *a),
-    ARGIN_NULLOK(const void *b));
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
-int hash_compare_pmc(PARROT_INTERP, ARGIN(PMC *a), ARGIN(PMC *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-int hash_compare_pointer(SHIM_INTERP,
-    ARGIN_NULLOK(const void *a),
-    ARGIN_NULLOK(const void *b));
-
-PARROT_WARN_UNUSED_RESULT
-int hash_compare_string(PARROT_INTERP,
-    ARGIN(const void *search_key),
-    ARGIN_NULLOK(const void *bucket_key))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_WARN_UNUSED_RESULT
-int hash_compare_string_distinct_enc(PARROT_INTERP,
-    ARGIN(const void *search_key),
-    ARGIN(const void *bucket_key))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
 PARROT_CAN_RETURN_NULL
 void* hash_key_from_int(PARROT_INTERP, ARGIN(const Hash *hash), INTVAL key)
         __attribute__nonnull__(1)
@@ -363,26 +317,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-size_t key_hash_int(SHIM_INTERP,
-    ARGIN_NULLOK(const void *value),
-    size_t seed);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
-size_t key_hash_PMC(PARROT_INTERP, ARGIN(PMC *value), NULLOK(size_t seed))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_WARN_UNUSED_RESULT
-size_t key_hash_STRING(PARROT_INTERP,
-    ARGMOD(STRING *s),
-    NULLOK(size_t seed))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*s);
-
 void parrot_chash_destroy(PARROT_INTERP, ARGMOD(Hash *hash))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -398,28 +332,18 @@
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-PARROT_MALLOC
 Hash * parrot_create_hash(PARROT_INTERP,
     PARROT_DATA_TYPE val_type,
-    Hash_key_type hkey_type,
-    NOTNULL(hash_comp_fn compare),
-    NOTNULL(hash_hash_key_fn keyhash))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(4)
-        __attribute__nonnull__(5);
+    Hash_key_type hkey_type)
+        __attribute__nonnull__(1);
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-PARROT_MALLOC
 Hash * parrot_create_hash_sized(PARROT_INTERP,
     PARROT_DATA_TYPE val_type,
     Hash_key_type hkey_type,
-    NOTNULL(hash_comp_fn compare),
-    NOTNULL(hash_hash_key_fn keyhash),
     UINTVAL size)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(4)
-        __attribute__nonnull__(5);
+        __attribute__nonnull__(1);
 
 void parrot_hash_clone_prunable(PARROT_INTERP,
     ARGIN(const Hash *hash),
@@ -440,7 +364,6 @@
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-PARROT_MALLOC
 Hash * Parrot_hash_thaw(PARROT_INTERP, ARGMOD(PMC *info))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -485,20 +408,6 @@
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_parrot_new_pointer_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_hash_compare_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_hash_compare_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(a) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_hash_compare_pointer __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_hash_compare_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(search_key))
-#define ASSERT_ARGS_hash_compare_string_distinct_enc \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(search_key) \
-    , PARROT_ASSERT_ARG(bucket_key))
 #define ASSERT_ARGS_hash_key_from_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(hash))
@@ -544,13 +453,6 @@
 #define ASSERT_ARGS_hash_value_to_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(hash))
-#define ASSERT_ARGS_key_hash_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_key_hash_PMC __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(value))
-#define ASSERT_ARGS_key_hash_STRING __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_parrot_chash_destroy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(hash))
@@ -559,13 +461,9 @@
     , PARROT_ASSERT_ARG(hash) \
     , PARROT_ASSERT_ARG(func))
 #define ASSERT_ARGS_parrot_create_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(compare) \
-    , PARROT_ASSERT_ARG(keyhash))
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_parrot_create_hash_sized __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(compare) \
-    , PARROT_ASSERT_ARG(keyhash))
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_parrot_hash_clone_prunable __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(hash) \

Copied: branches/html_cleanup/include/parrot/imageio.h (from r49200, trunk/include/parrot/imageio.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/html_cleanup/include/parrot/imageio.h	Wed Sep 22 03:35:47 2010	(r49232, copy of r49200, trunk/include/parrot/imageio.h)
@@ -0,0 +1,33 @@
+/* Copyright (C) 2001-2009, Parrot Foundation.
+ * $Id$
+ */
+#ifndef PARROT_IMAGEIO_H_GUARD
+#define PARROT_IMAGEIO_H_GUARD
+
+#define GROW_TO_16_BYTE_BOUNDARY(size) ((size) + ((size) % 16 ? 16 - (size) % 16 : 0))
+
+/* macros/constants to handle packing/unpacking of PMC IDs and flags
+ * the 2 LSBs are used for flags, all other bits are used for PMC ID
+ */
+#define PackID_new(id, flags)       (((UINTVAL)(id) * 4) | ((UINTVAL)(flags) & 3))
+#define PackID_get_PMCID(id)        ((UINTVAL)(id) / 4)
+#define PackID_set_PMCID(lv, id)    (lv) = PackID_new((id), PackID_get_FLAGS(lv))
+#define PackID_get_FLAGS(id)        ((UINTVAL)(id) & 3)
+#define PackID_set_FLAGS(lv, flags) (lv) = PackID_new(PackID_get_PMCID(lv), (flags))
+
+/* preallocate freeze image for aggregates with this estimation */
+#define FREEZE_BYTES_PER_ITEM 9
+
+enum {
+    enum_PackID_normal     = 0,
+    enum_PackID_seen       = 1,
+};
+
+#endif /* PARROT_IMAGEIO_H_GUARD */
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/html_cleanup/include/parrot/interpreter.h
==============================================================================
--- branches/html_cleanup/include/parrot/interpreter.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/interpreter.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -172,6 +172,8 @@
 
     struct GC_Subsystem *gc_sys;              /*functions and data specific
                                                   to current GC subsystem*/
+    UINTVAL gc_threshold;                     /* maximum percentage of memory
+                                                 wasted by GC */
 
     PMC *gc_registry;                         /* root set of registered PMCs */
 
@@ -182,19 +184,8 @@
 
     struct _ParrotIOData   *piodata;          /* interpreter's IO system */
 
-    op_lib_t  *op_lib;                        /* Opcode library */
-    size_t     op_count;                      /* The number of ops */
-    op_info_t *op_info_table;                 /* Opcode info table
-                                               * (name, nargs, arg types) */
-
-    op_func_t *op_func_table;                  /* opcode dispatch table
-                                                * (functions, labels, or nothing
-                                                * (e.g. switched core), which
-                                                * the interpreter is currently
-                                                * running */
-
     op_func_t *evc_func_table;                /* event check opcode dispatch */
-    op_func_t *save_func_table;               /* for restoring op_func_table */
+    size_t     evc_func_table_size;
 
     int         n_libs;                       /* count of libs below */
     op_lib_t  **all_op_libs;                  /* all loaded opcode libraries */
@@ -216,6 +207,8 @@
     struct PackFile          *initial_pf;     /* first created PF  */
 
     struct _imc_info_t *imc_info;             /* imcc data */
+    Hash               *op_hash;              /* mapping from op names to op_info_t */
+
 
     const char *output_file;                  /* where to write output */
 
@@ -503,24 +496,26 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
-void register_nci_method(PARROT_INTERP,
+void register_native_pcc_method_in_ns(PARROT_INTERP,
     const int type,
     ARGIN(void *func),
-    ARGIN(const char *name),
-    ARGIN(const char *proto))
+    ARGIN(STRING *name),
+    ARGIN(STRING *signature))
         __attribute__nonnull__(1)
         __attribute__nonnull__(3)
         __attribute__nonnull__(4)
         __attribute__nonnull__(5);
 
 PARROT_EXPORT
-void register_raw_nci_method_in_ns(PARROT_INTERP,
+void register_nci_method(PARROT_INTERP,
     const int type,
     ARGIN(void *func),
-    ARGIN(STRING *name))
+    ARGIN(const char *name),
+    ARGIN(const char *proto))
         __attribute__nonnull__(1)
         __attribute__nonnull__(3)
-        __attribute__nonnull__(4);
+        __attribute__nonnull__(4)
+        __attribute__nonnull__(5);
 
 #define ASSERT_ARGS_interpinfo __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
@@ -539,15 +534,17 @@
 #define ASSERT_ARGS_Parrot_mark_method_writes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(name))
-#define ASSERT_ARGS_register_nci_method __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_register_native_pcc_method_in_ns \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(func) \
     , PARROT_ASSERT_ARG(name) \
-    , PARROT_ASSERT_ARG(proto))
-#define ASSERT_ARGS_register_raw_nci_method_in_ns __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+    , PARROT_ASSERT_ARG(signature))
+#define ASSERT_ARGS_register_nci_method __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(func) \
-    , PARROT_ASSERT_ARG(name))
+    , PARROT_ASSERT_ARG(name) \
+    , PARROT_ASSERT_ARG(proto))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/interp/inter_misc.c */
 

Modified: branches/html_cleanup/include/parrot/library.h
==============================================================================
--- branches/html_cleanup/include/parrot/library.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/library.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -46,12 +46,6 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-char* Parrot_get_runtime_prefix(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
 void Parrot_lib_add_path(PARROT_INTERP,
     ARGIN(STRING *path_str),
     enum_lib_paths which)
@@ -104,8 +98,6 @@
 
 #define ASSERT_ARGS_Parrot_get_runtime_path __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_get_runtime_prefix __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_lib_add_path __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(path_str))

Modified: branches/html_cleanup/include/parrot/longopt.h
==============================================================================
--- branches/html_cleanup/include/parrot/longopt.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/longopt.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -46,6 +46,7 @@
 #define OPT_PBC_OUTPUT     131
 #define OPT_RUNTIME_PREFIX 132
 #define OPT_HASH_SEED      133
+#define OPT_GC_THRESHOLD   134
 
 /* HEADERIZER BEGIN: src/longopt.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */

Modified: branches/html_cleanup/include/parrot/misc.h
==============================================================================
--- branches/html_cleanup/include/parrot/misc.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/misc.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -259,8 +259,15 @@
      */
 #  define PARROT_SPRINTF_MAX_PREC 3 * PARROT_SPRINTF_BUFFER_SIZE / 4
 
-#  define cstr2pstr(cstr) string_make(interp, (cstr), strlen(cstr), "ascii", 0)
-#  define char2pstr(ch)   string_make(interp, &(ch), 1, "ascii", 0)
+    /* Floats formatted in exponent notation should have this number
+     * of exponent digits unless they need more.
+     */
+#  define PARROT_SPRINTF_EXP_DIGITS 2
+
+#  define cstr2pstr(cstr) Parrot_str_new_init(interp, (cstr), strlen(cstr), \
+        Parrot_ascii_encoding_ptr, 0)
+#  define char2pstr(ch)   Parrot_str_new_init(interp, &(ch), 1, \
+        Parrot_ascii_encoding_ptr, 0)
 
     /* SPRINTF DATA STRUCTURE AND FLAGS */
 

Modified: branches/html_cleanup/include/parrot/nci.h
==============================================================================
--- branches/html_cleanup/include/parrot/nci.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/nci.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -17,6 +17,7 @@
 
 typedef PMC *(*nci_fb_func_t)(PARROT_INTERP, PMC *user_data, STRING *signature);
 typedef void (*nci_thunk_t)(PARROT_INTERP, PMC *, PMC *);
+typedef void (*native_pcc_method_t)(PARROT_INTERP);
 
 void Parrot_nci_load_core_thunks(PARROT_INTERP);
 void Parrot_nci_load_extra_thunks(PARROT_INTERP);

Modified: branches/html_cleanup/include/parrot/op.h
==============================================================================
--- branches/html_cleanup/include/parrot/op.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/op.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -78,8 +78,11 @@
     struct op_lib_t *lib;
 } op_info_t;
 
-#define OPCODE_IS(interp, seg, opnum, global_opnum) \
-    ((seg)->op_func_table[(opnum)] == (interp)->op_func_table[(global_opnum)])
+#define OP_INFO_OPNUM(oi)  ((oi) - (oi)->lib->op_info_table)
+#define OP_INFO_OPFUNC(oi) ((oi)->lib->op_func_table[OP_INFO_OPNUM(oi)])
+
+#define OPCODE_IS(interp, seg, opnum, lib, oplibnum) \
+    ((seg)->op_func_table[(opnum)] == (lib)->op_func_table[(oplibnum)])
 
 #endif /* PARROT_OP_H_GUARD */
 

Modified: branches/html_cleanup/include/parrot/oplib.h
==============================================================================
--- branches/html_cleanup/include/parrot/oplib.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/oplib.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -32,7 +32,7 @@
     size_t      op_count;
     op_info_t * op_info_table;
     op_func_t * op_func_table;
-    int (*op_code)(PARROT_INTERP, const char * name, int full);
+    int (*_op_code)(PARROT_INTERP, const char * name, int full);
 } op_lib_t;
 
 typedef enum {

Modified: branches/html_cleanup/include/parrot/oplib/core_ops.h
==============================================================================
--- branches/html_cleanup/include/parrot/oplib/core_ops.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/oplib/core_ops.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -20,7 +20,8 @@
 #include "parrot/oplib.h"
 #include "parrot/runcore_api.h"
 
- op_lib_t *Parrot_DynOp_core_2_7_0(PARROT_INTERP, long init);
+PARROT_EXPORT
+op_lib_t *Parrot_DynOp_core_2_8_0(PARROT_INTERP, long init);
 
  opcode_t * Parrot_end(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_noop(opcode_t *, PARROT_INTERP);

Modified: branches/html_cleanup/include/parrot/packfile.h
==============================================================================
--- branches/html_cleanup/include/parrot/packfile.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/packfile.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -170,7 +170,6 @@
 typedef struct PackFile_Constant {
     opcode_t type;
     union {
-        opcode_t  integer;
         FLOATVAL  number;
         STRING   *string;
         PMC      *key;
@@ -263,7 +262,7 @@
     opcode_t                   const_count;
     PackFile_Constant         *constants;
     PackFile_ByteCode         *code;  /* where this segment belongs to */
-    PMC                       *string_hash; /* Hash for lookup strings and numbers */
+    Hash                      *string_hash; /* Hash for lookup strings and numbers */
 } PackFile_ConstTable;
 
 typedef struct PackFile_ByteCode_OpMappingEntry {

Modified: branches/html_cleanup/include/parrot/parrot.h
==============================================================================
--- branches/html_cleanup/include/parrot/parrot.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/parrot.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -255,7 +255,6 @@
 #include "parrot/interpreter.h"
 #include "parrot/datatypes.h"
 #include "parrot/encoding.h"
-#include "parrot/charset.h"
 #include "parrot/string.h"
 #include "parrot/string_primitives.h"
 #include "parrot/hash.h"

Modified: branches/html_cleanup/include/parrot/pobj.h
==============================================================================
--- branches/html_cleanup/include/parrot/pobj.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/pobj.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -31,6 +31,11 @@
     size_t     _buflen;                 /* Length of buffer data. */
 } Buffer;
 
+typedef enum Forward_flag {
+    Buffer_moved_FLAG   = 1 << 0,
+    Buffer_shared_FLAG  = 1 << 1
+} Forward_flags;
+
 /* Use these macros to access the two buffer header slots. */
 
 #define Buffer_bufstart(buffer)    (buffer)->_bufstart
@@ -76,13 +81,6 @@
 #define Buffer_poolptr(b) ((Memory_Block **)Buffer_bufprolog(b))
 
 
-typedef enum {
-    enum_stringrep_unknown = 0,
-    enum_stringrep_one     = 1,
-    enum_stringrep_two     = 2,
-    enum_stringrep_four    = 4
-} parrot_string_representation_t;
-
 /* Here is the Parrot string header object, "inheriting" from Buffer. */
 
 struct parrot_string_t {
@@ -96,8 +94,7 @@
     UINTVAL     hashval;                /* Cached hash value. */
 
     /*    parrot_string_representation_t representation;*/
-    const struct _encoding *encoding;   /* Pointer to encoding structure. */
-    const struct _charset  *charset;    /* Pointer to charset structure. */
+    const struct _str_vtable *encoding; /* Pointer to string vtable. */
 };
 
 /* Here is the Parrot PMC object, "inheriting" from PObj. */
@@ -138,6 +135,8 @@
     PObj_is_string_FLAG         = POBJ_FLAG(8),
     /* PObj is a PMC */
     PObj_is_PMC_FLAG            = POBJ_FLAG(9),
+    /* PObj is a copy of a string that doesn't own the string buffer */
+    PObj_is_string_copy_FLAG    = POBJ_FLAG(10),
     /* the PMC is a shared PMC */
     PObj_is_PMC_shared_FLAG     = POBJ_FLAG(11), /* Same as PObj_is_shared_FLAG */
     /* PObj is otherwise shared */
@@ -249,6 +248,10 @@
 #define PObj_is_string_SET(o) PObj_flag_SET(is_string, o)
 #define PObj_is_string_CLEAR(o) PObj_flag_CLEAR(is_string, o)
 
+#define PObj_is_string_copy_TEST(o) PObj_flag_TEST(is_string_copy, o)
+#define PObj_is_string_copy_SET(o) PObj_flag_SET(is_string_copy, o)
+#define PObj_is_string_copy_CLEAR(o) PObj_flag_CLEAR(is_string_copy, o)
+
 #define PObj_sysmem_TEST(o) PObj_flag_TEST(sysmem, o)
 #define PObj_sysmem_SET(o) PObj_flag_SET(sysmem, o)
 #define PObj_sysmem_CLEAR(o) PObj_flag_CLEAR(sysmem, o)
@@ -321,6 +324,10 @@
         (PObj_sysmem_FLAG | PObj_on_free_list_FLAG | \
          PObj_constant_FLAG | PObj_external_FLAG)))
 
+#define PObj_is_growable_TESTALL(o) (!(PObj_get_FLAGS(o) & \
+        (PObj_sysmem_FLAG | PObj_is_string_copy_FLAG | \
+         PObj_constant_FLAG | PObj_external_FLAG)))
+
 #define PObj_custom_mark_destroy_SETALL(o) do { \
         PObj_custom_mark_SET(o); \
         PObj_custom_destroy_SET(o); \

Modified: branches/html_cleanup/include/parrot/runcore_api.h
==============================================================================
--- branches/html_cleanup/include/parrot/runcore_api.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/runcore_api.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -78,9 +78,9 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_EXPORT
-void Parrot_setup_event_func_ptrs(PARROT_INTERP)
-        __attribute__nonnull__(1);
+void parrot_hash_oplib(PARROT_INTERP, ARGIN(op_lib_t *lib))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
 
 void Parrot_runcore_destroy(PARROT_INTERP)
         __attribute__nonnull__(1);
@@ -107,8 +107,9 @@
 #define ASSERT_ARGS_Parrot_runcore_switch __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(name))
-#define ASSERT_ARGS_Parrot_setup_event_func_ptrs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_parrot_hash_oplib __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(lib))
 #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 = (\

Modified: branches/html_cleanup/include/parrot/string.h
==============================================================================
--- branches/html_cleanup/include/parrot/string.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/string.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -18,38 +18,51 @@
 
 #ifdef PARROT_IN_CORE
 
+#include "parrot/compiler.h"
 #include "parrot/pobj.h"
+#include "parrot/cclass.h"
 #include "parrot/parrot.h"
 
-typedef struct parrot_string_t STRING;
-
-typedef enum Forward_flag {
-    Buffer_moved_FLAG   = 1 << 0,
-    Buffer_shared_FLAG  = 1 << 1
-} Forward_flags;
-
-/* String iterator */
-typedef struct string_iterator_t {
-    UINTVAL bytepos;
-    UINTVAL charpos;
-} String_iter;
-
-#define STRING_ITER_INIT(i, iter) \
-    (iter)->charpos = (iter)->bytepos = 0
-#define STRING_ITER_GET(i, str, iter, offset) \
-    ((str)->encoding)->iter_get((i), (str), (iter), (offset))
-#define STRING_ITER_SKIP(i, str, iter, skip) \
-    ((str)->encoding)->iter_skip((i), (str), (iter), (skip))
-#define STRING_ITER_GET_AND_ADVANCE(i, str, iter) \
-    ((str)->encoding)->iter_get_and_advance((i), (str), (iter))
-#define STRING_ITER_SET_AND_ADVANCE(i, str, iter, c) \
-    ((str)->encoding)->iter_set_and_advance((i), (str), (iter), (c))
-#define STRING_ITER_SET_POSITION(i, str, iter, pos) \
-    ((str)->encoding)->iter_set_position((i), (str), (iter), (pos))
-
 #define STREQ(x, y)  (strcmp((x), (y))==0)
 #define STRNEQ(x, y) (strcmp((x), (y))!=0)
 
+#define STRING_length(src) ((src) ? (src)->strlen : 0U)
+#define STRING_byte_length(src) ((src) ? (src)->bufused : 0U)
+#define STRING_max_bytes_per_codepoint(src) ((src)->encoding)->max_bytes_per_codepoint
+
+#define STRING_equal(interp, lhs, rhs) ((lhs)->encoding)->equal((interp), (lhs), (rhs))
+#define STRING_compare(interp, lhs, rhs) ((lhs)->encoding)->compare((interp), (lhs), (rhs))
+#define STRING_index(interp, src, search, offset) ((src)->encoding)->index((interp), (src), (search), (offset))
+#define STRING_rindex(interp, src, search, offset) ((src)->encoding)->rindex((interp), (src), (search), (offset))
+#define STRING_hash(i, src, seed) ((src)->encoding)->hash((i), (src), (seed))
+#define STRING_validate(interp, src) ((src)->encoding)->validate((interp), (src))
+
+#define STRING_scan(i, src) ((src)->encoding)->scan((i), (src))
+#define STRING_ord(i, src, offset) ((src)->encoding)->ord((i), (src), (offset))
+#define STRING_substr(i, src, offset, count) ((src)->encoding)->substr((i), (src), (offset), (count))
+
+#define STRING_is_cclass(interp, flags, src, offset) ((src)->encoding)->is_cclass((interp), (flags), (src), (offset))
+#define STRING_find_cclass(interp, flags, src, offset, count) ((src)->encoding)->find_cclass((interp), (flags), (src), (offset), (count))
+#define STRING_find_not_cclass(interp, flags, src, offset, count) ((src)->encoding)->find_not_cclass((interp), (flags), (src), (offset), (count))
+
+#define STRING_get_graphemes(interp, src, offset, count) ((src)->encoding)->get_graphemes((interp), (src), (offset), (count))
+#define STRING_compose(interp, src) ((src)->encoding)->compose((interp), (src))
+#define STRING_decompose(interp, src) ((src)->encoding)->decompose((interp), (src))
+
+#define STRING_upcase(interp, src) ((src)->encoding)->upcase((interp), (src))
+#define STRING_downcase(interp, src) ((src)->encoding)->downcase((interp), (src))
+#define STRING_titlecase(interp, src) ((src)->encoding)->titlecase((interp), (src))
+#define STRING_upcase_first(interp, src) ((src)->encoding)->upcase_first((interp), (src))
+#define STRING_downcase_first(interp, src) ((src)->encoding)->downcase_first((interp), (src))
+#define STRING_titlecase_first(interp, src) ((src)->encoding)->titlecase_first((interp), (src))
+
+#define STRING_ITER_INIT(i, iter) (iter)->charpos = (iter)->bytepos = 0
+#define STRING_iter_get(i, str, iter, offset) ((str)->encoding)->iter_get((i), (str), (iter), (offset))
+#define STRING_iter_skip(i, str, iter, skip) ((str)->encoding)->iter_skip((i), (str), (iter), (skip))
+#define STRING_iter_get_and_advance(i, str, iter) ((str)->encoding)->iter_get_and_advance((i), (str), (iter))
+#define STRING_iter_set_and_advance(i, str, iter, c) ((str)->encoding)->iter_set_and_advance((i), (str), (iter), (c))
+#define STRING_iter_set_position(i, str, iter, pos) ((str)->encoding)->iter_set_position((i), (str), (iter), (pos))
+
 /* stringinfo parameters */
 
 /* &gen_from_def(stringinfo.pasm) */
@@ -63,6 +76,98 @@
 
 /* &end_gen */
 
+typedef struct parrot_string_t STRING;
+
+/* String iterator */
+typedef struct string_iterator_t {
+    UINTVAL bytepos;
+    UINTVAL charpos;
+} String_iter;
+
+/* constructors */
+typedef STRING * (*str_vtable_to_encoding_t)(PARROT_INTERP, ARGIN(const STRING *src));
+typedef STRING * (*str_vtable_chr_t)(PARROT_INTERP, UINTVAL codepoint);
+
+typedef INTVAL   (*str_vtable_equal_t)(PARROT_INTERP, ARGIN(const STRING *lhs), ARGIN(const STRING *rhs));
+typedef INTVAL   (*str_vtable_compare_t)(PARROT_INTERP, ARGIN(const STRING *lhs), ARGIN(const STRING *rhs));
+typedef INTVAL   (*str_vtable_index_t)(PARROT_INTERP, ARGIN(const STRING *src), ARGIN(const STRING *search_string), UINTVAL offset);
+typedef INTVAL   (*str_vtable_rindex_t)(PARROT_INTERP, ARGIN(const STRING *src), ARGIN(const STRING *search_string), UINTVAL offset);
+typedef size_t   (*str_vtable_hash_t)(PARROT_INTERP, ARGIN(const STRING *s), size_t hashval);
+typedef UINTVAL  (*str_vtable_validate_t)(PARROT_INTERP, ARGIN(const STRING *src));
+
+typedef UINTVAL  (*str_vtable_scan_t)(PARROT_INTERP, ARGIN(const STRING *src));
+typedef UINTVAL  (*str_vtable_ord_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset);
+typedef STRING * (*str_vtable_substr_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count);
+
+/* character classes */
+typedef INTVAL   (*str_vtable_is_cclass_t)(PARROT_INTERP, INTVAL, ARGIN(const STRING *src), UINTVAL offset);
+typedef INTVAL   (*str_vtable_find_cclass_t)(PARROT_INTERP, INTVAL, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count);
+typedef INTVAL   (*str_vtable_find_not_cclass_t)(PARROT_INTERP, INTVAL, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count);
+
+/* graphemes */
+typedef STRING * (*str_vtable_get_graphemes_t)(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count);
+typedef STRING * (*str_vtable_compose_t)(PARROT_INTERP, ARGIN(const STRING *src));
+typedef STRING * (*str_vtable_decompose_t)(PARROT_INTERP, ARGIN(const STRING *src));
+
+/* case conversion, TODO: move to single function with a flag */
+typedef STRING * (*str_vtable_upcase_t)(PARROT_INTERP, ARGIN(const STRING *src));
+typedef STRING * (*str_vtable_downcase_t)(PARROT_INTERP, ARGIN(const STRING *src));
+typedef STRING * (*str_vtable_titlecase_t)(PARROT_INTERP, ARGIN(const STRING *src));
+typedef STRING * (*str_vtable_upcase_first_t)(PARROT_INTERP, ARGIN(const STRING *src));
+typedef STRING * (*str_vtable_downcase_first_t)(PARROT_INTERP, ARGIN(const STRING *src));
+typedef STRING * (*str_vtable_titlecase_first_t)(PARROT_INTERP, ARGIN(const STRING *src));
+
+/* iterator functions */
+typedef UINTVAL  (*str_vtable_iter_get_t)(PARROT_INTERP, const STRING *str, const String_iter *i, INTVAL offset);
+typedef void     (*str_vtable_iter_skip_t)(PARROT_INTERP, const STRING *str, String_iter *i, INTVAL skip);
+typedef UINTVAL  (*str_vtable_iter_get_and_advance_t)(PARROT_INTERP, const STRING *str, String_iter *i);
+typedef void     (*str_vtable_iter_set_and_advance_t)(PARROT_INTERP, STRING *str, String_iter *i, UINTVAL c);
+typedef void     (*str_vtable_iter_set_position_t)(PARROT_INTERP, const STRING *str, String_iter *i, UINTVAL pos);
+
+struct _str_vtable {
+    int         num;
+    const char *name;
+    STRING     *name_str;
+    UINTVAL     max_bytes_per_codepoint;
+
+    str_vtable_to_encoding_t            to_encoding;
+    str_vtable_chr_t                    chr;
+
+    str_vtable_equal_t                  equal;
+    str_vtable_compare_t                compare;
+    str_vtable_index_t                  index;
+    str_vtable_rindex_t                 rindex;
+    str_vtable_hash_t                   hash;
+    str_vtable_validate_t               validate;
+
+    str_vtable_scan_t                   scan;
+    str_vtable_ord_t                    ord;
+    str_vtable_substr_t                 substr;
+
+    str_vtable_is_cclass_t              is_cclass;
+    str_vtable_find_cclass_t            find_cclass;
+    str_vtable_find_not_cclass_t        find_not_cclass;
+
+    str_vtable_get_graphemes_t          get_graphemes;
+    str_vtable_compose_t                compose;
+    str_vtable_decompose_t              decompose;
+
+    str_vtable_upcase_t                 upcase;
+    str_vtable_downcase_t               downcase;
+    str_vtable_titlecase_t              titlecase;
+    str_vtable_upcase_first_t           upcase_first;
+    str_vtable_downcase_first_t         downcase_first;
+    str_vtable_titlecase_first_t        titlecase_first;
+
+    str_vtable_iter_get_t               iter_get;
+    str_vtable_iter_skip_t              iter_skip;
+    str_vtable_iter_get_and_advance_t   iter_get_and_advance;
+    str_vtable_iter_set_and_advance_t   iter_set_and_advance;
+    str_vtable_iter_set_position_t      iter_set_position;
+};
+
+typedef struct _str_vtable STR_VTABLE;
+
 #endif /* PARROT_IN_CORE */
 #endif /* PARROT_STRING_H_GUARD */
 

Modified: branches/html_cleanup/include/parrot/string_funcs.h
==============================================================================
--- branches/html_cleanup/include/parrot/string_funcs.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/string_funcs.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -297,18 +297,14 @@
 STRING * Parrot_str_new_init(PARROT_INTERP,
     ARGIN_NULLOK(const char *buffer),
     UINTVAL len,
-    ARGIN(const ENCODING *encoding),
-    ARGIN(const CHARSET *charset),
+    ARGIN(const STR_VTABLE *encoding),
     UINTVAL flags)
         __attribute__nonnull__(1)
-        __attribute__nonnull__(4)
-        __attribute__nonnull__(5);
+        __attribute__nonnull__(4);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
-STRING * Parrot_str_new_noinit(PARROT_INTERP,
-    parrot_string_representation_t representation,
-    UINTVAL capacity)
+STRING * Parrot_str_new_noinit(PARROT_INTERP, UINTVAL capacity)
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
@@ -326,15 +322,12 @@
 PARROT_EXPORT
 PARROT_IGNORABLE_RESULT
 PARROT_CAN_RETURN_NULL
-const CHARSET * Parrot_str_rep_compatible(PARROT_INTERP,
+const STR_VTABLE * Parrot_str_rep_compatible(PARROT_INTERP,
     ARGIN(const STRING *a),
-    ARGIN(const STRING *b),
-    ARGOUT(const ENCODING **e))
+    ARGIN(const STRING *b))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        __attribute__nonnull__(4)
-        FUNC_MODIFIES(*e);
+        __attribute__nonnull__(3);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
@@ -415,13 +408,11 @@
 PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_str_unescape_string(PARROT_INTERP,
     ARGIN(const STRING *src),
-    ARGIN(const CHARSET *charset),
-    ARGIN(const ENCODING *encoding),
+    ARGIN(const STR_VTABLE *encoding),
     UINTVAL flags)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        __attribute__nonnull__(4);
+        __attribute__nonnull__(3);
 
 PARROT_EXPORT
 void Parrot_str_unpin(PARROT_INTERP, ARGMOD(STRING *s))
@@ -454,17 +445,7 @@
 STRING * string_make(PARROT_INTERP,
     ARGIN_NULLOK(const char *buffer),
     UINTVAL len,
-    ARGIN_NULLOK(const char *charset_name),
-    UINTVAL flags)
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-STRING * string_make_from_charset(PARROT_INTERP,
-    ARGIN_NULLOK(const char *buffer),
-    UINTVAL len,
-    INTVAL charset_nr,
+    ARGIN_NULLOK(const char *encoding_name),
     UINTVAL flags)
         __attribute__nonnull__(1);
 
@@ -481,13 +462,6 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-PARROT_OBSERVER
-const char* string_primary_encoding_for_representation(PARROT_INTERP,
-    parrot_string_representation_t representation)
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
 PARROT_MALLOC
 PARROT_CAN_RETURN_NULL
 char * string_to_cstring_nullable(SHIM_INTERP,
@@ -608,8 +582,7 @@
     , PARROT_ASSERT_ARG(buffer))
 #define ASSERT_ARGS_Parrot_str_new_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(encoding) \
-    , PARROT_ASSERT_ARG(charset))
+    , PARROT_ASSERT_ARG(encoding))
 #define ASSERT_ARGS_Parrot_str_new_noinit __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_not_equal __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -619,8 +592,7 @@
 #define ASSERT_ARGS_Parrot_str_rep_compatible __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(a) \
-    , PARROT_ASSERT_ARG(b) \
-    , PARROT_ASSERT_ARG(e))
+    , PARROT_ASSERT_ARG(b))
 #define ASSERT_ARGS_Parrot_str_repeat __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))
@@ -649,7 +621,6 @@
 #define ASSERT_ARGS_Parrot_str_unescape_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src) \
-    , PARROT_ASSERT_ARG(charset) \
     , PARROT_ASSERT_ARG(encoding))
 #define ASSERT_ARGS_Parrot_str_unpin __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -663,16 +634,11 @@
     , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_string_make __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_string_make_from_charset __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_string_max_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_string_ord __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))
-#define ASSERT_ARGS_string_primary_encoding_for_representation \
-     __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) \

Modified: branches/html_cleanup/include/parrot/sub.h
==============================================================================
--- branches/html_cleanup/include/parrot/sub.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/include/parrot/sub.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -106,7 +106,7 @@
 #define Sub_comp_INIT_CLEAR(o) Sub_comp_flag_CLEAR(PF_INIT, o)
 
 /*
- * a flag to signal a Sub that a new RetContinuation should be created
+ * a flag to signal a Sub that a new Continuation should be created
  */
 
 #define NEED_CONTINUATION ((PMC *)1)

Modified: branches/html_cleanup/lib/Parrot/Configure/Options/Conf.pm
==============================================================================
--- branches/html_cleanup/lib/Parrot/Configure/Options/Conf.pm	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/lib/Parrot/Configure/Options/Conf.pm	Wed Sep 22 03:35:47 2010	(r49232)
@@ -102,6 +102,7 @@
    --without-gettext    Build parrot without gettext support
    --without-gmp        Build parrot without GMP support
    --without-opengl     Build parrot without OpenGL support (GL/GLU/GLUT)
+   --without-readline   Build parrot without readline support
    --without-pcre       Build parrot without pcre support
    --without-zlib       Build parrot without zlib support
 

Modified: branches/html_cleanup/lib/Parrot/Configure/Options/Conf/Shared.pm
==============================================================================
--- branches/html_cleanup/lib/Parrot/Configure/Options/Conf/Shared.pm	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/lib/Parrot/Configure/Options/Conf/Shared.pm	Wed Sep 22 03:35:47 2010	(r49232)
@@ -77,6 +77,7 @@
     without-gmp
     without-icu
     without-opengl
+    without-readline
     without-pcre
     without-threads
     without-zlib

Modified: branches/html_cleanup/lib/Parrot/Configure/Step/List.pm
==============================================================================
--- branches/html_cleanup/lib/Parrot/Configure/Step/List.pm	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/lib/Parrot/Configure/Step/List.pm	Wed Sep 22 03:35:47 2010	(r49232)
@@ -28,8 +28,6 @@
     init::optimize
     inter::shlibs
     inter::libparrot
-    inter::charset
-    inter::encoding
     inter::types
     auto::ops
     auto::pmc

Modified: branches/html_cleanup/lib/Parrot/Harness/Smoke.pm
==============================================================================
--- branches/html_cleanup/lib/Parrot/Harness/Smoke.pm	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/lib/Parrot/Harness/Smoke.pm	Wed Sep 22 03:35:47 2010	(r49232)
@@ -50,7 +50,7 @@
     send_archive_to_smolder( %env_data );
 
 At the current time, automated smoke reports are collected and displayed via
-the Smolder system at L<http://smolder.plusthree.com>.  Such reports require
+the Smolder system at L<http://smolder.parrot.org>.  Such reports require
 the Perl 5 F<LWP::UserAgent> module, available from CPAN.
 
 On network problem or for offline use you may send tar reports later
@@ -92,10 +92,10 @@
 
 # language implementations have a different project id
 my %SMOLDER_CONFIG = (
-    server       => 'http://smolder.plusthree.com',
+    server       => 'http://smolder.parrot.org',
     username     => 'parrot-autobot',
-    password     => 'squ at wk',
-    project_id   => 8,
+    password     => 'qa_rocks',
+    project_id   => 1,
     report_file  => ['parrot_test_run.tar.gz'],
 );
 

Modified: branches/html_cleanup/lib/Parrot/Headerizer.pm
==============================================================================
--- branches/html_cleanup/lib/Parrot/Headerizer.pm	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/lib/Parrot/Headerizer.pm	Wed Sep 22 03:35:47 2010	(r49232)
@@ -45,6 +45,7 @@
     $self->{valid_macros} = { map { ( $_, 1 ) } qw(
         PARROT_EXPORT
         PARROT_INLINE
+        PARROT_NOINLINE
 
         PARROT_CAN_RETURN_NULL
         PARROT_CANNOT_RETURN_NULL

Modified: branches/html_cleanup/lib/Parrot/Manifest.pm
==============================================================================
--- branches/html_cleanup/lib/Parrot/Manifest.pm	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/lib/Parrot/Manifest.pm	Wed Sep 22 03:35:47 2010	(r49232)
@@ -112,9 +112,9 @@
 
     $manifest_lines_ref = $mani->prepare_manifest();
 
-Prepares the manifest from the read in by the C<new()> method, and returns a
-hash of the files.  The keys of the hash are the filenames, and the values are
-strings representing the package and a list of the meta flags.
+Prepares the manifest from the data read in by the C<new()> method, and
+returns a hash of the files.  The keys of the hash are the filenames, and the
+values are strings representing the package and a list of the meta flags.
 
 =cut
 

Modified: branches/html_cleanup/lib/Parrot/Pmc2c/PMC.pm
==============================================================================
--- branches/html_cleanup/lib/Parrot/Pmc2c/PMC.pm	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/lib/Parrot/Pmc2c/PMC.pm	Wed Sep 22 03:35:47 2010	(r49232)
@@ -71,6 +71,8 @@
 # methods
 sub add_method {
     my ( $self, $method ) = @_;
+    warn "FATAL ERROR: Duplicated VTABLE function: " . $method->name
+        if exists $self->{has_method}{$method->name};
     $self->{has_method}{ $method->name } = @{ $self->{methods} };
     push @{ $self->{methods} }, $method;
 }

Modified: branches/html_cleanup/lib/Parrot/Pmc2c/PMCEmitter.pm
==============================================================================
--- branches/html_cleanup/lib/Parrot/Pmc2c/PMCEmitter.pm	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/lib/Parrot/Pmc2c/PMCEmitter.pm	Wed Sep 22 03:35:47 2010	(r49232)
@@ -569,10 +569,10 @@
     if ( $self->is_dynamic ) {
         $cout .= <<"EOC";
         vt->base_type    = entry;
-        vt->whoami       = string_make(interp, "$classname", @{[length($classname)]},
-                                       "ascii", PObj_constant_FLAG|PObj_external_FLAG);
+        vt->whoami       = Parrot_str_new_init(interp, "$classname", @{[length($classname)]},
+                                       Parrot_ascii_encoding_ptr, PObj_constant_FLAG|PObj_external_FLAG);
         vt->provides_str = Parrot_str_concat(interp, vt->provides_str,
-            string_make(interp, "$provides", @{[length($provides)]}, "ascii",
+            Parrot_str_new_init(interp, "$provides", @{[length($provides)]}, Parrot_ascii_encoding_ptr,
             PObj_constant_FLAG|PObj_external_FLAG));
 
 EOC
@@ -656,11 +656,18 @@
         next unless $method->type eq Parrot::Pmc2c::Method::NON_VTABLE;
 
         #these differ for METHODs
-        my $method_name = $method->name;
-        my $symbol_name = $method->symbol;
+        my $method_name     = $method->name;
+        my $symbol_name     = $method->symbol;
+        my ($pcc_signature) = $method->pcc_signature;
 
         $cout .= <<"EOC";
-        register_raw_nci_method_in_ns(interp, entry, F2DPTR(Parrot_${classname}_${method_name}), CONST_STRING_GEN(interp, "$symbol_name"));
+        {
+            STRING *method_name = CONST_STRING_GEN(interp, "$symbol_name");
+            STRING *signature   = CONST_STRING_GEN(interp, "$pcc_signature");
+            register_native_pcc_method_in_ns(interp, entry,
+                F2DPTR(Parrot_${classname}_${method_name}),
+                method_name, signature);
+        }
 EOC
         if ( $method->{attrs}{write} ) {
             $cout .= <<"EOC";
@@ -828,7 +835,8 @@
     }
 $get_mro
     VTABLE_unshift_string(interp, mro,
-        string_make(interp, "$classname", @{[length($classname)]}, NULL, 0));
+        Parrot_str_new_init(interp, "$classname", @{[length($classname)]},
+            Parrot_default_encoding_ptr, 0));
     return mro;
 }
 

Modified: branches/html_cleanup/lib/Parrot/Test.pm
==============================================================================
--- branches/html_cleanup/lib/Parrot/Test.pm	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/lib/Parrot/Test.pm	Wed Sep 22 03:35:47 2010	(r49232)
@@ -298,7 +298,6 @@
 Memoize::memoize('path_to_parrot');
 
 # Tell parrot it's being tested--disables searching of installed libraries.
-# (see Parrot_get_runtime_prefix in src/library.c).
 $ENV{PARROT_TEST} = 1 unless defined $ENV{PARROT_TEST};
 
 my $builder = Test::Builder->new();

Modified: branches/html_cleanup/runtime/parrot/include/test_more.pir
==============================================================================
--- branches/html_cleanup/runtime/parrot/include/test_more.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/runtime/parrot/include/test_more.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -20,7 +20,7 @@
     .local pmc exports, curr_namespace, test_namespace
     curr_namespace = get_namespace
     test_namespace = get_root_namespace [ 'parrot'; 'Test'; 'More' ]
-    exports = split ' ', 'plan diag ok nok is is_deeply is_null like substring isa_ok skip isnt todo throws_like lives_ok dies_ok throws_substring done_testing'
+    exports = split ' ', 'plan diag ok nok is is_deeply is_null like substring isa_ok skip skip_all isnt todo throws_like lives_ok dies_ok throws_substring done_testing'
 
     test_namespace.'export_to'(curr_namespace, exports)
 

Modified: branches/html_cleanup/runtime/parrot/library/Archive/Zip.pir
==============================================================================
--- branches/html_cleanup/runtime/parrot/library/Archive/Zip.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/runtime/parrot/library/Archive/Zip.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -15,6 +15,7 @@
 
 .loadlib 'sys_ops'
 .loadlib 'io_ops'
+.include 'iglobals.pasm'
 .include 'stat.pasm'
 .include 'tm.pasm'
 
@@ -25,6 +26,12 @@
 .namespace ['Archive';'Zip';'Base']
 
 .sub '' :init :load :anon
+    $P0 = getinterp
+    $P1 = $P0[.IGLOBALS_CONFIG_HASH]
+    $I0 = $P1['has_zlib']
+    if $I0 goto L1
+    die "Need a parrot built with zlib"
+  L1:
     $P0 = loadlib 'gziphandle'
     $P0 = newclass ['Archive';'Zip';'Base']
     .globalconst int AZ_OK = 0

Modified: branches/html_cleanup/runtime/parrot/library/P6object.pir
==============================================================================
--- branches/html_cleanup/runtime/parrot/library/P6object.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/runtime/parrot/library/P6object.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -260,6 +260,9 @@
     .local pmc methodpmc
     methodname = shift methoditer
     methodpmc = methods[methodname]
+    # don't add NativePCCMethods
+    $I0 = isa methodpmc, 'NativePCCMethod'
+    if $I0 goto method_loop
     # don't add NCI methods (they don't work)
     $I0 = isa methodpmc, 'NCI'
     if $I0 goto method_loop

Modified: branches/html_cleanup/runtime/parrot/library/Test/Builder.pir
==============================================================================
--- branches/html_cleanup/runtime/parrot/library/Test/Builder.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/runtime/parrot/library/Test/Builder.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -494,6 +494,9 @@
 =cut
 
 .sub 'skip_all' :method
+    .param string reason  :optional
+    .param int has_reason :opt_flag
+
     .local pmc testplan
     testplan = self.'testplan'()
 
@@ -505,9 +508,14 @@
     throw plan_exception
 
   SKIP_ALL:
+    $S0 = "1..0 # SKIP"
+    unless has_reason goto NO_REASON
+    $S0 .= " "
+    $S0 .= reason
+  NO_REASON:
     .local pmc output
     output = self.'output'()
-    output.'write'( "1..0" )
+    output.'write'( $S0 )
     exit 0
 .end
 

Modified: branches/html_cleanup/runtime/parrot/library/Test/Builder/TestPlan.pir
==============================================================================
--- branches/html_cleanup/runtime/parrot/library/Test/Builder/TestPlan.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/runtime/parrot/library/Test/Builder/TestPlan.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -54,6 +54,15 @@
     setattribute self, 'plan', plan
 .end
 
+.sub 'get_bool' :vtable :method
+    .local pmc plan
+    plan = getattribute self, 'plan'
+
+    $I0 = isa plan, [ 'Test'; 'Builder'; 'NullPlan' ]
+    $I0 = not $I0
+    .return ($I0)
+.end
+
 .sub 'set_tests' :method
     .param int tests
 

Modified: branches/html_cleanup/runtime/parrot/library/Test/More.pir
==============================================================================
--- branches/html_cleanup/runtime/parrot/library/Test/More.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/runtime/parrot/library/Test/More.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -13,7 +13,7 @@
     .local pmc exports, curr_namespace, test_namespace
     curr_namespace = get_namespace
     test_namespace = get_namespace [ 'Test'; 'More' ]
-    exports        = split ' ', 'plan diag ok nok is is_deeply like isa_ok skip isnt todo throws_like lives_ok dies_ok'
+    exports        = split ' ', 'plan diag ok nok is is_deeply like isa_ok skip skip_all isnt todo throws_like lives_ok dies_ok'
 
     test_namespace.'export_to'(curr_namespace, exports)
 
@@ -1318,6 +1318,18 @@
     test.'skip'()
 .end
 
+=item C<skip_all( reason )>
+
+=cut
+
+.sub skip_all
+    .param string reason :optional
+
+    .local pmc test
+    get_hll_global test, [ 'Test'; 'More' ], '_test'
+    test.'skip_all'(reason)
+.end
+
 =item C<todo( passed, description, reason )>
 
 Records a test as pass or fail (like C<ok>, but marks it as TODO so it always

Modified: branches/html_cleanup/runtime/parrot/library/URI/Escape.pir
==============================================================================
--- branches/html_cleanup/runtime/parrot/library/URI/Escape.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/runtime/parrot/library/URI/Escape.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -40,13 +40,12 @@
     .param string s
     .param string except
 
-    .local int asciicharset, utf8enc, scharset, senc
-    asciicharset = find_charset 'ascii'
-    scharset = charset s
-    if scharset == asciicharset goto encodeit
+    .local int asciienc, utf8enc, senc
+    senc = encoding s
+    asciienc = find_encoding 'ascii'
+    if senc == asciienc goto encodeit
 
     utf8enc = find_encoding 'utf8'
-    senc = encoding s
     if utf8enc == senc goto encodeit
     s = trans_encoding s, utf8enc
 

Modified: branches/html_cleanup/runtime/parrot/library/distutils.pir
==============================================================================
--- branches/html_cleanup/runtime/parrot/library/distutils.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/runtime/parrot/library/distutils.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -320,6 +320,15 @@
     .const 'Sub' _clean_wininst = '_clean_wininst'
     register_step_after('clean', _clean_wininst)
   L1:
+
+    $I0 = $P0['has_zlib']
+    if $I0 goto L2
+    .const 'Sub' _no_zlib = '_no_zlib'
+    register_step('smoke', _no_zlib)
+    register_step('sdist_gztar', _no_zlib)
+    register_step('sdist_zip', _no_zlib)
+    register_step('bdist_rpm', _no_zlib)
+  L2:
 .end
 
 =head2 Functions
@@ -1213,7 +1222,7 @@
 
 the key is the PMC name
 
-the value is an array of PMC pathname or a single PPC pathname
+the value is an array of PMC/C/H pathname or a single PMC pathname
 
 an array creates a PMC group
 
@@ -1251,24 +1260,52 @@
     .local pmc srcs
     srcs = hash[name]
     $I0 = does srcs, 'array'
-    unless $I0 goto L5
+    unless $I0 goto L3
+    .local pmc pmcs, includes
+    pmcs = new 'ResizableStringArray'
+    includes = new 'ResizableStringArray'
     $P1 = iter srcs
-  L3:
-    unless $P1 goto L4
+  L4:
+    unless $P1 goto L5
     .local string src
     src = shift $P1
+    .local string ext
+    $I0 = rindex(src, '.')
+    ext = substr src, $I0
+    unless ext == '.pmc' goto L6
+    push pmcs, src
+  L6:
+    unless ext == '.h' goto L4
+    push includes, src
+    goto L4
+  L5:
+    $P1 = iter srcs
+  L7:
+    unless $P1 goto L8
+    src = shift $P1
+    $I0 = rindex(src, '.')
+    ext = substr src, $I0
+    if ext == '.h' goto L7
     $S0 = _mk_path_gen_dynpmc(src, obj)
-    $I0 = newer($S0, src)
-    if $I0 goto L3
+    push includes, src
+    $I0 = newer($S0, includes)
+    $S1 = pop includes
+    if $I0 goto L7
+    if ext == '.c' goto L9
     __build_dynpmc(src, cflags)
-    goto L3
-  L4:
+    goto L7
+  L9:
+    __compile_cc($S0, src, cflags)
+    $S0 = ' ' . $S0
+    ldflags .= $S0
+    goto L7
+  L8:
     $S0 = _mk_path_dynpmc(name, load_ext)
     $I0 = newer($S0, srcs)
     if $I0 goto L1
-    __build_dynpmc_group(srcs, name, cflags, ldflags)
+    __build_dynpmc_group(pmcs, name, cflags, ldflags)
     goto L1
-  L5:
+  L3:
     src = srcs
     $S0 = _mk_path_dynpmc(name, load_ext)
     $I0 = newer($S0, src)
@@ -1449,8 +1486,7 @@
 .sub '_mk_path_gen_dynpmc' :anon
     .param string src
     .param string ext
-    $I0 = length src
-    $I0 -= 4
+    $I0 = rindex(src, '.')
     $S0 = substr src, 0, $I0
     $S0 .= ext
     unless ext == '.h' goto L1
@@ -1770,14 +1806,19 @@
     unless $P1 goto L4
     .local string src
     src = shift $P1
+    .local string ext
+    $I0 = rindex(src, '.')
+    ext = substr src, $I0
+    if ext == '.h' goto L3
+    $S0 = _mk_path_gen_dynpmc(src, obj)
+    unlink($S0, 1 :named('verbose'))
+    if ext == '.c' goto L3
     $S0 = _mk_path_gen_dynpmc(src, '.c')
     unlink($S0, 1 :named('verbose'))
     $S0 = _mk_path_gen_dynpmc(src, '.h')
     unlink($S0, 1 :named('verbose'))
     $S0 = _mk_path_gen_dynpmc(src, '.dump')
     unlink($S0, 1 :named('verbose'))
-    $S0 = _mk_path_gen_dynpmc(src, obj)
-    unlink($S0, 1 :named('verbose'))
     goto L3
   L4:
     src = srcs[0]
@@ -2052,6 +2093,11 @@
 
 a hash
 
+=item smolder_credentials
+
+A string, of the form "USERNAME:PASSWORD" to be used as the credentials for
+the server. The default is "parrot-autobot:qa_rocks"
+
 =back
 
 =cut
@@ -2146,6 +2192,14 @@
     set $P0, 1
     $P0[0] = archive
     push contents, $P0
+    $S0 = get_value('smolder_credentials', "parrot-autobot:qa_rocks" :named('default'), kv :flat :named)
+    $P0 = split ':', $S0
+    $P1 = $P0[0]
+    push contents, 'username'
+    push contents, $P1
+    $P1 = $P0[1]
+    push contents, 'password'
+    push contents, $P1
     load_bytecode 'LWP/UserAgent.pir'
     .local pmc ua, response
     ua = new ['LWP';'UserAgent']
@@ -4107,6 +4161,12 @@
     unlink($S0, 1 :named('verbose'))
 .end
 
+
+.sub '_no_zlib' :anon
+    .param pmc kv :slurpy :named
+    say "This step needs a parrot built with zlib"
+.end
+
 =head2 Configuration Helpers
 
 =over 4

Modified: branches/html_cleanup/runtime/parrot/library/osutils.pir
==============================================================================
--- branches/html_cleanup/runtime/parrot/library/osutils.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/runtime/parrot/library/osutils.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -851,6 +851,29 @@
     .return (volume, directories, file)
 .end
 
+=item rindex
+
+=cut
+
+.sub 'rindex'
+    .param string str
+    .param string sstr
+    .param int pos              :optional
+    .param int has_pos          :opt_flag
+    if has_pos goto L1
+    pos = 0
+  L1:
+    $I0 = index str, sstr, pos
+    unless $I0 < 0 goto L2
+    .return ($I0)
+  L2:
+    $I1 = $I0
+    inc $I0
+    $I0 = index str, sstr, $I0
+    unless $I0 < 0 goto L2
+    .return ($I1)
+.end
+
 =back
 
 =head1 AUTHOR

Modified: branches/html_cleanup/runtime/parrot/library/pcre.pir
==============================================================================
--- branches/html_cleanup/runtime/parrot/library/pcre.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/runtime/parrot/library/pcre.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -89,6 +89,9 @@
     loadlib libpcre, 'pcre3'
     loaded = defined libpcre
     if loaded goto LIB_LOADED
+    loadlib libpcre, 'libpcre-0' # pcre 8.10 and maybe others
+    loaded = defined libpcre
+    if loaded goto LIB_LOADED
     branch LIB_FAILED
 
 LIB_CYGWIN:

Modified: branches/html_cleanup/src/call/args.c
==============================================================================
--- branches/html_cleanup/src/call/args.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/call/args.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -736,7 +736,7 @@
 {
     ASSERT_ARGS(fill_params)
     INTVAL *raw_params;
-    PMC    *named_used_list = PMCNULL;
+    Hash   *named_used_list = NULL;
     INTVAL  param_index     = 0;
     INTVAL  arg_index       = 0;
     INTVAL  named_count     = 0;
@@ -789,6 +789,8 @@
             else if (err_check) {
                 /* We've used up all the parameters, but have extra positional
                  * args left over. */
+                if (named_used_list != NULL)
+                    parrot_hash_destroy(interp, named_used_list);
                 Parrot_ex_throw_from_c_args(interp, NULL,
                     EXCEPTION_INVALID_OPERATION,
                     "too many positional arguments: %d passed, %d expected",
@@ -813,10 +815,13 @@
                 INTVAL num_positionals = positional_args - arg_index;
                 if (num_positionals < 0)
                     num_positionals = 0;
-                if (named_count > 0)
+                if (named_count > 0){
+                    if (named_used_list != NULL)
+                        parrot_hash_destroy(interp, named_used_list);
                     Parrot_ex_throw_from_c_args(interp, NULL,
                         EXCEPTION_INVALID_OPERATION,
                         "named parameters must follow all positional parameters");
+                }
 
                 collect_positional = Parrot_pmc_new_init_int(interp,
                     Parrot_get_ctx_HLL_type(interp, enum_class_ResizablePMCArray),
@@ -838,10 +843,13 @@
             /* Fill a named parameter with a positional argument. */
             if (param_flags & PARROT_ARG_NAME) {
                 STRING *param_name;
-                if (!(param_flags & PARROT_ARG_STRING))
+                if (!(param_flags & PARROT_ARG_STRING)){
+                    if (named_used_list != NULL)
+                        parrot_hash_destroy(interp, named_used_list);
                     Parrot_ex_throw_from_c_args(interp, NULL,
                         EXCEPTION_INVALID_OPERATION,
                         "named parameters must have a name specified");
+                }
                 param_name = PARROT_ARG_CONSTANT_ISSET(param_flags)
                    ?  accessor->string_constant(interp, arg_info, param_index)
                    : *accessor->string(interp, arg_info, param_index);
@@ -854,15 +862,19 @@
                 param_flags = raw_params[param_index];
 
                 /* Mark the name as used, cannot be filled again. */
-                if (PMC_IS_NULL(named_used_list)) /* Only created if needed. */
-                    named_used_list = Parrot_pmc_new(interp, enum_class_Hash);
+                if (named_used_list==NULL) /* Only created if needed. */
+                    named_used_list = parrot_create_hash(interp,
+                            enum_type_INTVAL, Hash_key_type_STRING);
 
-                VTABLE_set_integer_keyed_str(interp, named_used_list, param_name, 1);
+                parrot_hash_put(interp, named_used_list, param_name, (void *)1);
             }
-            else if (named_count > 0)
+            else if (named_count > 0){
+                if (named_used_list != NULL)
+                    parrot_hash_destroy(interp, named_used_list);
                 Parrot_ex_throw_from_c_args(interp, NULL,
                     EXCEPTION_INVALID_OPERATION,
                     "named parameters must follow all positional parameters");
+            }
 
             /* Check for :lookahead parameter goes here. */
 
@@ -885,6 +897,8 @@
                     VTABLE_get_number_keyed_int(interp, call_object, arg_index);
                 break;
               default:
+                if (named_used_list != NULL)
+                    parrot_hash_destroy(interp, named_used_list);
                 Parrot_ex_throw_from_c_args(interp, NULL,
                     EXCEPTION_INVALID_OPERATION, "invalid parameter type");
                 break;
@@ -931,12 +945,15 @@
             if (param_flags & PARROT_ARG_NAME)
                 break;
 
-            if (err_check)
+            if (err_check){
+                if (named_used_list != NULL)
+                    parrot_hash_destroy(interp, named_used_list);
                 Parrot_ex_throw_from_c_args(interp, NULL,
                     EXCEPTION_INVALID_OPERATION,
                     "too few positional arguments: "
                     "%d passed, %d (or more) expected",
                     positional_args, param_index + 1);
+            }
         }
 
         /* Go on to next argument and parameter. */
@@ -950,22 +967,29 @@
         INTVAL  param_flags = raw_params[param_index];
 
         /* All remaining parameters must be named. */
-        if (!(param_flags & PARROT_ARG_NAME))
+        if (!(param_flags & PARROT_ARG_NAME)){
+            if (named_used_list != NULL)
+                parrot_hash_destroy(interp, named_used_list);
             Parrot_ex_throw_from_c_args(interp, NULL,
                 EXCEPTION_INVALID_OPERATION,
                 "named parameters must follow all positional parameters");
+        }
 
         if (arg_index < positional_args) {
             PMC *arg_sig;
 
             GETATTR_CallContext_arg_flags(interp, call_object, arg_sig);
 
+            if (named_used_list != NULL)
+                parrot_hash_destroy(interp, named_used_list);
+
             /* We've used up all the positional parameters, but have extra
              * positional args left over. */
-            if (VTABLE_get_integer_keyed_int(interp, arg_sig, arg_index) & PARROT_ARG_NAME)
+            if (VTABLE_get_integer_keyed_int(interp, arg_sig, arg_index) & PARROT_ARG_NAME){
                 Parrot_ex_throw_from_c_args(interp, NULL,
                     EXCEPTION_INVALID_OPERATION,
                     "named arguments must follow all positional arguments");
+            }
 
             Parrot_ex_throw_from_c_args(interp, NULL,
                 EXCEPTION_INVALID_OPERATION,
@@ -988,15 +1012,19 @@
                     STRING * const name = VTABLE_get_string_keyed_int(interp,
                             named_arg_list, named_arg_index);
 
-                    if ((PMC_IS_NULL(named_used_list))
-                    || !VTABLE_exists_keyed_str(interp, named_used_list, name)) {
+                    if ((named_used_list == NULL)
+                    || !parrot_hash_exists(interp, named_used_list, name)) {
+
                         VTABLE_set_pmc_keyed_str(interp, collect_named, name,
                                 VTABLE_get_pmc_keyed_str(interp, call_object, name));
+
                         /* Mark the name as used, cannot be filled again. */
-                        /* named_used_list only created if needed. */
-                        if (PMC_IS_NULL(named_used_list))
-                            named_used_list = Parrot_pmc_new(interp, enum_class_Hash);
-                        VTABLE_set_integer_keyed_str(interp, named_used_list, name, 1);
+                        if (named_used_list==NULL) /* Only created if needed. */
+                            named_used_list = parrot_create_hash(interp,
+                                    enum_type_INTVAL, Hash_key_type_STRING);
+
+                        parrot_hash_put(interp, named_used_list, name, (void *)1);
+
                         ++named_count;
                     }
                 }
@@ -1007,10 +1035,13 @@
         }
 
         /* Store the name. */
-        if (!(param_flags & PARROT_ARG_STRING))
+        if (!(param_flags & PARROT_ARG_STRING)){
+            if (named_used_list != NULL)
+                parrot_hash_destroy(interp, named_used_list);
             Parrot_ex_throw_from_c_args(interp, NULL,
                EXCEPTION_INVALID_OPERATION,
                "named parameters must have a name specified");
+        }
 
         param_name = PARROT_ARG_CONSTANT_ISSET(param_flags)
                    ?  accessor->string_constant(interp, arg_info, param_index)
@@ -1026,10 +1057,11 @@
             if (VTABLE_exists_keyed_str(interp, call_object, param_name)) {
 
                 /* Mark the name as used, cannot be filled again. */
-                /* named_used_list only created if needed. */
-                if (PMC_IS_NULL(named_used_list))
-                    named_used_list = Parrot_pmc_new(interp, enum_class_Hash);
-                VTABLE_set_integer_keyed_str(interp, named_used_list, param_name, 1);
+                if (named_used_list==NULL) /* Only created if needed. */
+                    named_used_list = parrot_create_hash(interp,
+                            enum_type_INTVAL, Hash_key_type_STRING);
+
+                parrot_hash_put(interp, named_used_list, param_name, (void *)1);
                 ++named_count;
 
                 /* Fill the named parameter. */
@@ -1051,6 +1083,8 @@
                         VTABLE_get_pmc_keyed_str(interp, call_object, param_name);
                     break;
                   default:
+                    if (named_used_list != NULL)
+                        parrot_hash_destroy(interp, named_used_list);
                     Parrot_ex_throw_from_c_args(interp, NULL,
                         EXCEPTION_INVALID_OPERATION, "invalid parameter type");
                     break;
@@ -1087,31 +1121,42 @@
             /* We don't have an argument for the parameter, and it's not
              * optional, so it's an error. */
             else {
-                if (err_check)
+                if (err_check){
+                    if (named_used_list != NULL)
+                        parrot_hash_destroy(interp, named_used_list);
                     Parrot_ex_throw_from_c_args(interp, NULL,
                         EXCEPTION_INVALID_OPERATION,
                         "too few named arguments: "
                         "no argument for required parameter '%S'", param_name);
+                }
             }
         }
 
         ++param_index;
     }
 
+
     /* Double check that all named arguments were assigned to parameters. */
     if (err_check) {
         PMC  *named_arg_list;
         Hash *h;
         /* Early exit to avoid vtable call */
         GETATTR_CallContext_hash(interp, call_object, h);
-        if (!h || !h->entries)
+        if (!h || !h->entries){
+            if (named_used_list != NULL)
+                parrot_hash_destroy(interp, named_used_list);
             return;
+        }
 
         named_arg_list = VTABLE_get_attr_str(interp, call_object, CONST_STRING(interp, "named"));
 
         if (!PMC_IS_NULL(named_arg_list)) {
             const INTVAL named_arg_count = VTABLE_elements(interp, named_arg_list);
-            if (PMC_IS_NULL(named_used_list))
+
+            if (named_used_list==NULL){
+                if (named_used_list != NULL)
+                    parrot_hash_destroy(interp, named_used_list);
+
                 return;
 
                 /* The 'return' above is a temporary hack to duplicate an old
@@ -1123,6 +1168,7 @@
                     "too many named arguments: %d passed, 0 used",
                     named_arg_count);
                  */
+            }
 
             if (named_arg_count > named_count) {
                 /* At this point we know we have named arguments that weren't
@@ -1136,7 +1182,9 @@
                     STRING * const name = VTABLE_get_string_keyed_int(interp,
                             named_arg_list, named_arg_index);
 
-                    if (!VTABLE_exists_keyed_str(interp, named_used_list, name)) {
+                    if (!parrot_hash_exists(interp, named_used_list, name)) {
+                        if (named_used_list != NULL)
+                            parrot_hash_destroy(interp, named_used_list);
                         Parrot_ex_throw_from_c_args(interp, NULL,
                                 EXCEPTION_INVALID_OPERATION,
                                 "too many named arguments: '%S' not used",
@@ -1146,6 +1194,8 @@
             }
         }
     }
+    if (named_used_list != NULL)
+        parrot_hash_destroy(interp, named_used_list);
 }
 
 

Modified: branches/html_cleanup/src/call/context_accessors.c
==============================================================================
--- branches/html_cleanup/src/call/context_accessors.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/call/context_accessors.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -655,9 +655,6 @@
 
 /*
 
-=item C<INTVAL Parrot_pcc_get_int_constant_func(PARROT_INTERP, PMC *ctx, INTVAL
-idx)>
-
 =item C<FLOATVAL Parrot_pcc_get_num_constant_func(PARROT_INTERP, PMC *ctx,
 INTVAL idx)>
 
@@ -676,18 +673,6 @@
 PARROT_EXPORT
 PARROT_PURE_FUNCTION
 PARROT_CAN_RETURN_NULL
-INTVAL
-Parrot_pcc_get_int_constant_func(SHIM_INTERP, ARGIN(PMC *ctx), INTVAL idx)
-{
-    ASSERT_ARGS(Parrot_pcc_get_int_constant_func)
-    const Parrot_Context * const c = CONTEXT_STRUCT(ctx);
-    PARROT_ASSERT(c->constants[idx].type == 'i');
-    return c->constants[idx].u.integer;
-}
-
-PARROT_EXPORT
-PARROT_PURE_FUNCTION
-PARROT_CAN_RETURN_NULL
 FLOATVAL
 Parrot_pcc_get_num_constant_func(SHIM_INTERP, ARGIN(PMC *ctx), INTVAL idx)
 {

Modified: branches/html_cleanup/src/call/pcc.c
==============================================================================
--- branches/html_cleanup/src/call/pcc.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/call/pcc.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -270,8 +270,7 @@
 
 =item C<INTVAL Parrot_pcc_do_run_ops(PARROT_INTERP, PMC *sub_obj)>
 
-Check if current object require running ops. Used in tailcall for updating
-RetContinuation.
+Check if current object require running ops.
 
 =cut
 

Modified: branches/html_cleanup/src/datatypes.c
==============================================================================
--- branches/html_cleanup/src/datatypes.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/datatypes.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -78,7 +78,8 @@
             ? "illegal"
             : data_types[type - enum_first_type].name;
 
-    return string_make(interp, s, strlen(s), NULL, PObj_external_FLAG);
+    return Parrot_str_new_init(interp, s, strlen(s),
+            Parrot_default_encoding_ptr, PObj_external_FLAG);
 }
 
 /*

Modified: branches/html_cleanup/src/debug.c
==============================================================================
--- branches/html_cleanup/src/debug.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/debug.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -33,6 +33,7 @@
 #include "debug.str"
 #include "pmc/pmc_continuation.h"
 #include "pmc/pmc_callcontext.h"
+#include "parrot/oplib/core_ops.h"
 
 /* Hand switched debugger tracing
  * Set to 1 to enable tracing to stderr
@@ -81,6 +82,12 @@
 static void debugger_cmdline(PARROT_INTERP)
         __attribute__nonnull__(1);
 
+static void display_breakpoint(
+    ARGIN(PDB_t *pdb),
+    ARGIN(const PDB_breakpoint_t *breakpoint))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 PARROT_OBSERVER
@@ -131,6 +138,9 @@
        PARROT_ASSERT_ARG(pdb))
 #define ASSERT_ARGS_debugger_cmdline __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_display_breakpoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(pdb) \
+    , PARROT_ASSERT_ARG(breakpoint))
 #define ASSERT_ARGS_GDB_P __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))
@@ -524,6 +534,7 @@
 
 DebuggerCmdList DebCmdList [] = {
     { "assign",      'a',  &cmd_assign },
+    { "blist",       '\0', &cmd_listbreakpoints },
     { "break",       '\0', &cmd_break },
     { "continue",    '\0', &cmd_continue },
     { "delete",      'd',  &cmd_delete },
@@ -1415,8 +1426,8 @@
 #if TRACE_DEBUGGER
             fprintf(stderr, "PDB_break: '%s'\n", str);
 #endif
-            condition->value = string_make(interp, str, (UINTVAL)(i - 1),
-                NULL, 0);
+            condition->value = Parrot_str_new_init(interp, str, (UINTVAL)(i - 1),
+                Parrot_default_encoding_ptr, 0);
 
             condition->type |= PDB_cond_const;
         }
@@ -1475,8 +1486,8 @@
 {
     ASSERT_ARGS(PDB_set_break)
     PDB_t            * const pdb      = interp->pdb;
-    PDB_breakpoint_t *newbreak;
-    PDB_breakpoint_t **lbreak;
+    PDB_breakpoint_t *newbreak,
+                     *oldbreak;
     PDB_line_t       *line = NULL;
     long              bp_id;
     opcode_t         *breakpos = NULL;
@@ -1557,32 +1568,31 @@
         newbreak->condition = PDB_cond(interp, command);
     }
 
-    /* Set the address where to stop */
+    /* Set the address where to stop and the line number. */
     newbreak->pc   = breakpos;
-
-    /* No next breakpoint */
-    newbreak->next = NULL;
+    newbreak->line = line->number;
 
     /* Don't skip (at least initially) */
     newbreak->skip = 0;
 
-    /* Add the breakpoint to the end of the list */
-    bp_id = 1;
-    lbreak = & pdb->breakpoint;
-    while (*lbreak) {
-        bp_id = (*lbreak)->id + 1;
-        lbreak = & (*lbreak)->next;
-    }
-    newbreak->prev = *lbreak;
-    *lbreak = newbreak;
-    newbreak->id = bp_id;
+    /* Add the breakpoint to the end of the list, dealing with the first
+       breakpoint as a special case. */
+
+    if (!pdb->breakpoint) {
+        newbreak->id = 1;
+        pdb->breakpoint = newbreak;
+    }
+    else {
+        for (oldbreak = pdb->breakpoint; oldbreak->next; oldbreak = oldbreak->next)
+            ;
+        newbreak->id = oldbreak->id + 1;
+        oldbreak->next = newbreak;
+        newbreak->prev = oldbreak;
+    }
 
     /* Show breakpoint position */
 
-    Parrot_io_eprintf(pdb->debugger, "Breakpoint %li at", newbreak->id);
-    if (line)
-        Parrot_io_eprintf(pdb->debugger, " line %li", line->number);
-    Parrot_io_eprintf(pdb->debugger, " pos %li\n", newbreak->pc - interp->code->base.data);
+    display_breakpoint(pdb, newbreak);
 }
 
 /*
@@ -1600,15 +1610,16 @@
 {
     ASSERT_ARGS(list_breakpoints)
 
-    PDB_breakpoint_t **lbreak;
-    for (lbreak = & pdb->breakpoint; *lbreak; lbreak = & (*lbreak)->next) {
-        PDB_breakpoint_t *br = *lbreak;
-        Parrot_io_eprintf(pdb->debugger, "Breakpoint %li at", br->id);
-        Parrot_io_eprintf(pdb->debugger, " pos %li", br->pc - pdb->debugee->code->base.data);
-        if (br->skip == -1)
-            Parrot_io_eprintf(pdb->debugger, " (disabled)");
-        Parrot_io_eprintf(pdb->debugger, "\n");
-    }
+    PDB_breakpoint_t *breakpoint;
+
+    if (pdb->breakpoint)
+        for (breakpoint = pdb->breakpoint;
+             breakpoint;
+             breakpoint = breakpoint->next)
+            display_breakpoint(pdb, breakpoint);
+
+    else
+        Parrot_io_eprintf(pdb->debugger, "No breakpoints set\n");
 }
 
 /*
@@ -1700,7 +1711,7 @@
             breakpoint = breakpoint->next;
 
         if (!breakpoint) {
-            Parrot_io_eprintf(interp->pdb->debugger, "No breakpoint number %ld", n);
+            Parrot_io_eprintf(interp->pdb->debugger, "No breakpoint [%ld]", n);
             return NULL;
         }
 
@@ -1734,16 +1745,17 @@
     PDB_breakpoint_t * const breakpoint = PDB_find_breakpoint(interp, command);
 
     /* if the breakpoint exists, disable it. */
-    if (breakpoint)
+    if (breakpoint) {
         breakpoint->skip = -1;
+        display_breakpoint(interp->pdb, breakpoint);
+    }
 }
 
 /*
 
 =item C<void PDB_enable_breakpoint(PARROT_INTERP, const char *command)>
 
-Reenable a disabled breakpoint; if the breakpoint was not disabled, has
-no effect.
+Reenable a disabled breakpoint.
 
 =cut
 
@@ -1755,9 +1767,19 @@
     ASSERT_ARGS(PDB_enable_breakpoint)
     PDB_breakpoint_t * const breakpoint = PDB_find_breakpoint(interp, command);
 
-    /* if the breakpoint exists, and it was disabled, enable it. */
-    if (breakpoint && breakpoint->skip == -1)
-        breakpoint->skip = 0;
+    /* If there is a breakpoint and it's disabled, re-enable it.
+       If it's not disabled, tell the user. */
+
+    if (breakpoint) {
+        if (breakpoint->skip < 0) {
+            breakpoint->skip = 0;
+            display_breakpoint(interp->pdb, breakpoint);
+        }
+        else
+            Parrot_io_eprintf(interp->pdb->debugger,
+                              "Breakpoint [%d] is not disabled",
+                              breakpoint->id);
+    }
 }
 
 /*
@@ -1774,17 +1796,13 @@
 PDB_delete_breakpoint(PARROT_INTERP, ARGIN(const char *command))
 {
     ASSERT_ARGS(PDB_delete_breakpoint)
+    PDB_t *pdb = interp->pdb;
     PDB_breakpoint_t * const breakpoint = PDB_find_breakpoint(interp, command);
     const PDB_line_t *line;
     long bp_id;
 
     if (breakpoint) {
-        if (!interp->pdb->file)
-            Parrot_ex_throw_from_c_args(interp, NULL, 0, "No file loaded");
-
-        line = interp->pdb->file->line;
-        while (line->opcode != breakpoint->pc)
-            line = line->next;
+        display_breakpoint(pdb, breakpoint);
 
         /* Delete the condition structure, if there is one */
         if (breakpoint->condition) {
@@ -1802,16 +1820,16 @@
         }
         else if (!breakpoint->prev && breakpoint->next) {
             breakpoint->next->prev  = NULL;
-            interp->pdb->breakpoint = breakpoint->next;
+            pdb->breakpoint = breakpoint->next;
         }
         else {
-            interp->pdb->breakpoint = NULL;
+            pdb->breakpoint = NULL;
         }
-        bp_id = breakpoint->id;
+
         /* Kill the breakpoint */
         mem_gc_free(interp, breakpoint);
 
-        Parrot_io_eprintf(interp->pdb->debugger, "Breakpoint %li deleted\n", bp_id);
+        Parrot_io_eprintf(pdb->debugger, "Deleted\n");
     }
 }
 
@@ -1890,7 +1908,7 @@
     /* Remove the RUNNING state */
     pdb->state &= ~PDB_RUNNING;
 
-    Parrot_io_eprintf(pdb->debugger, "Program exited.\n");
+    Parrot_io_eprintf(pdb->debugger, "[program exited]\n");
     return 1;
 }
 
@@ -2094,6 +2112,8 @@
 
         /* Add the STOPPED state and stop */
         pdb->state |= PDB_STOPPED;
+        Parrot_io_eprintf(pdb->debugger, "Stop at ");
+        display_breakpoint(pdb, breakpoint);
         return 1;
     }
 
@@ -2256,6 +2276,7 @@
     int         j;
     size_t     size = 0;
     int        specialop = 0;
+    op_lib_t  *core_ops = PARROT_GET_CORE_OPLIB(interp);
 
     /* Write the opcode name */
     const char * p = full_name ? info->full_name : info->name;
@@ -2452,15 +2473,15 @@
        one fixed parameter (the signature vector), plus a varying number of
        registers/constants.  For each arg/return, we show the register and its
        flags using PIR syntax. */
-    if (OPCODE_IS(interp, interp->code, *(op), PARROT_OP_set_args_pc)
-    ||  OPCODE_IS(interp, interp->code, *(op), PARROT_OP_set_returns_pc))
+    if (OPCODE_IS(interp, interp->code, *(op), core_ops, PARROT_OP_set_args_pc)
+    ||  OPCODE_IS(interp, interp->code, *(op), core_ops, PARROT_OP_set_returns_pc))
         specialop = 1;
 
     /* if it's a retrieving op, specialop = 2, so that later a :flat flag
      * can be changed into a :slurpy flag. See flag handling below.
      */
-    if (OPCODE_IS(interp, interp->code, *(op), PARROT_OP_get_results_pc)
-    ||  OPCODE_IS(interp, interp->code, *(op), PARROT_OP_get_params_pc))
+    if (OPCODE_IS(interp, interp->code, *(op), core_ops, PARROT_OP_get_results_pc)
+    ||  OPCODE_IS(interp, interp->code, *(op), core_ops, PARROT_OP_get_params_pc))
         specialop = 2;
 
     if (specialop > 0) {
@@ -2607,14 +2628,17 @@
         ADD_OP_VAR_PART(interp, interp->code, pc, n);
         pc += n;
 
-        /* Prepare for next line */
-        newline              = mem_gc_allocate_zeroed_typed(interp, PDB_line_t);
-        newline->label       = NULL;
-        newline->next        = NULL;
-        newline->number      = pline->number + 1;
-        pline->next          = newline;
-        pline                = newline;
-        pline->source_offset = pfile->size;
+        /* Prepare for next line unless there will be no next line. */
+
+        if (pc < code_end) {
+            newline              = mem_gc_allocate_zeroed_typed(interp, PDB_line_t);
+            newline->label       = NULL;
+            newline->next        = NULL;
+            newline->number      = pline->number + 1;
+            pline->next          = newline;
+            pline                = newline;
+            pline->source_offset = pfile->size;
+        }
     }
 
     /* Add labels to the lines they belong to */
@@ -2751,107 +2775,131 @@
 
 */
 
+#define DEBUG_SOURCE_BUFFER_CHUNK 1024
+
 PARROT_EXPORT
 void
 PDB_load_source(PARROT_INTERP, ARGIN(const char *command))
 {
     ASSERT_ARGS(PDB_load_source)
-    FILE          *file;
-    char           f[DEBUG_CMD_BUFFER_LENGTH + 1];
-    int            i, j, c;
-    PDB_file_t    *pfile;
-    PDB_line_t    *pline;
-    PDB_t         * const pdb = interp->pdb;
-    opcode_t      *pc         = interp->code->base.data;
 
-    unsigned long  size = 0;
+    PDB_t * const pdb = interp->pdb;
+    char file_spec[DEBUG_CMD_BUFFER_LENGTH+1];
+    FILE *file_desc;
+    PDB_file_t *dfile;
+    PDB_line_t *dline,
+               *prev_dline = NULL;
+    size_t buffer_size;
+    ptrdiff_t start_offset;
+    int line = 0;
+    opcode_t *PC = interp->code->base.data;
+    int ci, i, ch;
 
     TRACEDEB_MSG("PDB_load_source");
 
-    /* If there was a file already loaded or the bytecode was
-       disassembled, free it */
+    /* Free any previous source lines. */
+
     if (pdb->file) {
-        PDB_free_file(interp->pdb->debugee, interp->pdb->debugee->pdb->file);
-        interp->pdb->debugee->pdb->file = NULL;
+        PDB_free_file(pdb->debugee, pdb->debugee->pdb->file);
+        pdb->debugee->pdb->file = NULL;
     }
 
-    /* Get the name of the file */
-    for (j = 0; command[j] == ' '; ++j)
-        continue;
-    for (i = 0; command[j]; ++i, ++j)
-        f[i] = command[j];
+    /* Get the source file specification. */
 
-    f[i] = '\0';
+    for (ci = 0; command[ci] == ' '; ++ci) ;
+    for (i = 0; command[ci]; ++i, ++ci)
+        file_spec[i] = command[ci];
+    file_spec[i] = '\0';
 
-    /* open the file */
-    file = fopen(f, "r");
+    /* Open the file for reading. */
 
-    /* abort if fopen failed */
-    if (!file) {
-        Parrot_io_eprintf(pdb->debugger, "Unable to load '%s'\n", f);
+    file_desc = fopen(file_spec, "r");
+    if (!file_desc) {
+        Parrot_io_eprintf(pdb->debugger, "Cannot open '%s' for reading\n",
+                                         file_spec);
         return;
     }
 
-    pfile = mem_gc_allocate_zeroed_typed(interp, PDB_file_t);
-    pline = mem_gc_allocate_zeroed_typed(interp, PDB_line_t);
+    /* Allocate a file block and the source buffer. */
 
-    pfile->source = mem_gc_allocate_n_typed(interp, 1024, char);
-    pfile->line   = pline;
-    pline->number = 1;
+    dfile = mem_gc_allocate_zeroed_typed(interp, PDB_file_t);
+    dfile->source = mem_gc_allocate_n_typed(interp, DEBUG_SOURCE_BUFFER_CHUNK,
+                                                    char);
+    buffer_size = DEBUG_SOURCE_BUFFER_CHUNK;
 
-    PARROT_ASSERT(interp->code);
-    PARROT_ASSERT(interp->code->op_info_table);
-    PARROT_ASSERT(pc);
-
-    while ((c = fgetc(file)) != EOF) {
-        /* Grow it */
-        if (++size == 1024) {
-            pfile->source = mem_gc_realloc_n_typed(interp, pfile->source,
-                                            (size_t)pfile->size + 1024, char);
-            size = 0;
-        }
-        pfile->source[pfile->size] = (char)c;
-
-        ++pfile->size;
-
-        if (c == '\n') {
-            /* If the line has an opcode move to the next one,
-               otherwise leave it with NULL to skip it. */
-            PDB_line_t *newline = mem_gc_allocate_zeroed_typed(interp, PDB_line_t);
-
-            if (PDB_hasinstruction(pfile->source + pline->source_offset)) {
-                size_t n      = interp->code->op_info_table[*pc]->op_count;
-                pline->opcode = pc;
-                ADD_OP_VAR_PART(interp, interp->code, pc, n);
-                pc           += n;
+    /* Load the source lines. */
 
-                /* don't walk off the end of the program into neverland */
-                if (pc >= interp->code->base.data + interp->code->base.size)
-                    break;
+    do {
+
+        /* Load characters until a newline or EOF is found. If the source
+           buffer fills up, extend it. */
+
+        start_offset = dfile->size;
+        do {
+            ch = fgetc(file_desc);
+            if (ch == EOF)
+                break;
+            dfile->source[dfile->size] = (char)ch;
+            if (++dfile->size >= buffer_size) {
+                buffer_size += DEBUG_SOURCE_BUFFER_CHUNK;
+                dfile->source = mem_gc_realloc_n_typed(interp,
+                                                       dfile->source,
+                                                       buffer_size,
+                                                       char);
             }
+        } while (ch != '\n');
 
-            newline->number      = pline->number + 1;
-            pline->next          = newline;
-            pline                = newline;
-            pline->source_offset = pfile->size;
-            pline->opcode        = NULL;
-            pline->label         = NULL;
+        /* We're done at EOF unless the last line didn't end with a newline. */
+
+        if (ch == EOF && (dfile->size == 0 || dfile->source[dfile->size-1] == '\n'))
+            break;
+
+        if (ch == EOF) {
+            dfile->source[dfile->size++] = '\n';
+            Parrot_io_eprintf(pdb->debugger,
+                              "(Newline appended to last line of file)\n");
         }
-    }
 
-    fclose(file);
+        /* Allocate a line block and store information about the line.
+           Attempt to match the line with its opcode PC (does not work). */
 
-    pdb->state |= PDB_SRC_LOADED;
-    pdb->file   = pfile;
+        dline = mem_gc_allocate_zeroed_typed(interp, PDB_line_t);
+        dline->source_offset = start_offset;
+        dline->number        = ++line;
+        if (PDB_hasinstruction(dfile->source + start_offset)) {
+            if (PC < interp->code->base.data + interp->code->base.size) {
+                size_t n = interp->code->op_info_table[*PC]->op_count;
+                dline->opcode = PC;
+                ADD_OP_VAR_PART(interp, interp->code, PC, n);
+                PC += n;
+            }
+        }
+
+        /* Chain the line onto the file block or previous line. */
+
+        if (prev_dline)
+            prev_dline->next = dline;
+        else
+            dfile->line = dline;
+        prev_dline = dline;
 
-    TRACEDEB_MSG("PDB_load_source finished");
+    } while (ch != EOF);
+
+    /* Close the source file, mark the file loaded, and line the file
+       block onto the PDB structure. */
+
+    fclose(file_desc);
+
+    pdb->state |= PDB_SRC_LOADED;
+    pdb->file   = dfile;
 }
 
 /*
 
 =item C<char PDB_hasinstruction(const char *c)>
 
-Return true if the line has an instruction.
+Return true if the line has an instruction. This test does not provide
+the ability to match source lines with opcode PCs.
 
 =cut
 
@@ -2977,7 +3025,7 @@
 
 =item C<void PDB_list(PARROT_INTERP, const char *command)>
 
-Show lines from the source code file.
+Display lines from the source code file.
 
 =cut
 
@@ -2987,59 +3035,72 @@
 PDB_list(PARROT_INTERP, ARGIN(const char *command))
 {
     ASSERT_ARGS(PDB_list)
-    char          *c;
-    unsigned long  line_number;
-    unsigned long  i;
-    PDB_line_t    *line;
     PDB_t         *pdb = interp->pdb;
-    unsigned long  n   = 10;
+    unsigned long start_line;
+    unsigned long line_count;
+    PDB_line_t    *line;
+    unsigned long i;
+    char          *ch;
 
     TRACEDEB_MSG("PDB_list");
+
+    /* Make sure the source file has been loaded. Get the starting
+       line and the number of lines from the command. Quit if zero
+       lines requested. */
+
     if (!pdb->file || !pdb->file->line) {
         Parrot_io_eprintf(pdb->debugger, "No source file loaded\n");
         return;
     }
 
-    /* set the list line if provided */
-    line_number = get_ulong(&command, 0);
-    pdb->file->list_line = (unsigned long) line_number;
+    start_line = get_ulong(&command, 1);
+    pdb->file->list_line = (unsigned long) start_line;
 
-    /* set the number of lines to print */
-    n = get_ulong(&command, 10);
+    line_count = get_ulong(&command, 20);
 
-    /* if n is zero, we simply return, as we don't have to print anything */
-    if (n == 0)
+    if (line_count == 0) {
+        Parrot_io_eprintf(pdb->debugger, "Zero lines were requested");
         return;
+    }
 
-    line = pdb->file->line;
+    /* Run down the line list to the starting line. Quit if the
+       starting line number is too high. */
 
-    for (i = 0; i < pdb->file->list_line && line->next; ++i)
+    for (i = 1, line = pdb->file->line;
+         i < pdb->file->list_line && line->next;
+         ++i)
         line = line->next;
 
-    i = 1;
-    while (line->next) {
-        Parrot_io_eprintf(pdb->debugger, "%li  ", pdb->file->list_line + i);
-        /* If it has a label print it */
-        if (line->label)
-            Parrot_io_eprintf(pdb->debugger, "L%li:\t", line->label->number);
+    if (i < start_line) {
+        Parrot_io_eprintf(pdb->debugger, "Starting line %d not in file\n",
+                                         start_line);
+        return;
+    }
+
+    /* Run down the lines to be displayed. Include the PC, line number,
+       and line text. Quit if we run out of lines. */
+
+    for (i = 0; i < line_count; ++i) {
+        if (line->opcode)
+            Parrot_io_eprintf(pdb->debugger, "%04d  ",
+                              line->opcode - pdb->debugee->code->base.data);
+        else
+            Parrot_io_eprintf(pdb->debugger, "      ");
 
-        c = pdb->file->source + line->source_offset;
+        Parrot_io_eprintf(pdb->debugger, "%4li  ", line->number);
 
-        while (*c != '\n')
-            Parrot_io_eprintf(pdb->debugger, "%c", *(c++));
+        for (ch = pdb->file->source + line->source_offset; *ch != '\n'; ++ch)
+            Parrot_io_eprintf(pdb->debugger, "%c", *ch);
 
         Parrot_io_eprintf(pdb->debugger, "\n");
 
         line = line->next;
-
-        if (i++ == n)
-            break;
+        if (!line) break;
     }
 
-    if (--i != n)
-        pdb->file->list_line = 0;
-    else
-        pdb->file->list_line += n;
+    /* Let the user know if there are any more lines. */
+
+    Parrot_io_eprintf(pdb->debugger, (line) ? "[more]\n" : "[end]\n");
 }
 
 /*
@@ -3107,31 +3168,29 @@
     Parrot_Interp itdeb = interp->pdb ? interp->pdb->debugger : interp;
     Parrot_Interp itp = interp->pdb ? interp->pdb->debugee : interp;
 
-    Parrot_io_eprintf(itdeb, "Total memory allocated = %ld\n",
+    Parrot_io_eprintf(itdeb, "Total memory allocated: %ld\n",
             interpinfo(itp, TOTAL_MEM_ALLOC));
-    Parrot_io_eprintf(itdeb, "GC mark runs = %ld\n",
+    Parrot_io_eprintf(itdeb, "GC mark runs: %ld\n",
             interpinfo(itp, GC_MARK_RUNS));
-    Parrot_io_eprintf(itdeb, "Lazy gc mark runs = %ld\n",
+    Parrot_io_eprintf(itdeb, "Lazy gc mark runs: %ld\n",
             interpinfo(itp, GC_LAZY_MARK_RUNS));
-    Parrot_io_eprintf(itdeb, "GC collect runs = %ld\n",
+    Parrot_io_eprintf(itdeb, "GC collect runs: %ld\n",
             interpinfo(itp, GC_COLLECT_RUNS));
-    Parrot_io_eprintf(itdeb, "Collect memory = %ld\n",
+    Parrot_io_eprintf(itdeb, "Collect memory: %ld\n",
             interpinfo(itp, TOTAL_COPIED));
-    Parrot_io_eprintf(itdeb, "Active PMCs = %ld\n",
+    Parrot_io_eprintf(itdeb, "Active PMCs: %ld\n",
             interpinfo(itp, ACTIVE_PMCS));
-    Parrot_io_eprintf(itdeb, "Extended PMCs = %ld\n",
-            interpinfo(itp, EXTENDED_PMCS));
-    Parrot_io_eprintf(itdeb, "Timely GC PMCs = %ld\n",
+    Parrot_io_eprintf(itdeb, "Timely GC PMCs: %ld\n",
             interpinfo(itp, IMPATIENT_PMCS));
-    Parrot_io_eprintf(itdeb, "Total PMCs = %ld\n",
+    Parrot_io_eprintf(itdeb, "Total PMCs: %ld\n",
             interpinfo(itp, TOTAL_PMCS));
-    Parrot_io_eprintf(itdeb, "Active buffers = %ld\n",
+    Parrot_io_eprintf(itdeb, "Active buffers: %ld\n",
             interpinfo(itp, ACTIVE_BUFFERS));
-    Parrot_io_eprintf(itdeb, "Total buffers = %ld\n",
+    Parrot_io_eprintf(itdeb, "Total buffers: %ld\n",
             interpinfo(itp, TOTAL_BUFFERS));
-    Parrot_io_eprintf(itdeb, "Header allocations since last collect = %ld\n",
+    Parrot_io_eprintf(itdeb, "Header allocations since last collect: %ld\n",
             interpinfo(itp, HEADER_ALLOCS_SINCE_COLLECT));
-    Parrot_io_eprintf(itdeb, "Memory allocations since last collect = %ld\n",
+    Parrot_io_eprintf(itdeb, "Memory allocations since last collect: %ld\n",
             interpinfo(itp, MEM_ALLOCS_SINCE_COLLECT));
 }
 
@@ -3165,7 +3224,7 @@
             for (i= 0; i < sizeof (DebCmdList) / sizeof (DebuggerCmdList); ++i) {
                 const DebuggerCmdList *cmdlist = DebCmdList + i;
                 Parrot_io_eprintf(interp->pdb->debugger,
-                    "    %-12s-- %s\n", cmdlist->name, cmdlist->cmd->shorthelp);
+                    "   %-12s  %s\n", cmdlist->name, cmdlist->cmd->shorthelp);
             }
             Parrot_io_eprintf(interp->pdb->debugger, "\n"
 "Type \"help\" followed by a command name for full documentation.\n\n");
@@ -3420,6 +3479,37 @@
 
 /*
 
+=item C<static void display_breakpoint(PDB_t *pdb, const PDB_breakpoint_t
+*breakpoint)>
+
+Displays a breakpoint.
+
+=cut
+
+*/
+
+static void
+display_breakpoint(ARGIN(PDB_t *pdb), ARGIN(const PDB_breakpoint_t *breakpoint))
+{
+    ASSERT_ARGS(display_breakpoint)
+
+    /* Display the breakpoint id, PC, line number (if known),
+       and disabled flag. */
+
+    Parrot_io_eprintf(pdb->debugger,
+                      "[%d] breakpoint at PC %04d",
+                      breakpoint->id,
+                      breakpoint->pc - pdb->debugee->code->base.data);
+    if (breakpoint->line)
+        Parrot_io_eprintf(pdb->debugger, ", line %d", breakpoint->line);
+    if (breakpoint->skip < 0)
+        Parrot_io_eprintf(pdb->debugger, "  (DISABLED)");
+    Parrot_io_eprintf(pdb->debugger, "\n");
+}
+
+
+/*
+
 =back
 
 =head1 SEE ALSO
@@ -3451,7 +3541,6 @@
 
 */
 
-
 /*
  * Local variables:
  *   c-file-style: "parrot"

Modified: branches/html_cleanup/src/dynext.c
==============================================================================
--- branches/html_cleanup/src/dynext.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/dynext.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -282,6 +282,8 @@
             Parrot_warn(interp, PARROT_WARNINGS_DYNEXT_FLAG,
                         "Couldn't dlopen(NULL): %s\n",
                         err ? err : "unknown reason");
+            /* clear the error memory */
+            (void)Parrot_dlerror();
             return NULL;
         }
     }
@@ -307,6 +309,8 @@
                     Parrot_warn(interp, PARROT_WARNINGS_DYNEXT_FLAG,
                                 "Couldn't load '%Ss': %s\n",
                             full_name, err ? err : "unknown reason");
+                    /* clear the error memory */
+                    (void)Parrot_dlerror();
                     return NULL;
                 }
             }
@@ -372,6 +376,9 @@
         Parrot_warn(interp, PARROT_WARNINGS_DYNEXT_FLAG,
                     "Couldn't load '%Ss': %s\n",
                     lib, err ? err : "unknown reason");
+
+        /* clear the error memory */
+        (void)Parrot_dlerror();
         return NULL;
     }
 }
@@ -477,12 +484,6 @@
     Parrot_pcc_set_namespace(interp, context,
             Parrot_get_HLL_namespace(interp, parrot_hll_id));
 
-    /*
-     * work around gcc 3.3.3 and other problem with dynpmcs
-     * something during library loading doesn't stand a GC run
-     */
-    Parrot_block_GC_mark(interp);
-
     if (lib_name) {
         STRING * const load_name       = Parrot_sprintf_c(interp,
                                         "Parrot_lib_%Ss_load", lib_name);
@@ -517,9 +518,6 @@
     /* remember lib_pmc in iglobals */
     store_lib_pmc(interp, lib_pmc, wo_ext, type, lib_name);
 
-    /* UNLOCK */
-    Parrot_unblock_GC_mark(interp);
-
     Parrot_pop_context(interp);
 
     return lib_pmc;
@@ -531,8 +529,7 @@
 =item C<static STRING * clone_string_into(Interp *d, Interp *s, PMC *value)>
 
 Extracts a STRING value from PMC C<value> in interpreter C<s>. Copies that
-string into the pool of interpreter C<d> using the default encoding
-and charset.
+string into the pool of interpreter C<d> using the default encoding.
 
 =cut
 
@@ -548,7 +545,7 @@
     char   * const  raw_str = Parrot_str_to_cstring(s, orig);
     STRING * const  ret     =
         Parrot_str_new_init(d, raw_str, strlen(raw_str),
-            PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET,
+            Parrot_default_encoding_ptr,
             PObj_constant_FLAG);
     Parrot_str_free_cstring(raw_str);
     return ret;

Modified: branches/html_cleanup/src/dynoplibs/sys.ops
==============================================================================
--- branches/html_cleanup/src/dynoplibs/sys.ops	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/dynoplibs/sys.ops	Wed Sep 22 03:35:47 2010	(r49232)
@@ -203,7 +203,8 @@
         {
             struct utsname info;
             if (uname(&info) == 0) {
-                $1 = string_make(interp, info.version, strlen(info.version), "ascii", 0);
+                $1 = Parrot_str_new_init(interp, info.version, strlen(info.version),
+                        Parrot_ascii_encoding_ptr, 0);
             }
         }
         break;
@@ -212,14 +213,16 @@
         {
             struct utsname info;
             if (uname(&info) == 0) {
-                $1 = string_make(interp, info.release, strlen(info.version), "ascii", 0);
+                $1 = Parrot_str_new_init(interp, info.release, strlen(info.version),
+                        Parrot_ascii_encoding_ptr, 0);
             }
         }
         break;
 #endif
 
       case CPU_ARCH:
-        $1 = string_make(interp, PARROT_CPU_ARCH, sizeof (PARROT_CPU_ARCH) - 1, "ascii", 0);
+        $1 = Parrot_str_new_init(interp, PARROT_CPU_ARCH, sizeof (PARROT_CPU_ARCH) - 1,
+                Parrot_ascii_encoding_ptr, 0);
         break;
 
       case CPU_TYPE:

Modified: branches/html_cleanup/src/dynpmc/Defines.in
==============================================================================
--- branches/html_cleanup/src/dynpmc/Defines.in	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/dynpmc/Defines.in	Wed Sep 22 03:35:47 2010	(r49232)
@@ -24,7 +24,6 @@
     include/parrot/caches.h \
     include/parrot/call.h \
     include/parrot/cclass.h \
-    include/parrot/charset.h \
     include/parrot/compiler.h \
     include/parrot/config.h \
     include/parrot/context.h \

Modified: branches/html_cleanup/src/dynpmc/Rules.in
==============================================================================
--- branches/html_cleanup/src/dynpmc/Rules.in	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/dynpmc/Rules.in	Wed Sep 22 03:35:47 2010	(r49232)
@@ -78,8 +78,12 @@
 
 src/dynpmc/pmc_gziphandle.h : src/dynpmc/gziphandle.c
 
-src/dynpmc/gziphandle$(O): src/dynpmc/gziphandle.c $(DYNPMC_H_FILES) \
-    src/dynpmc/pmc_gziphandle.h include/pmc/pmc_fixedintegerarray.h
+src/dynpmc/gziphandle$(O): \
+    src/dynpmc/gziphandle.c \
+    $(DYNPMC_H_FILES) \
+    src/dynpmc/pmc_gziphandle.h \
+    include/pmc/pmc_handle.h \
+    include/pmc/pmc_fixedintegerarray.h
 
 src/dynpmc/gziphandle.c: src/dynpmc/gziphandle.dump
 	$(PMC2CC) src/dynpmc/gziphandle.pmc

Modified: branches/html_cleanup/src/dynpmc/gziphandle.pmc
==============================================================================
--- branches/html_cleanup/src/dynpmc/gziphandle.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/dynpmc/gziphandle.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -216,21 +216,6 @@
 
 /*
 
-=item C<METHOD is_tty()>
-
-GzipHandles are never tty's, returns false.
-
-=cut
-
-*/
-    METHOD is_tty() {
-        Parrot_warn_deprecated(INTERP,
-            "'is_tty' is deprecated, use 'isatty' instead - TT #1689");
-        RETURN(INTVAL 0);
-    }
-
-/*
-
 =back
 
 =head2 Basic Methods

Modified: branches/html_cleanup/src/embed.c
==============================================================================
--- branches/html_cleanup/src/embed.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/embed.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -25,6 +25,7 @@
 #include "pmc/pmc_sub.h"
 #include "pmc/pmc_callcontext.h"
 #include "parrot/runcore_api.h"
+#include "parrot/oplib/core_ops.h"
 
 #include "../compilers/imcc/imc.h"
 
@@ -427,8 +428,8 @@
         program_size = 0;
     }
     else {
-        STRING * const fs = string_make(interp, fullname, strlen(fullname),
-            NULL, 0);
+        STRING * const fs = Parrot_str_new_init(interp, fullname, strlen(fullname),
+            Parrot_default_encoding_ptr, 0);
 
         /* can't read a file that doesn't exist */
         if (!Parrot_stat_info_intval(interp, fs, STAT_EXISTS)) {
@@ -658,9 +659,8 @@
 
     for (i = 0; i < argc; ++i) {
         /* Run through argv, adding everything to @ARGS. */
-        STRING * const arg =
-            string_make(interp, argv[i], strlen(argv[i]), "unicode",
-                PObj_external_FLAG);
+        STRING * const arg = Parrot_str_new_init(interp, argv[i], strlen(argv[i]),
+                Parrot_utf8_encoding_ptr, PObj_external_FLAG);
 
         if (Interp_debug_TEST(interp, PARROT_START_DEBUG_FLAG))
             Parrot_io_eprintf(interp, "\t%vd: %s\n", i, argv[i]);
@@ -1078,6 +1078,7 @@
 Parrot_run_native(PARROT_INTERP, native_func_t func)
 {
     ASSERT_ARGS(Parrot_run_native)
+    op_lib_t *core_ops  = PARROT_GET_CORE_OPLIB(interp);
     PackFile * const pf = PackFile_new(interp, 0);
     static opcode_t program_code[2] = {
         0, /* enternative */
@@ -1085,8 +1086,8 @@
     };
 
     static op_func_t op_func_table[2];
-    op_func_table[0] = interp->op_func_table[ interp->op_lib->op_code(interp, "enternative", 0) ];
-    op_func_table[1] = interp->op_func_table[ interp->op_lib->op_code(interp, "end", 0) ];
+    op_func_table[0] = core_ops->op_func_table[PARROT_OP_enternative];
+    op_func_table[1] = core_ops->op_func_table[PARROT_OP_end];
 
 
     pf->cur_cs = (PackFile_ByteCode *)

Modified: branches/html_cleanup/src/exceptions.c
==============================================================================
--- branches/html_cleanup/src/exceptions.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/exceptions.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -94,52 +94,68 @@
 die_from_exception(PARROT_INTERP, ARGIN(PMC *exception))
 {
     ASSERT_ARGS(die_from_exception)
-    STRING * const message     = VTABLE_get_string(interp, exception);
+    /* Avoid anyhting that can throw if we are already throwing from
+     * a previous call to this function */
+    static int already_dying = 0;
+
+    STRING * const message     = already_dying ? STRINGNULL :
+            VTABLE_get_string(interp, exception);
     INTVAL         exit_status = 1;
-    const INTVAL   severity    = VTABLE_get_integer_keyed_str(interp, exception, CONST_STRING(interp, "severity"));
+    const INTVAL   severity    = already_dying ? EXCEPT_fatal :
+            VTABLE_get_integer_keyed_str(interp, exception, CONST_STRING(interp, "severity"));
 
-    /* In some cases we have a fatal exception before the IO system
-     * is completely initialized. Do some attempt to output the
-     * message to stderr, to help diagnosing. */
-    int use_perr = !PMC_IS_NULL(Parrot_io_STDERR(interp));
-
-    /* flush interpreter output to get things printed in order */
-    if (!PMC_IS_NULL(Parrot_io_STDOUT(interp)))
-        Parrot_io_flush(interp, Parrot_io_STDOUT(interp));
-    if (use_perr)
-        Parrot_io_flush(interp, Parrot_io_STDERR(interp));
-
-    if (interp->pdb) {
-        Interp * interpdeb = interp->pdb->debugger;
-        if (interpdeb) {
-            Parrot_io_flush(interpdeb, Parrot_io_STDOUT(interpdeb));
-            Parrot_io_flush(interpdeb, Parrot_io_STDERR(interpdeb));
-        }
-    }
 
-    if (Parrot_str_not_equal(interp, message, CONST_STRING(interp, ""))) {
+    if (already_dying) {
+        fflush(stderr);
+        fprintf(stderr, "\n***FATAL ERROR: "
+                "Exception thrown while dying from previous unhandled Exception\n");
+    }
+    else {
+        /* In some cases we have a fatal exception before the IO system
+         * is completely initialized. Do some attempt to output the
+         * message to stderr, to help diagnosing. */
+        int use_perr = !PMC_IS_NULL(Parrot_io_STDERR(interp));
+        already_dying = 1;
+
+        /* flush interpreter output to get things printed in order */
+        if (!PMC_IS_NULL(Parrot_io_STDOUT(interp)))
+            Parrot_io_flush(interp, Parrot_io_STDOUT(interp));
         if (use_perr)
-            Parrot_io_eprintf(interp, "%S\n", message);
+            Parrot_io_flush(interp, Parrot_io_STDERR(interp));
+
+        if (interp->pdb) {
+            Interp * interpdeb = interp->pdb->debugger;
+            if (interpdeb) {
+                Parrot_io_flush(interpdeb, Parrot_io_STDOUT(interpdeb));
+                Parrot_io_flush(interpdeb, Parrot_io_STDERR(interpdeb));
+            }
+        }
+
+        if (Parrot_str_not_equal(interp, message, CONST_STRING(interp, ""))) {
+            if (use_perr)
+                Parrot_io_eprintf(interp, "%S\n", message);
+            else {
+                char * const msg = Parrot_str_to_cstring(interp, message);
+                fflush(stderr);
+                fprintf(stderr, "\n%s\n", msg);
+                Parrot_str_free_cstring(msg);
+            }
+
+            /* caution against output swap (with PDB_backtrace) */
+            fflush(stderr);
+            PDB_backtrace(interp);
+        }
+        else if (severity == EXCEPT_exit) {
+            /* TODO: get exit status based on type */
+            exit_status = VTABLE_get_integer_keyed_str(interp, exception, CONST_STRING(interp, "exit_code"));
+        }
         else {
-            char * const msg = Parrot_str_to_cstring(interp, message);
+            Parrot_io_eprintf(interp, "No exception handler and no message\n");
+            /* caution against output swap (with PDB_backtrace) */
             fflush(stderr);
-            fprintf(stderr, "\n%s\n", msg);
-            Parrot_str_free_cstring(msg);
+            PDB_backtrace(interp);
         }
 
-        /* caution against output swap (with PDB_backtrace) */
-        fflush(stderr);
-        PDB_backtrace(interp);
-    }
-    else if (severity == EXCEPT_exit) {
-        /* TODO: get exit status based on type */
-        exit_status = VTABLE_get_integer_keyed_str(interp, exception, CONST_STRING(interp, "exit_code"));
-    }
-    else {
-        Parrot_io_eprintf(interp, "No exception handler and no message\n");
-        /* caution against output swap (with PDB_backtrace) */
-        fflush(stderr);
-        PDB_backtrace(interp);
     }
 
     /*
@@ -300,7 +316,8 @@
     STRING * const msg =
         strchr(format, '%')
             ? Parrot_vsprintf_c(interp, format, arglist)
-            : string_make(interp, format, strlen(format), NULL, 0);
+            : Parrot_str_new_init(interp, format, strlen(format),
+                    Parrot_default_encoding_ptr, 0);
 
     return Parrot_ex_build_exception(interp, EXCEPT_error, ex_type, msg);
 }

Modified: branches/html_cleanup/src/gc/alloc_resources.c
==============================================================================
--- branches/html_cleanup/src/gc/alloc_resources.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/gc/alloc_resources.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -30,26 +30,16 @@
 #define RESOURCE_DEBUG 0
 #define RESOURCE_DEBUG_SIZE 1000000
 
-#define POOL_SIZE (65536 * 2)
-
-typedef void (*compact_f) (Interp *, Memory_Pools * const, Variable_Size_Pool *);
+typedef struct string_callback_data {
+    Memory_Block *new_block;     /* A pointer to our working block */
+    char         *cur_spot;      /* Where we're currently copying to */
+} string_callback_data;
 
 /* HEADERIZER HFILE: src/gc/gc_private.h */
 
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-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__(3)
-        __attribute__nonnull__(4)
-        FUNC_MODIFIES(*mem_pools)
-        FUNC_MODIFIES(*pool);
-
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 static const char * buffer_location(PARROT_INTERP, ARGIN(const Buffer *b))
@@ -76,47 +66,7 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*dest_interp);
 
-static void free_memory_pool(ARGFREE(Variable_Size_Pool *pool));
-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)
-        FUNC_MODIFIES(*mem_pools)
-        FUNC_MODIFIES(*pool)
-        FUNC_MODIFIES(*new_block);
-
 static void free_pool(ARGFREE(Fixed_Size_Pool *pool));
-static int is_block_almost_full(ARGIN(const Memory_Block *block))
-        __attribute__nonnull__(1);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static char * move_one_buffer(PARROT_INTERP,
-    ARGIN(Memory_Block *pool),
-    ARGMOD(Buffer *old_buf),
-    ARGMOD(char *new_pool_ptr))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        __attribute__nonnull__(4)
-        FUNC_MODIFIES(*old_buf)
-        FUNC_MODIFIES(*new_pool_ptr);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-static Variable_Size_Pool * new_memory_pool(
-    size_t min_block,
-    NULLOK(compact_f compact));
-
-PARROT_CANNOT_RETURN_NULL
-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),
     ARGMOD(Fixed_Size_Pool *dest),
@@ -148,10 +98,6 @@
         FUNC_MODIFIES(*mem_pools)
         FUNC_MODIFIES(*pool);
 
-#define ASSERT_ARGS_alloc_new_block __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(mem_pools) \
-    , PARROT_ASSERT_ARG(pool) \
-    , PARROT_ASSERT_ARG(why))
 #define ASSERT_ARGS_buffer_location __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(b))
@@ -167,22 +113,7 @@
 #define ASSERT_ARGS_fix_pmc_syncs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(dest_interp) \
     , 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(mem_pools) \
-    , PARROT_ASSERT_ARG(pool) \
-    , PARROT_ASSERT_ARG(new_block))
 #define ASSERT_ARGS_free_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_is_block_almost_full __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(block))
-#define ASSERT_ARGS_move_one_buffer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(pool) \
-    , PARROT_ASSERT_ARG(old_buf) \
-    , 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(pool))
 #define ASSERT_ARGS_Parrot_gc_merge_buffer_pools __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(mem_pools) \
@@ -201,165 +132,6 @@
 
 /*
 
-=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
-pool. The given C<char *why> text is used for debugging.
-
-=cut
-
-*/
-
-static void
-alloc_new_block(
-        ARGMOD(Memory_Pools *mem_pools),
-        size_t size,
-        ARGMOD(Variable_Size_Pool *pool),
-        ARGIN(const char *why))
-{
-    ASSERT_ARGS(alloc_new_block)
-    Memory_Block *new_block;
-
-    const size_t alloc_size = (size > pool->minimum_block_size)
-            ? size : pool->minimum_block_size;
-
-#if RESOURCE_DEBUG
-    fprintf(stderr, "new_block (%s) size %u -> %u\n",
-        why, size, alloc_size);
-#else
-    UNUSED(why)
-#endif
-
-    /* Allocate a new block. Header info's on the front */
-    new_block = (Memory_Block *)mem_internal_allocate_zeroed(
-        sizeof (Memory_Block) + alloc_size);
-
-    if (!new_block) {
-        fprintf(stderr, "out of mem allocsize = %d\n", (int)alloc_size);
-        exit(EXIT_FAILURE);
-    }
-
-    new_block->free  = alloc_size;
-    new_block->size  = alloc_size;
-
-    new_block->next  = NULL;
-    new_block->start = (char *)new_block + sizeof (Memory_Block);
-    new_block->top   = new_block->start;
-
-    /* Note that we've allocated it */
-    mem_pools->memory_allocated += alloc_size;
-
-    /* If this is for a public pool, add it to the list */
-    new_block->prev = pool->top_block;
-
-    /* If we're not first, then tack us on the list */
-    if (pool->top_block)
-        pool->top_block->next = new_block;
-
-    pool->top_block        = new_block;
-    pool->total_allocated += alloc_size;
-}
-
-/*
-
-=item C<void * mem_allocate(PARROT_INTERP, Memory_Pools *mem_pools, size_t size,
-Variable_Size_Pool *pool)>
-
-Allocates memory for headers.
-
-Alignment problems history:
-
-See L<http://archive.develooper.com/perl6-internals%40perl.org/msg12310.html>
-for details.
-
-- return aligned pointer *if needed*
-- return strings et al at unaligned i.e. void* boundaries
-- remember alignment in a buffer header bit
-  use this in compaction code
-- reduce alignment to a reasonable value i.e. MALLOC_ALIGNMENT
-  aka 2*sizeof (size_t) or just 8 (TODO make a config hint)
-
-See pobj.h for a discussion of the Buffer descriptor and the buffer itself,
-including its header.
-
-=cut
-
-*/
-
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-void *
-mem_allocate(PARROT_INTERP,
-        ARGMOD(Memory_Pools *mem_pools),
-        size_t size,
-        ARGMOD(Variable_Size_Pool *pool))
-{
-    ASSERT_ARGS(mem_allocate)
-    void *return_val;
-
-    /* we always should have one block at least */
-    PARROT_ASSERT(pool->top_block);
-
-    /* If not enough room, try to find some */
-    if (pool->top_block->free < size) {
-        /*
-         * force a GC mark run to get live flags set
-         * for incremental M&S collection is run from there
-         * but only if there may be something worth collecting!
-         * TODO pass required allocation size to the GC system,
-         *      so that collection can be skipped if needed
-         */
-        size_t new_mem = mem_pools->memory_used -
-                         mem_pools->mem_used_last_collect;
-        if (!mem_pools->gc_mark_block_level
-            && new_mem > (mem_pools->mem_used_last_collect >> 2)
-            && new_mem > GC_SIZE_THRESHOLD) {
-            Parrot_gc_mark_and_sweep(interp, GC_trace_stack_FLAG);
-
-            if (interp->gc_sys->sys_type != INF) {
-                /* Compact the pool if allowed and worthwhile */
-                if (pool->compact) {
-                    /* don't bother reclaiming if it's only a small amount */
-                    if ((pool->possibly_reclaimable * pool->reclaim_factor +
-                         pool->guaranteed_reclaimable) > size) {
-                        (*pool->compact) (interp, mem_pools, pool);
-                    }
-                }
-            }
-        }
-        if (pool->top_block->free < size) {
-            if (pool->minimum_block_size < 65536 * 16)
-                pool->minimum_block_size *= 2;
-            /*
-             * TODO - Big blocks
-             *
-             * Mark the block as big block (it has just one item)
-             * And don't set big blocks as the top_block.
-             */
-            alloc_new_block(mem_pools, size, pool, "compact failed");
-
-            ++mem_pools->mem_allocs_since_last_collect;
-
-            if (pool->top_block->free < size) {
-                fprintf(stderr, "out of mem\n");
-                exit(EXIT_FAILURE);
-            }
-        }
-    }
-
-    /* TODO inline the fast path */
-    return_val             = pool->top_block->top;
-    pool->top_block->top  += size;
-    pool->top_block->free -= size;
-    mem_pools->memory_used += size;
-
-    return return_val;
-}
-
-/*
-
 =item C<static const char * buffer_location(PARROT_INTERP, const Buffer *b)>
 
 Recturns a constant string representing the location of the given
@@ -398,6 +170,7 @@
 =item C<static void debug_print_buf(PARROT_INTERP, const Buffer *b)>
 
 Prints a debug statement with information about the given PObj C<b>.
+
 =cut
 
 */
@@ -416,456 +189,10 @@
 
 =back
 
-=head2 Compaction Code
-
-=over 4
-
-=item C<void compact_pool(PARROT_INTERP, Memory_Pools *mem_pools,
-Variable_Size_Pool *pool)>
-
-Compact the string buffer pool. Does not perform a GC scan, or mark items
-as being alive in any way.
-
-=cut
-
-*/
-
-void
-compact_pool(PARROT_INTERP,
-        ARGMOD(Memory_Pools *mem_pools),
-        ARGMOD(Variable_Size_Pool *pool))
-{
-    ASSERT_ARGS(compact_pool)
-    INTVAL        j;
-    UINTVAL       total_size;
-
-    Memory_Block *new_block;     /* A pointer to our working block */
-    char         *cur_spot;      /* Where we're currently copying to */
-
-    Fixed_Size_Arena *cur_buffer_arena;
-
-    /* Bail if we're blocked */
-    if (mem_pools->gc_sweep_block_level)
-        return;
-
-    ++mem_pools->gc_sweep_block_level;
-
-    /* We're collecting */
-    mem_pools->mem_allocs_since_last_collect    = 0;
-    mem_pools->header_allocs_since_last_collect = 0;
-    ++mem_pools->gc_collect_runs;
-
-    /* Snag a block big enough for everything */
-    total_size = pad_pool_size(pool);
-
-    if (total_size == 0) {
-        free_old_mem_blocks(mem_pools, pool, pool->top_block, total_size);
-        --mem_pools->gc_sweep_block_level;
-        return;
-    }
-
-    alloc_new_block(mem_pools, total_size, pool, "inside compact");
-
-    new_block = pool->top_block;
-
-    /* Start at the beginning */
-    cur_spot  = new_block->start;
-
-    /* Run through all the Buffer header pools and copy */
-    for (j = (INTVAL)mem_pools->num_sized - 1; j >= 0; --j) {
-        Fixed_Size_Pool * const header_pool = mem_pools->sized_header_pools[j];
-        UINTVAL       object_size;
-
-        if (!header_pool)
-            continue;
-
-        object_size = header_pool->object_size;
-
-        for (cur_buffer_arena = header_pool->last_Arena;
-                cur_buffer_arena;
-                cur_buffer_arena = cur_buffer_arena->prev) {
-            Buffer *b = (Buffer *) cur_buffer_arena->start_objects;
-            UINTVAL i;
-            const size_t objects_end = cur_buffer_arena->used;
-
-            for (i = objects_end; i; --i) {
-
-                if (Buffer_buflen(b) && PObj_is_movable_TESTALL(b)) {
-                    Memory_Block *old_block = Buffer_pool(b);
-
-                    if (!is_block_almost_full(old_block))
-                        cur_spot = move_one_buffer(interp, new_block, b, cur_spot);
-                }
-
-                b = (Buffer *)((char *)b + object_size);
-            }
-        }
-    }
-
-    /* Okay, we're done with the copy. Set the bits in the pool struct */
-    /* First, where we allocate next */
-    new_block->top = cur_spot;
-
-    PARROT_ASSERT(new_block->size >= (size_t)new_block->top -
-            (size_t)new_block->start);
-
-    /* How much is free. That's the total size minus the amount we used */
-    new_block->free = new_block->size - (cur_spot - new_block->start);
-    mem_pools->memory_collected +=      (cur_spot - new_block->start);
-    mem_pools->memory_used      +=      (cur_spot - new_block->start);
-
-    free_old_mem_blocks(mem_pools, pool, new_block, total_size);
-
-    --mem_pools->gc_sweep_block_level;
-}
-
-/*
-
-=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
-we can avoid having to allocate it in the future.
-
-Returns 0 if all blocks below the top block are almost full. In this case
-compacting is not needed.
-
-TODO - Big blocks
-
-Currently all available blocks are compacted into one new
-block with total_size. This is suboptimal, if the block has
-just one live item from a big allocation.
-
-But currently it's unknown if the buffer memory is alive
-as the live bits are in Buffer headers. We have to run the
-compaction loop to check liveness. OTOH if this compaction
-is running through all the buffer headers, there is no
-relation to the block.
-
-Moving the live bit into the buffer thus also solves this
-problem easily.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static UINTVAL
-pad_pool_size(ARGIN(const Variable_Size_Pool *pool))
-{
-    ASSERT_ARGS(pad_pool_size)
-    Memory_Block *cur_block = pool->top_block->prev;
-
-    UINTVAL total_size   = 0;
-#if RESOURCE_DEBUG
-    size_t  total_blocks = 1;
-#endif
-
-    while (cur_block) {
-        if (!is_block_almost_full(cur_block))
-            total_size += cur_block->size - cur_block->freed - cur_block->free;
-        cur_block   = cur_block->prev;
-#if RESOURCE_DEBUG
-        ++total_blocks;
-#endif
-    }
-
-    if (total_size == 0)
-        return 0;
-
-    cur_block = pool->top_block;
-    if (!is_block_almost_full(cur_block))
-        total_size += cur_block->size - cur_block->freed - cur_block->free;
-
-    /* this makes for ever increasing allocations but fewer collect runs */
-#if WE_WANT_EVER_GROWING_ALLOCATIONS
-    total_size += pool->minimum_block_size;
-#endif
-
-#if RESOURCE_DEBUG
-    fprintf(stderr, "Total blocks: %d\n", total_blocks);
-#endif
-
-    return total_size;
-}
-
-/*
-
-=item C<static char * move_one_buffer(PARROT_INTERP, Memory_Block *pool, Buffer
-*old_buf, char *new_pool_ptr)>
-
-The compact_pool operation collects disjointed blocks of memory allocated on a
-given pool's free list into one large block of memory. Once the new larger
-memory block has been allocated, this function moves one buffer from the old
-memory block to the new memory block and marks that it has been moved.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static char *
-move_one_buffer(PARROT_INTERP, ARGIN(Memory_Block *pool),
-        ARGMOD(Buffer *old_buf), ARGMOD(char *new_pool_ptr))
-{
-    ASSERT_ARGS(move_one_buffer)
-
-    INTVAL       *flags     = NULL;
-    ptrdiff_t     offset    = 0;
-    Memory_Block *old_block = NULL;
-#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
-        * strstart might be in unallocated memory */
-    if (PObj_is_COWable_TEST(old_buf)) {
-        flags = Buffer_bufflagsptr(old_buf);
-        old_block = Buffer_pool(old_buf);
-
-        if (PObj_is_string_TEST(old_buf)) {
-            offset = (ptrdiff_t)((STRING *)old_buf)->strstart -
-                (ptrdiff_t)Buffer_bufstart(old_buf);
-        }
-    }
-
-    /* buffer has already been moved; just change the header */
-    if (flags && (*flags & Buffer_shared_FLAG)
-              && (*flags & Buffer_moved_FLAG)) {
-        /* Find out who else references our data */
-        Buffer * const hdr = *((Buffer **)Buffer_bufstart(old_buf));
-
-        PARROT_ASSERT(PObj_is_COWable_TEST(old_buf));
-
-        /* Make sure they know that we own it too */
-        /* Set Buffer_shared_FLAG in new buffer */
-        *Buffer_bufflagsptr(hdr) |= Buffer_shared_FLAG;
-
-        /* Now make sure we point to where the other guy does */
-        Buffer_bufstart(old_buf) = Buffer_bufstart(hdr);
-
-        /* And if we're a string, update strstart */
-        /* Somewhat of a hack, but if we get per-pool
-            * collections, it should help ease the pain */
-        if (PObj_is_string_TEST(old_buf))
-            ((STRING *)old_buf)->strstart =
-                (char *)Buffer_bufstart(old_buf) + offset;
-    }
-    else {
-        new_pool_ptr = aligned_mem(old_buf, new_pool_ptr);
-
-        /* Copy our memory to the new pool */
-        memcpy(new_pool_ptr, Buffer_bufstart(old_buf),
-                                Buffer_buflen(old_buf));
-
-        /* If we're shared */
-        if (flags && (*flags & Buffer_shared_FLAG)) {
-            PARROT_ASSERT(PObj_is_COWable_TEST(old_buf));
-
-            /* Let the old buffer know how to find us */
-            *((Buffer **)Buffer_bufstart(old_buf)) = old_buf;
-
-            /* Finally, let the tail know that we've moved, so
-                * that any other references can know to look for
-                * us and not re-copy */
-            *flags |= Buffer_moved_FLAG;
-        }
-
-        Buffer_bufstart(old_buf) = new_pool_ptr;
-
-        /* Remember new pool inside */
-        *Buffer_poolptr(old_buf) = pool;
-
-        if (PObj_is_string_TEST(old_buf))
-            ((STRING *)old_buf)->strstart =
-                    (char *)Buffer_bufstart(old_buf) + offset;
-
-        new_pool_ptr += Buffer_buflen(old_buf);
-    }
-
-    return new_pool_ptr;
-}
-
-/*
-
-=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
-given pool's free list into one large block of memory, setting it as the new
-top block for the pool. Once that is done, and all items have been moved into
-the new block of memory, this function iterates through the old blocks and
-frees each one. It also performs the necessary housekeeping to record the
-freed memory blocks. At the end of this function, the pool will have only one
-block of memory on its free list.
-
-=cut
-
-*/
-
-static void
-free_old_mem_blocks(
-        ARGMOD(Memory_Pools *mem_pools),
-        ARGMOD(Variable_Size_Pool *pool),
-        ARGMOD(Memory_Block *new_block),
-        UINTVAL total_size)
-{
-    ASSERT_ARGS(free_old_mem_blocks)
-    Memory_Block *prev_block = new_block;
-    Memory_Block *cur_block  = new_block->prev;
-
-    PARROT_ASSERT(new_block == pool->top_block);
-
-    while (cur_block) {
-        Memory_Block * const next_block = cur_block->prev;
-
-        if (is_block_almost_full(cur_block)) {
-            /* Skip block */
-            prev_block = cur_block;
-            cur_block  = next_block;
-        }
-        else {
-            /* Note that we don't have it any more */
-            mem_pools->memory_allocated -= cur_block->size;
-            mem_pools->memory_used -= cur_block->size - cur_block->free;
-
-            /* We know the pool body and pool header are a single chunk, so
-             * this is enough to get rid of 'em both */
-            mem_internal_free(cur_block);
-            cur_block        = next_block;
-
-            /* Unlink it from list */
-            prev_block->prev = next_block;
-        }
-    }
-
-    /* Terminate list */
-    prev_block->prev = NULL;
-
-
-    /* ANR: I suspect this should be set to new_block->size, instead of passing
-     * in the raw value of total_size, because alloc_new_block pads the size of
-     * the new block under certain conditions. Leaving it unmodified for now,
-     * so this refactor has no functionality changes, only code cleanups.*/
-    pool->total_allocated        = total_size;
-    pool->guaranteed_reclaimable = 0;
-    pool->possibly_reclaimable   = 0;
-}
-
-/*
-
-=item C<static int is_block_almost_full(const Memory_Block *block)>
-
-Tests if the block is almost full and should be skipped during compacting.
-
-Returns true if less that 20% of block is available
-
-=cut
-
-*/
-
-static int
-is_block_almost_full(ARGIN(const Memory_Block *block))
-{
-    ASSERT_ARGS(is_block_almost_full)
-    return 5 * (block->free + block->freed) < block->size;
-}
-
-/*
-
-=item C<char * aligned_mem(const Buffer *buffer, char *mem)>
-
-Returns a pointer to the aligned allocated storage for Buffer C<buffer>,
-which might not be the same as the pointer to C<buffer> because of
-memory alignment.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-char *
-aligned_mem(SHIM(const Buffer *buffer), ARGIN(char *mem))
-{
-    ASSERT_ARGS(aligned_mem)
-    mem += sizeof (void *);
-    mem  = (char *)(((unsigned long)(mem + WORD_ALIGN_1)) & WORD_ALIGN_MASK);
-
-    return mem;
-}
-
-/*
-
-=back
-
 =head2 Parrot Re/Allocate Code
 
 =over 4
 
-=item C<static Variable_Size_Pool * new_memory_pool(size_t min_block, compact_f
-compact)>
-
-Allocate a new C<Variable_Size_Pool> structures, and set some initial values.
-return a pointer to the new pool.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-static Variable_Size_Pool *
-new_memory_pool(size_t min_block, NULLOK(compact_f compact))
-{
-    ASSERT_ARGS(new_memory_pool)
-    Variable_Size_Pool * const pool = mem_internal_allocate_typed(Variable_Size_Pool);
-
-    pool->top_block              = NULL;
-    pool->compact                = compact;
-    pool->minimum_block_size     = min_block;
-    pool->total_allocated        = 0;
-    pool->guaranteed_reclaimable = 0;
-    pool->possibly_reclaimable   = 0;
-    pool->reclaim_factor         = RECLAMATION_FACTOR;
-
-    return pool;
-}
-
-/*
-
-=item C<void initialize_var_size_pools(PARROT_INTERP, Memory_Pools *mem_pools)>
-
-Initialize the managed memory pools. Parrot maintains two C<Variable_Size_Pool>
-structures, the general memory pool and the constant string pool. Create
-and initialize both pool structures, and allocate initial blocks of memory
-for both.
-
-=cut
-
-*/
-
-void
-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(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(mem_pools, POOL_SIZE, mem_pools->constant_string_pool, "init");
-}
-
-
-/*
-
 =item C<void merge_pools(Variable_Size_Pool *dest, Variable_Size_Pool *source)>
 
 Merge two memory pools together. Do this by moving all memory blocks
@@ -925,8 +252,9 @@
     ASSERT_ARGS(check_memory_system)
     size_t i;
 
-    check_var_size_obj_pool(mem_pools->memory_pool);
-    check_var_size_obj_pool(mem_pools->constant_string_pool);
+    check_var_size_obj_pool(mem_pools->string_gc.memory_pool);
+    check_var_size_obj_pool(mem_pools->string_gc.constant_string_pool);
+
     check_fixed_size_obj_pool(mem_pools->pmc_pool);
     check_fixed_size_obj_pool(mem_pools->constant_pmc_pool);
     check_fixed_size_obj_pool(mem_pools->string_header_pool);
@@ -987,10 +315,6 @@
                     PARROT_ASSERT(PObj_on_free_list_TEST((PObj*)pobj_walker));
                 }
             }
-            else if (pool->mem_pool != NULL) {
-                /*then it means we are a buffer*/
-                check_buffer_ptr((Buffer*)object, pool->mem_pool);
-            }
             object = (PObj*)((char *)object + pool->object_size);
             PARROT_ASSERT(--count);
         }
@@ -1249,54 +573,6 @@
 }
 
 
-/*
-
-=item C<static void free_memory_pool(Variable_Size_Pool *pool)>
-
-Frees a memory pool; helper function for C<Parrot_gc_destroy_memory_pools>.
-
-=cut
-
-*/
-
-static void
-free_memory_pool(ARGFREE(Variable_Size_Pool *pool))
-{
-    ASSERT_ARGS(free_memory_pool)
-
-    Memory_Block *cur_block = pool->top_block;
-
-    while (cur_block) {
-        Memory_Block * const next_block = cur_block->prev;
-        mem_internal_free(cur_block);
-        cur_block = next_block;
-    }
-
-    mem_internal_free(pool);
-}
-
-
-/*
-
-=item C<void Parrot_gc_destroy_memory_pools(PARROT_INTERP, Memory_Pools
-*mem_pools)>
-
-Destroys the memory pool and the constant string pool. Loop through both
-pools and destroy all memory blocks contained in them. Once all the
-blocks are freed, free the pools themselves.
-
-=cut
-
-*/
-
-void
-Parrot_gc_destroy_memory_pools(SHIM_INTERP, ARGMOD(Memory_Pools *mem_pools))
-{
-    ASSERT_ARGS(Parrot_gc_destroy_memory_pools)
-
-    free_memory_pool(mem_pools->constant_string_pool);
-    free_memory_pool(mem_pools->memory_pool);
-}
 
 /*
 

Modified: branches/html_cleanup/src/gc/gc_ms.c
==============================================================================
--- branches/html_cleanup/src/gc/gc_ms.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/gc/gc_ms.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -61,13 +61,6 @@
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*pool);
 
-static void gc_ms_allocate_buffer_storage(PARROT_INTERP,
-    ARGOUT(Buffer *buffer),
-    size_t size)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*buffer);
-
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 static Buffer * gc_ms_allocate_bufferlike_header(PARROT_INTERP, size_t size)
@@ -162,6 +155,11 @@
 static unsigned int gc_ms_is_blocked_GC_sweep(PARROT_INTERP)
         __attribute__nonnull__(1);
 
+static void gc_ms_iterate_live_strings(PARROT_INTERP,
+    string_iterator_callback callback,
+    ARGIN_NULLOK(void *data))
+        __attribute__nonnull__(1);
+
 static void gc_ms_mark_and_sweep(PARROT_INTERP, UINTVAL flags)
         __attribute__nonnull__(1);
 
@@ -181,13 +179,6 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*pool);
 
-static void gc_ms_reallocate_buffer_storage(PARROT_INTERP,
-    ARGMOD(Buffer *buffer),
-    size_t newsize)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*buffer);
-
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
 static void * gc_ms_reallocate_memory_chunk(SHIM_INTERP,
@@ -201,13 +192,6 @@
     size_t newsize,
     size_t oldsize);
 
-static void gc_ms_reallocate_string_storage(PARROT_INTERP,
-    ARGMOD(STRING *str),
-    size_t newsize)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*str);
-
 static int gc_ms_sweep_cb(PARROT_INTERP,
     ARGIN(Memory_Pools *mem_pools),
     ARGMOD(Fixed_Size_Pool *pool),
@@ -275,9 +259,6 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(mem_pools) \
     , PARROT_ASSERT_ARG(pool))
-#define ASSERT_ARGS_gc_ms_allocate_buffer_storage __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(buffer))
 #define ASSERT_ARGS_gc_ms_allocate_bufferlike_header \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
@@ -327,6 +308,8 @@
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_gc_ms_is_blocked_GC_sweep __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_gc_ms_iterate_live_strings __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_gc_ms_mark_and_sweep __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_gc_ms_mark_special __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -338,17 +321,9 @@
     , PARROT_ASSERT_ARG(pool))
 #define ASSERT_ARGS_gc_ms_pool_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(pool))
-#define ASSERT_ARGS_gc_ms_reallocate_buffer_storage \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(buffer))
 #define ASSERT_ARGS_gc_ms_reallocate_memory_chunk __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_ms_reallocate_memory_chunk_zeroed \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_gc_ms_reallocate_string_storage \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(str))
 #define ASSERT_ARGS_gc_ms_sweep_cb __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(mem_pools) \
@@ -428,10 +403,10 @@
     interp->gc_sys->allocate_pmc_attributes = gc_ms_allocate_pmc_attributes;
     interp->gc_sys->free_pmc_attributes     = gc_ms_free_pmc_attributes;
 
-    interp->gc_sys->allocate_string_storage = gc_ms_allocate_string_storage;
+    interp->gc_sys->allocate_string_storage   = gc_ms_allocate_string_storage;
     interp->gc_sys->reallocate_string_storage = gc_ms_reallocate_string_storage;
 
-    interp->gc_sys->allocate_buffer_storage = gc_ms_allocate_buffer_storage;
+    interp->gc_sys->allocate_buffer_storage   = gc_ms_allocate_buffer_storage;
     interp->gc_sys->reallocate_buffer_storage = gc_ms_reallocate_buffer_storage;
 
     interp->gc_sys->allocate_fixed_size_storage = gc_ms_allocate_fixed_size_storage;
@@ -456,7 +431,9 @@
 
     interp->gc_sys->get_gc_info      = gc_ms_get_gc_info;
 
-    initialize_var_size_pools(interp, interp->mem_pools);
+    interp->gc_sys->iterate_live_strings = gc_ms_iterate_live_strings;
+
+    Parrot_gc_str_initialize(interp, &interp->mem_pools->string_gc);
     initialize_fixed_size_pools(interp, interp->mem_pools);
     Parrot_gc_initialize_fixed_size_pools(interp, interp->mem_pools,
                                           GC_NUM_INITIAL_FIXED_SIZE_POOLS);
@@ -480,7 +457,7 @@
     Parrot_gc_destroy_header_pools(interp, interp->mem_pools);
 
     /* memory pools in resources */
-    Parrot_gc_destroy_memory_pools(interp, interp->mem_pools);
+    Parrot_gc_str_finalize(interp, &interp->mem_pools->string_gc);
 
     /* mem subsystem is dead now */
     mem_internal_free(interp->mem_pools);
@@ -509,6 +486,48 @@
     Memory_Pools * const source_arena = source_interp->mem_pools;
     Parrot_gc_merge_memory_pools(dest_interp, dest_arena, source_arena);
 }
+
+/*
+
+=item C<int Parrot_gc_ms_needed(PARROT_INTERP)>
+
+Determines whether a GC run is needed. The decision is based on the amount
+of memory used since the last GC run. This amount is compared to a static
+and a dynamic threshold. The dynamic threshold roughly limits the memory
+wasted by objects that could be freed but are not yet collected to a
+percentage of total memory that is actually needed.
+
+Increasing the dynamic threshold results in fewer GC runs and more memory
+consumption.
+
+=cut
+
+*/
+
+int
+Parrot_gc_ms_needed(PARROT_INTERP)
+{
+    ASSERT_ARGS(Parrot_gc_ms_needed)
+
+    const Memory_Pools * const mem_pools = interp->mem_pools;
+    size_t dynamic_threshold;
+
+    /* new_mem is the additional amount of memory used since the last GC */
+    size_t new_mem = mem_pools->memory_used
+                   - mem_pools->mem_used_last_collect;
+
+    /* Never run a GC if new_mem is below static GC_SIZE_THRESHOLD */
+    if (new_mem <= GC_SIZE_THRESHOLD)
+        return 0;
+
+    /* The dynamic threshold is a configurable percentage of the amount of
+       memory used after the last GC */
+    dynamic_threshold = (size_t)(mem_pools->mem_used_last_collect *
+                                 (0.01 * interp->gc_threshold));
+
+    return new_mem > dynamic_threshold;
+}
+
 /*
 
 =item C<static void gc_ms_mark_and_sweep(PARROT_INTERP, UINTVAL flags)>
@@ -597,7 +616,54 @@
 gc_ms_compact_memory_pool(PARROT_INTERP)
 {
     ASSERT_ARGS(gc_ms_compact_memory_pool)
-    compact_pool(interp, interp->mem_pools, interp->mem_pools->memory_pool);
+    Parrot_gc_str_compact_pool(interp, &interp->mem_pools->string_gc);
+}
+
+/*
+
+=item C<void gc_ms_allocate_string_storage(PARROT_INTERP, STRING *str, size_t
+size)>
+
+=item C<void gc_ms_reallocate_string_storage(PARROT_INTERP, STRING *str, size_t
+size)>
+
+=item C<void gc_ms_allocate_buffer_storage(PARROT_INTERP, Buffer *str, size_t
+size)>
+
+=item C<void gc_ms_reallocate_buffer_storage(PARROT_INTERP, Buffer *str, size_t
+size)>
+
+Functions for allocating strings/buffers storage.
+
+=cut
+*/
+
+void
+gc_ms_allocate_string_storage(PARROT_INTERP, ARGIN(STRING *str), size_t size)
+{
+    ASSERT_ARGS(gc_ms_allocate_string_storage)
+    Parrot_gc_str_allocate_string_storage(interp, &interp->mem_pools->string_gc, str, size);
+}
+
+void
+gc_ms_reallocate_string_storage(PARROT_INTERP, ARGIN(STRING *str), size_t size)
+{
+    ASSERT_ARGS(gc_ms_reallocate_string_storage)
+    Parrot_gc_str_reallocate_string_storage(interp, &interp->mem_pools->string_gc, str, size);
+}
+
+void
+gc_ms_allocate_buffer_storage(PARROT_INTERP, ARGIN(Buffer *str), size_t size)
+{
+    ASSERT_ARGS(gc_ms_allocate_buffer_storage)
+    Parrot_gc_str_allocate_buffer_storage(interp, &interp->mem_pools->string_gc, str, size);
+}
+
+void
+gc_ms_reallocate_buffer_storage(PARROT_INTERP, ARGIN(Buffer *str), size_t size)
+{
+    ASSERT_ARGS(gc_ms_reallocate_buffer_storage)
+    Parrot_gc_str_reallocate_buffer_storage(interp, &interp->mem_pools->string_gc, str, size);
 }
 
 /*
@@ -1077,233 +1143,6 @@
 
 /*
 
-=item C<static void gc_ms_allocate_buffer_storage(PARROT_INTERP, Buffer *buffer,
-size_t size)>
-
-Allocates a chunk of memory of at least size C<size> for the given Buffer.
-buffer is guaranteed to be properly aligned for things like C<FLOATVALS>,
-so the size may be rounded up or down to guarantee that this alignment holds.
-
-=cut
-
-*/
-
-static void
-gc_ms_allocate_buffer_storage(PARROT_INTERP,
-    ARGOUT(Buffer *buffer), size_t size)
-{
-    ASSERT_ARGS(gc_ms_allocate_buffer_storage)
-    const size_t new_size   = ALIGNED_STRING_SIZE(size);
-
-    Buffer_bufstart(buffer) = (void *)aligned_mem(buffer,
-        (char *)mem_allocate(interp,
-        interp->mem_pools, new_size, interp->mem_pools->memory_pool));
-
-    /* Save pool used to allocate into buffer header */
-    *Buffer_poolptr(buffer) = interp->mem_pools->memory_pool->top_block;
-
-    Buffer_buflen(buffer)   = new_size - sizeof (void *);
-}
-
-/*
-
-=item C<static void gc_ms_reallocate_buffer_storage(PARROT_INTERP, Buffer
-*buffer, size_t newsize)>
-
-Reallocate the Buffer's buffer memory to the given size. The
-allocated buffer will not shrink. If the buffer was allocated with
-L<Parrot_allocate_aligned> the new buffer will also be aligned. As with
-all reallocation, the new buffer might have moved and the additional
-memory is not cleared.
-
-=cut
-
-*/
-
-static void
-gc_ms_reallocate_buffer_storage(PARROT_INTERP, ARGMOD(Buffer *buffer),
-    size_t newsize)
-{
-    ASSERT_ARGS(gc_ms_reallocate_buffer_storage)
-    size_t copysize;
-    char  *mem;
-    Variable_Size_Pool * const pool = interp->mem_pools->memory_pool;
-    size_t new_size, needed, old_size;
-
-    /* we don't shrink buffers */
-    if (newsize <= Buffer_buflen(buffer))
-        return;
-
-    /*
-     * same as below but barely used and tested - only 3 list related
-     * tests do use true reallocation
-     *
-     * list.c, which does _reallocate, has 2 reallocations
-     * normally, which play ping pong with buffers.
-     * The normal case is therefore always to allocate a new block
-     */
-    new_size = ALIGNED_STRING_SIZE(newsize);
-    old_size = ALIGNED_STRING_SIZE(Buffer_buflen(buffer));
-    needed   = new_size - old_size;
-
-    if ((pool->top_block->free >= needed)
-    &&  (pool->top_block->top  == (char *)Buffer_bufstart(buffer) + old_size)) {
-        pool->top_block->free -= needed;
-        pool->top_block->top  += needed;
-        interp->mem_pools->memory_used += needed;
-        Buffer_buflen(buffer)  = newsize;
-        return;
-    }
-
-    copysize = Buffer_buflen(buffer);
-
-    mem = (char *)mem_allocate(interp, interp->mem_pools, new_size, pool);
-    mem = aligned_mem(buffer, mem);
-
-    /* We shouldn't ever have a 0 from size, but we do. If we can track down
-     * those bugs, this can be removed which would make things cheaper */
-    if (copysize)
-        memcpy(mem, Buffer_bufstart(buffer), copysize);
-
-    Buffer_bufstart(buffer) = mem;
-
-    new_size -= sizeof (void *);
-
-    Buffer_buflen(buffer) = new_size;
-
-    /* Save pool used to allocate into buffer header */
-    *Buffer_poolptr(buffer) = interp->mem_pools->memory_pool->top_block;
-}
-
-/*
-
-=item C<void gc_ms_allocate_string_storage(PARROT_INTERP, STRING *str, size_t
-size)>
-
-Allocate the STRING's buffer memory to the given size. The allocated
-buffer maybe slightly bigger than the given C<size>. This function
-sets also C<< str->strstart >> to the new buffer location, C<< str->bufused >>
-is B<not> changed.
-
-=cut
-
-*/
-
-void
-gc_ms_allocate_string_storage(PARROT_INTERP, ARGOUT(STRING *str),
-    size_t size)
-{
-    ASSERT_ARGS(gc_ms_allocate_string_storage)
-    size_t       new_size;
-    Variable_Size_Pool *pool;
-    char        *mem;
-
-    Buffer_buflen(str)   = 0;
-    Buffer_bufstart(str) = NULL;
-
-    if (size == 0)
-        return;
-
-    pool     = PObj_constant_TEST(str)
-                ? interp->mem_pools->constant_string_pool
-                : interp->mem_pools->memory_pool;
-
-    new_size = ALIGNED_STRING_SIZE(size);
-    mem      = (char *)mem_allocate(interp, interp->mem_pools, new_size, pool);
-    mem     += sizeof (void *);
-
-    Buffer_bufstart(str) = str->strstart = mem;
-    Buffer_buflen(str)   = new_size - sizeof (void *);
-
-    /* Save pool used to allocate into buffer header */
-    *Buffer_poolptr(str) = pool->top_block;
-}
-
-/*
-
-=item C<static void gc_ms_reallocate_string_storage(PARROT_INTERP, STRING *str,
-size_t newsize)>
-
-Reallocate the STRING's buffer memory to the given size. The allocated
-buffer will not shrink. This function sets also C<str-E<gt>strstart> to the
-new buffer location, C<str-E<gt>bufused> is B<not> changed.
-
-=cut
-
-*/
-
-static void
-gc_ms_reallocate_string_storage(PARROT_INTERP, ARGMOD(STRING *str),
-    size_t newsize)
-{
-    ASSERT_ARGS(gc_ms_reallocate_string_storage)
-    size_t copysize;
-    char *mem, *oldmem;
-    size_t new_size, needed, old_size;
-
-    Variable_Size_Pool * const pool =
-        PObj_constant_TEST(str)
-            ? interp->mem_pools->constant_string_pool
-            : interp->mem_pools->memory_pool;
-
-    /* if the requested size is smaller then buflen, we are done */
-    if (newsize <= Buffer_buflen(str))
-        return;
-
-    /*
-     * first check, if we can reallocate:
-     * - if the passed strings buffer is the last string in the pool and
-     * - if there is enough size, we can just move the pool's top pointer
-     */
-    new_size = ALIGNED_STRING_SIZE(newsize);
-    old_size = ALIGNED_STRING_SIZE(Buffer_buflen(str));
-    needed   = new_size - old_size;
-
-    if (pool->top_block->free >= needed
-    &&  pool->top_block->top  == (char *)Buffer_bufstart(str) + old_size) {
-        pool->top_block->free -= needed;
-        pool->top_block->top  += needed;
-        interp->mem_pools->memory_used += needed;
-        Buffer_buflen(str) = new_size - sizeof (void *);
-        return;
-    }
-
-    PARROT_ASSERT(str->bufused <= newsize);
-
-    /* only copy used memory, not total string buffer */
-    copysize = str->bufused;
-
-    mem = (char *)mem_allocate(interp, interp->mem_pools, new_size, pool);
-    mem += sizeof (void *);
-
-    /* Update Memory_Block usage */
-    /* We must not reallocate non-movable buffers! */
-    PARROT_ASSERT(PObj_is_movable_TESTALL(str));
-
-    /* We must not reallocate shared buffers! */
-    PARROT_ASSERT(!(*Buffer_bufflagsptr(str) & Buffer_shared_FLAG));
-
-    /* Decrease usage */
-    PARROT_ASSERT(Buffer_pool(str));
-    Buffer_pool(str)->freed += old_size;
-
-    /* copy mem from strstart, *not* bufstart */
-    oldmem             = str->strstart;
-    Buffer_bufstart(str) = (void *)mem;
-    str->strstart      = mem;
-    Buffer_buflen(str)   = new_size - sizeof (void *);
-
-    /* We shouldn't ever have a 0 from size, but we do. If we can track down
-     * those bugs, this can be removed which would make things cheaper */
-    if (copysize)
-        memcpy(mem, oldmem, copysize);
-
-    /* Save pool used to allocate into buffer header */
-    *Buffer_poolptr(str) = pool->top_block;
-}
-
-/*
-
 =item C<void * gc_ms_allocate_fixed_size_storage(PARROT_INTERP, size_t size)>
 
 Allocates a fixed-size chunk of memory for use. This memory is not manually
@@ -1548,15 +1387,12 @@
         ARGMOD(Fixed_Size_Pool *pool))
 {
     ASSERT_ARGS(gc_ms_more_traceable_objects)
-    size_t new_mem = mem_pools->memory_used
-                   - mem_pools->mem_used_last_collect;
 
     if (pool->skip == GC_ONE_SKIP)
         pool->skip = GC_NO_SKIP;
     else if (pool->skip == GC_NEVER_SKIP
          || (pool->skip == GC_NO_SKIP
-         && (new_mem > (mem_pools->mem_used_last_collect >> 2)
-         &&  new_mem >= GC_SIZE_THRESHOLD)))
+         &&  Parrot_gc_ms_needed(interp)))
             Parrot_gc_mark_and_sweep(interp, GC_trace_stack_FLAG);
 
     /* requires that num_free_objects be updated in Parrot_gc_mark_and_sweep.
@@ -1878,6 +1714,56 @@
 }
 
 /*
+=item C<static void gc_ms_iterate_live_strings(PARROT_INTERP,
+string_iterator_callback callback, void *data)>
+
+Iterate over live string invoking callback for each of them. Used during
+compacting of string pool.
+
+=cut
+*/
+static void
+gc_ms_iterate_live_strings(PARROT_INTERP,
+        string_iterator_callback callback,
+        ARGIN_NULLOK(void *data))
+{
+    ASSERT_ARGS(gc_ms_iterate_live_strings)
+
+    Memory_Pools * const mem_pools = interp->mem_pools;
+    INTVAL j;
+
+    /* Run through all the Buffer header pools and invoke callback */
+    for (j = (INTVAL)mem_pools->num_sized - 1; j >= 0; --j) {
+        Fixed_Size_Pool  * const header_pool = mem_pools->sized_header_pools[j];
+        Fixed_Size_Arena       * cur_buffer_arena;
+        UINTVAL       object_size;
+
+        if (!header_pool)
+            continue;
+
+        object_size = header_pool->object_size;
+
+        for (cur_buffer_arena = header_pool->last_Arena;
+                cur_buffer_arena;
+                cur_buffer_arena = cur_buffer_arena->prev) {
+            Buffer *b = (Buffer *) cur_buffer_arena->start_objects;
+            UINTVAL i;
+            const size_t objects_end = cur_buffer_arena->used;
+
+            for (i = objects_end; i; --i) {
+                if (Buffer_buflen(b) && PObj_is_movable_TESTALL(b)) {
+                    Memory_Block *old_block = Buffer_pool(b);
+                    if (5 * (old_block->free + old_block->freed) >= old_block->size)
+                        callback(interp, b, data);
+                }
+                b = (Buffer *)((char *)b + object_size);
+            }
+        }
+    }
+}
+
+
+/*
 
 =back
 

Modified: branches/html_cleanup/src/gc/gc_private.h
==============================================================================
--- branches/html_cleanup/src/gc/gc_private.h	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/gc/gc_private.h	Wed Sep 22 03:35:47 2010	(r49232)
@@ -91,6 +91,9 @@
     GC_NEVER_SKIP       /* unused */
 } gc_skip_type_enum;
 
+/* Callback for live string. Use Buffer for now... */
+typedef void (*string_iterator_callback)(PARROT_INTERP, Buffer *str, void *data);
+
 typedef struct GC_Subsystem {
     /* Which GC subsystem are we using? See PARROT_GC_DEFAULT_TYPE in
      * include/parrot/settings.h for possible values */
@@ -148,6 +151,9 @@
     /* Return by value to simplify memory management */
     size_t (*get_gc_info)(PARROT_INTERP, Interpinfo_enum);
 
+    /* Iterate over _live_ strings. Used for string pool compacting */
+    void (*iterate_live_strings)(PARROT_INTERP, string_iterator_callback callback, void *data);
+
     /*Function hooks that GC systems can CHOOSE to provide if they need them
      *These will be called via the GC API functions Parrot_gc_func_name
      *e.g. read barrier && write barrier hooks can go here later ...*/
@@ -159,6 +165,8 @@
      */
 } GC_Subsystem;
 
+
+
 /* This header structure describes a block of memory that is part of a
    variable-size pool. The allocatable memory follows the header. */
 
@@ -239,9 +247,6 @@
    hang off the Memory_Pools root structure. */
 
 typedef struct Fixed_Size_Pool {
-
-    struct Variable_Size_Pool *mem_pool; /* Pointer to associated variable-size
-                                            pool, or NULL. */
     size_t object_size;                 /* Size in bytes of an individual pool
                                            object. This size may include
                                            a GC system-specific GC header. */
@@ -284,15 +289,22 @@
 
 } Fixed_Size_Pool;
 
+/* String GC subsystem data */
+typedef struct String_GC {
+    Variable_Size_Pool  *memory_pool;           /* General memory pool. */
+    Variable_Size_Pool  *constant_string_pool;  /* Constant string pool (not
+                                                   compacted */
+} String_GC;
+
 /* This structure acts as the root for all the various memory pools:
    variable-sized, fixed-size, and PMC attributes. It also contains
    various GC-related items. It hangs off the Interp structure. */
 
 typedef struct Memory_Pools {
     /* Pointers to pools */
-    Variable_Size_Pool  *memory_pool;           /* General memory pool. */
-    Variable_Size_Pool  *constant_string_pool;  /* Constant string pool (not
-                                                   compacted). */
+    String_GC            string_gc;             /* TEMPORARY */
+                                                /* String GC susbsytem pointer */
+
     Fixed_Size_Pool     *string_header_pool;    /* String header pool. */
     Fixed_Size_Pool     *pmc_pool;              /* PMC object pool. */
     Fixed_Size_Pool     *constant_pmc_pool;     /* And one for constant PMCs. */
@@ -349,10 +361,9 @@
     UINTVAL gc_sweep_block_level; /* How many outstanding GC block
                                      requests are there? */
 
-    /* private data for the GC subsystem */
-    void *gc_private;             /* GC subsystem data */
 } Memory_Pools;
 
+
 /* HEADERIZER BEGIN: src/gc/system.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
@@ -497,11 +508,6 @@
 /* HEADERIZER BEGIN: src/gc/alloc_resources.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-char * aligned_mem(SHIM(const Buffer *buffer), ARGIN(char *mem))
-        __attribute__nonnull__(2);
-
 void check_buffer_ptr(
     ARGMOD(Buffer * pobj),
     ARGMOD(Variable_Size_Pool * pool))
@@ -510,31 +516,6 @@
         FUNC_MODIFIES(* pobj)
         FUNC_MODIFIES(* pool);
 
-void compact_pool(PARROT_INTERP,
-    ARGMOD(Memory_Pools *mem_pools),
-    ARGMOD(Variable_Size_Pool *pool))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*mem_pools)
-        FUNC_MODIFIES(*pool);
-
-void initialize_var_size_pools(SHIM_INTERP, ARGMOD(Memory_Pools *mem_pools))
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*mem_pools);
-
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-void * mem_allocate(PARROT_INTERP,
-    ARGMOD(Memory_Pools *mem_pools),
-    size_t size,
-    ARGMOD(Variable_Size_Pool *pool))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(4)
-        FUNC_MODIFIES(*mem_pools)
-        FUNC_MODIFIES(*pool);
-
 void merge_pools(
     ARGMOD(Variable_Size_Pool *dest),
     ARGMOD(Variable_Size_Pool *source))
@@ -549,11 +530,6 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*mem_pools);
 
-void Parrot_gc_destroy_memory_pools(SHIM_INTERP,
-    ARGMOD(Memory_Pools *mem_pools))
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*mem_pools);
-
 void Parrot_gc_merge_memory_pools(
     ARGMOD(Interp *dest_interp),
     ARGMOD(Memory_Pools *dest_arena),
@@ -564,21 +540,9 @@
         FUNC_MODIFIES(*dest_interp)
         FUNC_MODIFIES(*dest_arena);
 
-#define ASSERT_ARGS_aligned_mem __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(mem))
 #define ASSERT_ARGS_check_buffer_ptr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(pobj) \
     , PARROT_ASSERT_ARG(pool))
-#define ASSERT_ARGS_compact_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , 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(mem_pools))
-#define ASSERT_ARGS_mem_allocate __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools) \
-    , PARROT_ASSERT_ARG(pool))
 #define ASSERT_ARGS_merge_pools __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(dest) \
     , PARROT_ASSERT_ARG(source))
@@ -586,9 +550,6 @@
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(mem_pools))
-#define ASSERT_ARGS_Parrot_gc_destroy_memory_pools \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       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) \
@@ -600,16 +561,21 @@
 /* HEADERIZER BEGIN: src/gc/gc_ms.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
+void gc_ms_allocate_buffer_storage(PARROT_INTERP,
+    ARGIN(Buffer *str),
+    size_t size)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
 PARROT_CANNOT_RETURN_NULL
 void * gc_ms_allocate_fixed_size_storage(PARROT_INTERP, size_t size)
         __attribute__nonnull__(1);
 
 void gc_ms_allocate_string_storage(PARROT_INTERP,
-    ARGOUT(STRING *str),
+    ARGIN(STRING *str),
     size_t size)
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*str);
+        __attribute__nonnull__(2);
 
 void gc_ms_compact_memory_pool(PARROT_INTERP)
         __attribute__nonnull__(1);
@@ -631,9 +597,27 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*pmc);
 
+void gc_ms_reallocate_buffer_storage(PARROT_INTERP,
+    ARGIN(Buffer *str),
+    size_t size)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void gc_ms_reallocate_string_storage(PARROT_INTERP,
+    ARGIN(STRING *str),
+    size_t size)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
 void Parrot_gc_ms_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
+int Parrot_gc_ms_needed(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_gc_ms_allocate_buffer_storage __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str))
 #define ASSERT_ARGS_gc_ms_allocate_fixed_size_storage \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
@@ -652,8 +636,18 @@
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(pmc))
+#define ASSERT_ARGS_gc_ms_reallocate_buffer_storage \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str))
+#define ASSERT_ARGS_gc_ms_reallocate_string_storage \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str))
 #define ASSERT_ARGS_Parrot_gc_ms_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_Parrot_gc_ms_needed __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/gc/gc_ms.c */
 
@@ -668,6 +662,101 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/gc/gc_inf.c */
 
+
+/* HEADERIZER BEGIN: src/gc/string_gc.c */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+void Parrot_gc_str_allocate_buffer_storage(PARROT_INTERP,
+    ARGIN(String_GC *gc),
+    ARGOUT(Buffer *buffer),
+    size_t size)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*buffer);
+
+void Parrot_gc_str_allocate_string_storage(PARROT_INTERP,
+    ARGIN(String_GC *gc),
+    ARGOUT(STRING *str),
+    size_t size)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*str);
+
+void Parrot_gc_str_compact_pool(PARROT_INTERP, ARGIN(String_GC *gc))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void Parrot_gc_str_finalize(SHIM_INTERP, ARGMOD(String_GC *gc))
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*gc);
+
+void Parrot_gc_str_free_buffer_storage(SHIM_INTERP,
+    ARGIN(String_GC *gc),
+    ARGMOD(Buffer *b))
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*b);
+
+void Parrot_gc_str_initialize(PARROT_INTERP, ARGMOD(String_GC *gc))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*gc);
+
+void Parrot_gc_str_reallocate_buffer_storage(PARROT_INTERP,
+    ARGIN(String_GC *gc),
+    ARGMOD(Buffer *buffer),
+    size_t newsize)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*buffer);
+
+void Parrot_gc_str_reallocate_string_storage(PARROT_INTERP,
+    ARGIN(String_GC *gc),
+    ARGMOD(STRING *str),
+    size_t newsize)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*str);
+
+#define ASSERT_ARGS_Parrot_gc_str_allocate_buffer_storage \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(gc) \
+    , PARROT_ASSERT_ARG(buffer))
+#define ASSERT_ARGS_Parrot_gc_str_allocate_string_storage \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(gc) \
+    , PARROT_ASSERT_ARG(str))
+#define ASSERT_ARGS_Parrot_gc_str_compact_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(gc))
+#define ASSERT_ARGS_Parrot_gc_str_finalize __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(gc))
+#define ASSERT_ARGS_Parrot_gc_str_free_buffer_storage \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(gc) \
+    , PARROT_ASSERT_ARG(b))
+#define ASSERT_ARGS_Parrot_gc_str_initialize __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(gc))
+#define ASSERT_ARGS_Parrot_gc_str_reallocate_buffer_storage \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(gc) \
+    , PARROT_ASSERT_ARG(buffer))
+#define ASSERT_ARGS_Parrot_gc_str_reallocate_string_storage \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(gc) \
+    , PARROT_ASSERT_ARG(str))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: src/gc/string_gc.c */
+
 #endif /* PARROT_GC_PRIVATE_H_GUARD */
 
 /*

Modified: branches/html_cleanup/src/gc/mark_sweep.c
==============================================================================
--- branches/html_cleanup/src/gc/mark_sweep.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/gc/mark_sweep.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -31,13 +31,13 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void free_buffer(SHIM_INTERP,
-    SHIM(Memory_Pools *mem_pools),
-    ARGMOD(Fixed_Size_Pool *pool),
+static void free_buffer(PARROT_INTERP,
+    ARGIN(Memory_Pools *mem_pools),
+    SHIM(Fixed_Size_Pool *pool),
     ARGMOD(Buffer *b))
-        __attribute__nonnull__(3)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
         __attribute__nonnull__(4)
-        FUNC_MODIFIES(*pool)
         FUNC_MODIFIES(*b);
 
 static void free_pmc_in_pool(PARROT_INTERP,
@@ -78,7 +78,8 @@
         FUNC_MODIFIES(*mem_pools);
 
 #define ASSERT_ARGS_free_buffer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(pool) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(mem_pools) \
     , PARROT_ASSERT_ARG(b))
 #define ASSERT_ARGS_free_pmc_in_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -257,10 +258,12 @@
 
     PObj               *b;
     Fixed_Size_Arena   *cur_arena;
-    gc_object_fn_type   gc_object   = pool->gc_object;
     UINTVAL             total_used  = 0;
     const UINTVAL       object_size = pool->object_size;
 
+    const gc_object_fn_type       gc_object       = pool->gc_object;
+    const add_free_object_fn_type add_free_object = pool->add_free_object;
+
     /* Run through all the PObj header pools and mark */
     for (cur_arena = pool->last_Arena; cur_arena; cur_arena = cur_arena->prev) {
         const size_t objects_end = cur_arena->used;
@@ -297,7 +300,7 @@
                 if (gc_object)
                     gc_object(interp, mem_pools, pool, b);
 
-                pool->add_free_object(interp, mem_pools, pool, b);
+                add_free_object(interp, mem_pools, pool, b);
             }
 next:
             b = (PObj *)((char *)b + object_size);
@@ -507,7 +510,6 @@
     Fixed_Size_Pool * const pmc_pool =
         new_fixed_size_obj_pool(sizeof (PMC), num_headers);
 
-    pmc_pool->mem_pool   = NULL;
     pmc_pool->gc_object  = free_pmc_in_pool;
 
     (interp->gc_sys->init_pool)(interp, pmc_pool);
@@ -572,7 +574,6 @@
 
     pool->gc_object = (gc_object_fn_type)free_buffer;
 
-    pool->mem_pool  = mem_pools->memory_pool;
     (interp->gc_sys->init_pool)(interp, pool);
     return pool;
 }
@@ -601,7 +602,6 @@
 
     pool->last_Arena        = NULL;
     pool->free_list         = NULL;
-    pool->mem_pool          = NULL;
     pool->newfree           = NULL;
     pool->newlast           = NULL;
     pool->object_size       = object_size;
@@ -632,7 +632,6 @@
     if (constant) {
         pool           = new_bufferlike_pool(interp, mem_pools, sizeof (STRING));
         pool->gc_object = NULL;
-        pool->mem_pool = mem_pools->constant_string_pool;
     }
     else
         pool = get_bufferlike_pool(interp, mem_pools, sizeof (STRING));
@@ -655,39 +654,18 @@
 */
 
 static void
-free_buffer(SHIM_INTERP,
-        SHIM(Memory_Pools *mem_pools),
-        ARGMOD(Fixed_Size_Pool *pool),
+free_buffer(PARROT_INTERP,
+        ARGIN(Memory_Pools *mem_pools),
+        SHIM(Fixed_Size_Pool *pool),
         ARGMOD(Buffer *b))
 {
     ASSERT_ARGS(free_buffer)
-    Variable_Size_Pool * const mem_pool = (Variable_Size_Pool *)pool->mem_pool;
 
     /* If there is no allocated buffer - bail out */
     if (!Buffer_buflen(b))
         return;
 
-    /* XXX Jarkko reported that on irix pool->mem_pool was NULL, which really
-     * shouldn't happen */
-    if (mem_pool) {
-        /* Update Memory_Block usage */
-        if (PObj_is_movable_TESTALL(b)) {
-            INTVAL *buffer_flags = Buffer_bufflagsptr(b);
-
-            /* Mask low 2 bits used for flags */
-            Memory_Block * block = Buffer_pool(b);
-
-            PARROT_ASSERT(block);
-
-            /* We can have shared buffers. Don't count them (yet) */
-            if (!(*buffer_flags & Buffer_shared_FLAG)) {
-                block->freed  += ALIGNED_STRING_SIZE(Buffer_buflen(b));
-            }
-
-        }
-    }
-
-    Buffer_buflen(b) = 0;
+    Parrot_gc_str_free_buffer_storage(interp, &mem_pools->string_gc, b);
 }
 
 

Copied: branches/html_cleanup/src/gc/string_gc.c (from r49200, trunk/src/gc/string_gc.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/html_cleanup/src/gc/string_gc.c	Wed Sep 22 03:35:47 2010	(r49232, copy of r49200, trunk/src/gc/string_gc.c)
@@ -0,0 +1,1191 @@
+/*
+Copyright (C) 2010, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/gc/string_gc.c - String GC subsystem.
+
+=head1 DESCRIPTION
+
+GC subsystem to manage STRINGs.
+
+=head2 Parrot Memory Management Code
+
+=over 4
+
+=cut
+
+*/
+
+#include "parrot/parrot.h"
+#include "gc_private.h"
+
+typedef void (*compact_f) (Interp *, Memory_Pools * const, Variable_Size_Pool *);
+
+#define POOL_SIZE (65536 * 2)
+
+/* show allocated blocks on stderr */
+#define RESOURCE_DEBUG 0
+#define RESOURCE_DEBUG_SIZE 1000000
+
+#define RECLAMATION_FACTOR 0.20
+#define WE_WANT_EVER_GROWING_ALLOCATIONS 0
+
+typedef struct string_callback_data {
+    Memory_Block *new_block;     /* A pointer to our working block */
+    char         *cur_spot;      /* Where we're currently copying to */
+} string_callback_data;
+
+/* HEADERIZER HFILE: src/gc/gc_private.h */
+
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static char * aligned_mem(SHIM(const Buffer *buffer), ARGIN(char *mem))
+        __attribute__nonnull__(2);
+
+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__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*mem_pools)
+        FUNC_MODIFIES(*pool);
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static const char * buffer_location(PARROT_INTERP, ARGIN(const Buffer *b))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void compact_pool(PARROT_INTERP,
+    ARGMOD(Memory_Pools *mem_pools),
+    ARGMOD(Variable_Size_Pool *pool))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*mem_pools)
+        FUNC_MODIFIES(*pool);
+
+static void debug_print_buf(PARROT_INTERP, ARGIN(const Buffer *b))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void free_memory_pool(ARGFREE(Variable_Size_Pool *pool));
+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)
+        FUNC_MODIFIES(*mem_pools)
+        FUNC_MODIFIES(*pool)
+        FUNC_MODIFIES(*new_block);
+
+static int is_block_almost_full(ARGIN(const Memory_Block *block))
+        __attribute__nonnull__(1);
+
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+static void * mem_allocate(PARROT_INTERP,
+    ARGMOD(Memory_Pools *mem_pools),
+    size_t size,
+    ARGMOD(Variable_Size_Pool *pool))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*mem_pools)
+        FUNC_MODIFIES(*pool);
+
+static void move_buffer_callback(PARROT_INTERP,
+    ARGIN(Buffer *b),
+    ARGIN(void *data))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static char * move_one_buffer(PARROT_INTERP,
+    ARGIN(Memory_Block *pool),
+    ARGMOD(Buffer *old_buf),
+    ARGMOD(char *new_pool_ptr))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*old_buf)
+        FUNC_MODIFIES(*new_pool_ptr);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+static Variable_Size_Pool * new_memory_pool(
+    size_t min_block,
+    NULLOK(compact_f compact));
+
+PARROT_CANNOT_RETURN_NULL
+static UINTVAL pad_pool_size(ARGIN(const Variable_Size_Pool *pool))
+        __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_aligned_mem __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(mem))
+#define ASSERT_ARGS_alloc_new_block __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(mem_pools) \
+    , PARROT_ASSERT_ARG(pool) \
+    , PARROT_ASSERT_ARG(why))
+#define ASSERT_ARGS_buffer_location __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(b))
+#define ASSERT_ARGS_compact_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(mem_pools) \
+    , PARROT_ASSERT_ARG(pool))
+#define ASSERT_ARGS_debug_print_buf __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(b))
+#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(mem_pools) \
+    , PARROT_ASSERT_ARG(pool) \
+    , PARROT_ASSERT_ARG(new_block))
+#define ASSERT_ARGS_is_block_almost_full __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(block))
+#define ASSERT_ARGS_mem_allocate __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(mem_pools) \
+    , PARROT_ASSERT_ARG(pool))
+#define ASSERT_ARGS_move_buffer_callback __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(b) \
+    , PARROT_ASSERT_ARG(data))
+#define ASSERT_ARGS_move_one_buffer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pool) \
+    , PARROT_ASSERT_ARG(old_buf) \
+    , 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(pool))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
+/*
+
+=item C<void Parrot_gc_str_initialize(PARROT_INTERP, String_GC *gc)>
+
+Initialize the managed memory pools. Parrot maintains two C<Variable_Size_Pool>
+structures, the general memory pool and the constant string pool. Create
+and initialize both pool structures, and allocate initial blocks of memory
+for both.
+
+=cut
+
+*/
+
+void
+Parrot_gc_str_initialize(PARROT_INTERP, ARGMOD(String_GC *gc))
+{
+    ASSERT_ARGS(Parrot_gc_str_initialize)
+
+    gc->memory_pool   = new_memory_pool(POOL_SIZE, &compact_pool);
+    alloc_new_block(interp->mem_pools, POOL_SIZE, gc->memory_pool, "init");
+
+    /* Constant strings - not compacted */
+    gc->constant_string_pool = new_memory_pool(POOL_SIZE, NULL);
+    alloc_new_block(interp->mem_pools, POOL_SIZE, gc->constant_string_pool, "init");
+}
+
+/*
+
+=item C<void Parrot_gc_str_finalize(PARROT_INTERP, String_GC *gc)>
+
+Destroys the memory pool and the constant string pool. Loop through both
+pools and destroy all memory blocks contained in them. Once all the
+blocks are freed, free the pools themselves.
+
+=cut
+
+*/
+
+void
+Parrot_gc_str_finalize(SHIM_INTERP, ARGMOD(String_GC *gc))
+{
+    ASSERT_ARGS(Parrot_gc_str_finalize)
+
+    free_memory_pool(gc->constant_string_pool);
+    free_memory_pool(gc->memory_pool);
+}
+
+/*
+
+=item C<void Parrot_gc_str_allocate_buffer_storage(PARROT_INTERP, String_GC *gc,
+Buffer *buffer, size_t size)>
+
+Allocates a chunk of memory of at least size C<size> for the given Buffer.
+buffer is guaranteed to be properly aligned for things like C<FLOATVALS>,
+so the size may be rounded up or down to guarantee that this alignment holds.
+
+=cut
+
+*/
+
+void
+Parrot_gc_str_allocate_buffer_storage(PARROT_INTERP,
+        ARGIN(String_GC *gc),
+        ARGOUT(Buffer *buffer),
+        size_t size)
+{
+    ASSERT_ARGS(Parrot_gc_str_allocate_buffer_storage)
+    const size_t new_size   = ALIGNED_STRING_SIZE(size);
+
+    Buffer_bufstart(buffer) = (void *)aligned_mem(buffer,
+        (char *)mem_allocate(interp,
+        interp->mem_pools, new_size, gc->memory_pool));
+
+    /* Save pool used to allocate into buffer header */
+    *Buffer_poolptr(buffer) = gc->memory_pool->top_block;
+
+    Buffer_buflen(buffer)   = new_size - sizeof (void *);
+}
+
+/*
+
+=item C<void Parrot_gc_str_reallocate_buffer_storage(PARROT_INTERP, String_GC
+*gc, Buffer *buffer, size_t newsize)>
+
+Reallocate the Buffer's buffer memory to the given size. The
+allocated buffer will not shrink. If the buffer was allocated with
+L<Parrot_allocate_aligned> the new buffer will also be aligned. As with
+all reallocation, the new buffer might have moved and the additional
+memory is not cleared.
+
+=cut
+
+*/
+
+void
+Parrot_gc_str_reallocate_buffer_storage(PARROT_INTERP,
+        ARGIN(String_GC *gc),
+        ARGMOD(Buffer *buffer),
+        size_t newsize)
+{
+    ASSERT_ARGS(Parrot_gc_str_reallocate_buffer_storage)
+    size_t copysize;
+    char  *mem;
+    Variable_Size_Pool * const pool = gc->memory_pool;
+    size_t new_size, needed, old_size;
+
+    /* we don't shrink buffers */
+    if (newsize <= Buffer_buflen(buffer))
+        return;
+
+    /*
+     * same as below but barely used and tested - only 3 list related
+     * tests do use true reallocation
+     *
+     * list.c, which does _reallocate, has 2 reallocations
+     * normally, which play ping pong with buffers.
+     * The normal case is therefore always to allocate a new block
+     */
+    new_size = ALIGNED_STRING_SIZE(newsize);
+    old_size = ALIGNED_STRING_SIZE(Buffer_buflen(buffer));
+    needed   = new_size - old_size;
+
+    if ((pool->top_block->free >= needed)
+    &&  (pool->top_block->top  == (char *)Buffer_bufstart(buffer) + old_size)) {
+        pool->top_block->free -= needed;
+        pool->top_block->top  += needed;
+        interp->mem_pools->memory_used += needed;
+        Buffer_buflen(buffer)  = newsize;
+        return;
+    }
+
+    copysize = Buffer_buflen(buffer);
+
+    mem = (char *)mem_allocate(interp, interp->mem_pools, new_size, pool);
+    mem = aligned_mem(buffer, mem);
+
+    /* We shouldn't ever have a 0 from size, but we do. If we can track down
+     * those bugs, this can be removed which would make things cheaper */
+    if (copysize)
+        memcpy(mem, Buffer_bufstart(buffer), copysize);
+
+    Buffer_bufstart(buffer) = mem;
+
+    new_size -= sizeof (void *);
+
+    Buffer_buflen(buffer) = new_size;
+
+    /* Save pool used to allocate into buffer header */
+    *Buffer_poolptr(buffer) = gc->memory_pool->top_block;
+}
+
+/*
+
+=item C<void Parrot_gc_str_allocate_string_storage(PARROT_INTERP, String_GC *gc,
+STRING *str, size_t size)>
+
+Allocate the STRING's buffer memory to the given size. The allocated
+buffer maybe slightly bigger than the given C<size>. This function
+sets also C<< str->strstart >> to the new buffer location, C<< str->bufused >>
+is B<not> changed.
+
+=cut
+
+*/
+
+void
+Parrot_gc_str_allocate_string_storage(PARROT_INTERP,
+        ARGIN(String_GC *gc),
+        ARGOUT(STRING *str),
+        size_t size)
+{
+    ASSERT_ARGS(Parrot_gc_str_allocate_string_storage)
+    size_t       new_size;
+    Variable_Size_Pool *pool;
+    char        *mem;
+
+    Buffer_buflen(str)   = 0;
+    Buffer_bufstart(str) = NULL;
+
+    if (size == 0)
+        return;
+
+    pool     = PObj_constant_TEST(str)
+                ? gc->constant_string_pool
+                : gc->memory_pool;
+
+    new_size = ALIGNED_STRING_SIZE(size);
+    mem      = (char *)mem_allocate(interp, interp->mem_pools, new_size, pool);
+    mem     += sizeof (void *);
+
+    Buffer_bufstart(str) = str->strstart = mem;
+    Buffer_buflen(str)   = new_size - sizeof (void *);
+
+    /* Save pool used to allocate into buffer header */
+    *Buffer_poolptr(str) = pool->top_block;
+}
+
+/*
+
+=item C<void Parrot_gc_str_reallocate_string_storage(PARROT_INTERP, String_GC
+*gc, STRING *str, size_t newsize)>
+
+Reallocate the STRING's buffer memory to the given size. The allocated
+buffer will not shrink. This function sets also C<str-E<gt>strstart> to the
+new buffer location, C<str-E<gt>bufused> is B<not> changed.
+
+=cut
+
+*/
+
+void
+Parrot_gc_str_reallocate_string_storage(PARROT_INTERP,
+        ARGIN(String_GC *gc),
+        ARGMOD(STRING *str),
+        size_t newsize)
+{
+    ASSERT_ARGS(Parrot_gc_str_reallocate_string_storage)
+    size_t copysize;
+    char *mem, *oldmem;
+    size_t new_size, needed, old_size;
+
+    Variable_Size_Pool * const pool =
+        PObj_constant_TEST(str)
+            ? gc->constant_string_pool
+            : gc->memory_pool;
+
+    /* if the requested size is smaller then buflen, we are done */
+    if (newsize <= Buffer_buflen(str))
+        return;
+
+    /*
+     * first check, if we can reallocate:
+     * - if the passed strings buffer is the last string in the pool and
+     * - if there is enough size, we can just move the pool's top pointer
+     */
+    new_size = ALIGNED_STRING_SIZE(newsize);
+    old_size = ALIGNED_STRING_SIZE(Buffer_buflen(str));
+    needed   = new_size - old_size;
+
+    if (pool->top_block->free >= needed
+    &&  pool->top_block->top  == (char *)Buffer_bufstart(str) + old_size) {
+        pool->top_block->free -= needed;
+        pool->top_block->top  += needed;
+        interp->mem_pools->memory_used += needed;
+        Buffer_buflen(str) = new_size - sizeof (void *);
+        return;
+    }
+
+    PARROT_ASSERT(str->bufused <= newsize);
+
+    /* only copy used memory, not total string buffer */
+    copysize = str->bufused;
+
+    mem = (char *)mem_allocate(interp, interp->mem_pools, new_size, pool);
+    mem += sizeof (void *);
+
+    /* Update Memory_Block usage */
+    /* We must not reallocate non-movable buffers! */
+    PARROT_ASSERT(PObj_is_movable_TESTALL(str));
+
+    /* We must not reallocate shared buffers! */
+    PARROT_ASSERT(!(*Buffer_bufflagsptr(str) & Buffer_shared_FLAG));
+
+    /* Decrease usage */
+    PARROT_ASSERT(Buffer_pool(str));
+    Buffer_pool(str)->freed += old_size;
+
+    /* copy mem from strstart, *not* bufstart */
+    oldmem             = str->strstart;
+    Buffer_bufstart(str) = (void *)mem;
+    str->strstart      = mem;
+    Buffer_buflen(str)   = new_size - sizeof (void *);
+
+    /* We shouldn't ever have a 0 from size, but we do. If we can track down
+     * those bugs, this can be removed which would make things cheaper */
+    if (copysize)
+        memcpy(mem, oldmem, copysize);
+
+    /* Save pool used to allocate into buffer header */
+    *Buffer_poolptr(str) = pool->top_block;
+}
+
+/*
+=item C<void Parrot_gc_str_compact_pool(PARROT_INTERP, String_GC *gc)>
+
+Compact string pool.
+
+=cut
+*/
+void
+Parrot_gc_str_compact_pool(PARROT_INTERP, ARGIN(String_GC *gc))
+{
+    ASSERT_ARGS(Parrot_gc_str_compact_pool)
+    compact_pool(interp, interp->mem_pools, gc->memory_pool);
+}
+
+/*
+
+=item C<void Parrot_gc_str_free_buffer_storage(PARROT_INTERP, String_GC *gc,
+Buffer *b)>
+
+Frees a buffer, returning it to the memory pool for Parrot to possibly
+reuse later.
+
+=cut
+
+*/
+
+void
+Parrot_gc_str_free_buffer_storage(SHIM_INTERP,
+        ARGIN(String_GC *gc),
+        ARGMOD(Buffer *b))
+{
+    ASSERT_ARGS(Parrot_gc_str_free_buffer_storage)
+    Variable_Size_Pool * const mem_pool = gc->memory_pool;
+
+    /* If there is no allocated buffer - bail out */
+    if (!Buffer_buflen(b))
+        return;
+
+    if (mem_pool) {
+        /* Update Memory_Block usage */
+        if (PObj_is_movable_TESTALL(b)) {
+            INTVAL *buffer_flags = Buffer_bufflagsptr(b);
+
+            /* Mask low 2 bits used for flags */
+            Memory_Block * block = Buffer_pool(b);
+
+            PARROT_ASSERT(block);
+
+            /* We can have shared buffers. Don't count them (yet) */
+            if (!(*buffer_flags & Buffer_shared_FLAG)) {
+                block->freed  += ALIGNED_STRING_SIZE(Buffer_buflen(b));
+            }
+
+        }
+    }
+
+    Buffer_buflen(b) = 0;
+}
+
+/*
+=item C<static Variable_Size_Pool * new_memory_pool(size_t min_block, compact_f
+compact)>
+
+Allocate a new C<Variable_Size_Pool> structures, and set some initial values.
+return a pointer to the new pool.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+static Variable_Size_Pool *
+new_memory_pool(size_t min_block, NULLOK(compact_f compact))
+{
+    ASSERT_ARGS(new_memory_pool)
+    Variable_Size_Pool * const pool = mem_internal_allocate_typed(Variable_Size_Pool);
+
+    pool->top_block              = NULL;
+    pool->compact                = compact;
+    pool->minimum_block_size     = min_block;
+    pool->total_allocated        = 0;
+    pool->guaranteed_reclaimable = 0;
+    pool->possibly_reclaimable   = 0;
+    pool->reclaim_factor         = RECLAMATION_FACTOR;
+
+    return pool;
+}
+
+/*
+
+=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
+pool. The given C<char *why> text is used for debugging.
+
+=cut
+
+*/
+
+static void
+alloc_new_block(
+        ARGMOD(Memory_Pools *mem_pools),
+        size_t size,
+        ARGMOD(Variable_Size_Pool *pool),
+        ARGIN(const char *why))
+{
+    ASSERT_ARGS(alloc_new_block)
+    Memory_Block *new_block;
+
+    const size_t alloc_size = (size > pool->minimum_block_size)
+            ? size : pool->minimum_block_size;
+
+#if RESOURCE_DEBUG
+    fprintf(stderr, "new_block (%s) size %u -> %u\n",
+        why, size, alloc_size);
+#else
+    UNUSED(why)
+#endif
+
+    /* Allocate a new block. Header info's on the front */
+    new_block = (Memory_Block *)mem_internal_allocate_zeroed(
+        sizeof (Memory_Block) + alloc_size);
+
+    if (!new_block) {
+        fprintf(stderr, "out of mem allocsize = %d\n", (int)alloc_size);
+        exit(EXIT_FAILURE);
+    }
+
+    new_block->free  = alloc_size;
+    new_block->size  = alloc_size;
+
+    new_block->next  = NULL;
+    new_block->start = (char *)new_block + sizeof (Memory_Block);
+    new_block->top   = new_block->start;
+
+    /* Note that we've allocated it */
+    mem_pools->memory_allocated += alloc_size;
+
+    /* If this is for a public pool, add it to the list */
+    new_block->prev = pool->top_block;
+
+    /* If we're not first, then tack us on the list */
+    if (pool->top_block)
+        pool->top_block->next = new_block;
+
+    pool->top_block        = new_block;
+    pool->total_allocated += alloc_size;
+}
+
+/*
+
+=item C<static void * mem_allocate(PARROT_INTERP, Memory_Pools *mem_pools,
+size_t size, Variable_Size_Pool *pool)>
+
+Allocates memory for headers.
+
+Alignment problems history:
+
+See L<http://archive.develooper.com/perl6-internals%40perl.org/msg12310.html>
+for details.
+
+- return aligned pointer *if needed*
+- return strings et al at unaligned i.e. void* boundaries
+- remember alignment in a buffer header bit
+  use this in compaction code
+- reduce alignment to a reasonable value i.e. MALLOC_ALIGNMENT
+  aka 2*sizeof (size_t) or just 8 (TODO make a config hint)
+
+See pobj.h for a discussion of the Buffer descriptor and the buffer itself,
+including its header.
+
+=cut
+
+*/
+
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+static void *
+mem_allocate(PARROT_INTERP,
+        ARGMOD(Memory_Pools *mem_pools),
+        size_t size,
+        ARGMOD(Variable_Size_Pool *pool))
+{
+    ASSERT_ARGS(mem_allocate)
+    void *return_val;
+
+    /* we always should have one block at least */
+    PARROT_ASSERT(pool->top_block);
+
+    /* If not enough room, try to find some */
+    if (pool->top_block->free < size) {
+        /*
+         * force a GC mark run to get live flags set
+         * for incremental M&S collection is run from there
+         * but only if there may be something worth collecting!
+         * TODO pass required allocation size to the GC system,
+         *      so that collection can be skipped if needed
+         */
+        if (!mem_pools->gc_mark_block_level
+        &&  Parrot_gc_ms_needed(interp)) {
+            Parrot_gc_mark_and_sweep(interp, GC_trace_stack_FLAG);
+
+            if (interp->gc_sys->sys_type != INF) {
+                /* Compact the pool if allowed and worthwhile */
+                if (pool->compact) {
+                    /* don't bother reclaiming if it's only a small amount */
+                    if ((pool->possibly_reclaimable * pool->reclaim_factor +
+                         pool->guaranteed_reclaimable) > size) {
+                        (*pool->compact) (interp, mem_pools, pool);
+                    }
+                }
+            }
+        }
+        if (pool->top_block->free < size) {
+            if (pool->minimum_block_size < 65536 * 16)
+                pool->minimum_block_size *= 2;
+            /*
+             * TODO - Big blocks
+             *
+             * Mark the block as big block (it has just one item)
+             * And don't set big blocks as the top_block.
+             */
+            alloc_new_block(mem_pools, size, pool, "compact failed");
+
+            ++mem_pools->mem_allocs_since_last_collect;
+
+            if (pool->top_block->free < size) {
+                fprintf(stderr, "out of mem\n");
+                exit(EXIT_FAILURE);
+            }
+        }
+    }
+
+    /* TODO inline the fast path */
+    return_val             = pool->top_block->top;
+    pool->top_block->top  += size;
+    pool->top_block->free -= size;
+    mem_pools->memory_used += size;
+
+    return return_val;
+}
+
+/*
+
+=item C<static char * aligned_mem(const Buffer *buffer, char *mem)>
+
+Returns a pointer to the aligned allocated storage for Buffer C<buffer>,
+which might not be the same as the pointer to C<buffer> because of
+memory alignment.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static char *
+aligned_mem(SHIM(const Buffer *buffer), ARGIN(char *mem))
+{
+    ASSERT_ARGS(aligned_mem)
+    mem += sizeof (void *);
+    mem  = (char *)(((unsigned long)(mem + WORD_ALIGN_1)) & WORD_ALIGN_MASK);
+
+    return mem;
+}
+
+/*
+
+=item C<static const char * buffer_location(PARROT_INTERP, const Buffer *b)>
+
+Recturns a constant string representing the location of the given
+Buffer C<b> in one of the PMC registers. If the PMC is not located
+in one of the PMC registers of the current context, returns the
+string C<"???">.
+
+=cut
+
+*/
+
+#if RESOURCE_DEBUG
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static const char *
+buffer_location(PARROT_INTERP, ARGIN(const Buffer *b))
+{
+    ASSERT_ARGS(buffer_location)
+    Parrot_Context * const ctx = CONTEXT(interp);
+    static char reg[10];
+    UINTVAL i;
+
+    for (i = 0; i < ctx->n_regs_used[REGNO_STR]; ++i) {
+        PObj * const obj = (PObj *)Parrot_pcc_get_STRING_reg(interp, ctx, i);
+        if ((PObj *)obj == b) {
+            sprintf(reg, "S%d", (int)i);
+            return reg;
+        }
+    }
+
+    return "???";
+}
+
+/*
+
+=item C<static void debug_print_buf(PARROT_INTERP, const Buffer *b)>
+
+Prints a debug statement with information about the given PObj C<b>.
+=cut
+
+*/
+
+static void
+debug_print_buf(PARROT_INTERP, ARGIN(const Buffer *b))
+{
+    ASSERT_ARGS(debug_print_buf)
+    fprintf(stderr, "found %p, len %d, flags 0x%08x at %s\n",
+            b, (int)Buffer_buflen(b), (uint)PObj_get_FLAGS(b),
+            buffer_location(interp, b));
+}
+#endif
+
+/*
+
+=back
+
+=head2 Compaction Code
+
+=over 4
+
+=item C<static void compact_pool(PARROT_INTERP, Memory_Pools *mem_pools,
+Variable_Size_Pool *pool)>
+
+Compact the string buffer pool. Does not perform a GC scan, or mark items
+as being alive in any way.
+
+=cut
+
+*/
+
+static void
+compact_pool(PARROT_INTERP,
+        ARGMOD(Memory_Pools *mem_pools),
+        ARGMOD(Variable_Size_Pool *pool))
+{
+    ASSERT_ARGS(compact_pool)
+    INTVAL        j;
+    UINTVAL       total_size;
+
+    Fixed_Size_Arena *cur_buffer_arena;
+
+    /* Contains new_block and cur_spot */
+    string_callback_data cb_data;
+
+
+    /* Bail if we're blocked */
+    if (mem_pools->gc_sweep_block_level)
+        return;
+
+    ++mem_pools->gc_sweep_block_level;
+
+    /* We're collecting */
+    mem_pools->mem_allocs_since_last_collect    = 0;
+    mem_pools->header_allocs_since_last_collect = 0;
+    ++mem_pools->gc_collect_runs;
+
+    /* Snag a block big enough for everything */
+    total_size = pad_pool_size(pool);
+
+    if (total_size == 0) {
+        free_old_mem_blocks(mem_pools, pool, pool->top_block, total_size);
+        --mem_pools->gc_sweep_block_level;
+        return;
+    }
+
+    alloc_new_block(mem_pools, total_size, pool, "inside compact");
+
+    cb_data.new_block = pool->top_block;
+
+    /* Start at the beginning */
+    cb_data.cur_spot  = cb_data.new_block->start;
+
+    /* Run through all the Buffer header pools and copy */
+    interp->gc_sys->iterate_live_strings(interp, move_buffer_callback, &cb_data);
+
+    /* Okay, we're done with the copy. Set the bits in the pool struct */
+    /* First, where we allocate next */
+    cb_data.new_block->top = cb_data.cur_spot;
+
+    PARROT_ASSERT(cb_data.new_block->size
+                  >=
+                  (size_t)cb_data.new_block->top - (size_t)cb_data.new_block->start);
+
+    /* How much is free. That's the total size minus the amount we used */
+    cb_data.new_block->free     = cb_data.new_block->size
+                                  - (cb_data.cur_spot - cb_data.new_block->start);
+    mem_pools->memory_collected += (cb_data.cur_spot - cb_data.new_block->start);
+    mem_pools->memory_used      += (cb_data.cur_spot - cb_data.new_block->start);
+
+    free_old_mem_blocks(mem_pools, pool, cb_data.new_block, total_size);
+
+    --mem_pools->gc_sweep_block_level;
+}
+
+/*
+=item C<static void move_buffer_callback(PARROT_INTERP, Buffer *b, void *data)>
+
+Callback for live STRING/Buffer for compating.
+
+=cut
+*/
+static void
+move_buffer_callback(PARROT_INTERP, ARGIN(Buffer *b), ARGIN(void *data))
+{
+    ASSERT_ARGS(move_buffer_callback)
+    string_callback_data *cb = (string_callback_data*)data;
+
+    if (Buffer_buflen(b) && PObj_is_movable_TESTALL(b)) {
+        Memory_Block *old_block = Buffer_pool(b);
+
+        if (!is_block_almost_full(old_block))
+            cb->cur_spot = move_one_buffer(interp, cb->new_block, b, cb->cur_spot);
+    }
+
+}
+
+/*
+
+=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
+we can avoid having to allocate it in the future.
+
+Returns 0 if all blocks below the top block are almost full. In this case
+compacting is not needed.
+
+TODO - Big blocks
+
+Currently all available blocks are compacted into one new
+block with total_size. This is suboptimal, if the block has
+just one live item from a big allocation.
+
+But currently it's unknown if the buffer memory is alive
+as the live bits are in Buffer headers. We have to run the
+compaction loop to check liveness. OTOH if this compaction
+is running through all the buffer headers, there is no
+relation to the block.
+
+Moving the live bit into the buffer thus also solves this
+problem easily.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static UINTVAL
+pad_pool_size(ARGIN(const Variable_Size_Pool *pool))
+{
+    ASSERT_ARGS(pad_pool_size)
+    Memory_Block *cur_block = pool->top_block->prev;
+
+    UINTVAL total_size   = 0;
+#if RESOURCE_DEBUG
+    size_t  total_blocks = 1;
+#endif
+
+    while (cur_block) {
+        if (!is_block_almost_full(cur_block))
+            total_size += cur_block->size - cur_block->freed - cur_block->free;
+        cur_block   = cur_block->prev;
+#if RESOURCE_DEBUG
+        ++total_blocks;
+#endif
+    }
+
+    if (total_size == 0)
+        return 0;
+
+    cur_block = pool->top_block;
+    if (!is_block_almost_full(cur_block))
+        total_size += cur_block->size - cur_block->freed - cur_block->free;
+
+    /* this makes for ever increasing allocations but fewer collect runs */
+#if WE_WANT_EVER_GROWING_ALLOCATIONS
+    total_size += pool->minimum_block_size;
+#endif
+
+#if RESOURCE_DEBUG
+    fprintf(stderr, "Total blocks: %d\n", total_blocks);
+#endif
+
+    return total_size;
+}
+
+/*
+
+=item C<static char * move_one_buffer(PARROT_INTERP, Memory_Block *pool, Buffer
+*old_buf, char *new_pool_ptr)>
+
+The compact_pool operation collects disjointed blocks of memory allocated on a
+given pool's free list into one large block of memory. Once the new larger
+memory block has been allocated, this function moves one buffer from the old
+memory block to the new memory block and marks that it has been moved.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static char *
+move_one_buffer(PARROT_INTERP, ARGIN(Memory_Block *pool),
+        ARGMOD(Buffer *old_buf), ARGMOD(char *new_pool_ptr))
+{
+    ASSERT_ARGS(move_one_buffer)
+
+    INTVAL       *flags     = NULL;
+    ptrdiff_t     offset    = 0;
+    Memory_Block *old_block = NULL;
+#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
+        * strstart might be in unallocated memory */
+    if (PObj_is_COWable_TEST(old_buf)) {
+        flags = Buffer_bufflagsptr(old_buf);
+        old_block = Buffer_pool(old_buf);
+
+        if (PObj_is_string_TEST(old_buf)) {
+            offset = (ptrdiff_t)((STRING *)old_buf)->strstart -
+                (ptrdiff_t)Buffer_bufstart(old_buf);
+        }
+    }
+
+    /* buffer has already been moved; just change the header */
+    if (flags && (*flags & Buffer_shared_FLAG)
+              && (*flags & Buffer_moved_FLAG)) {
+        /* Find out who else references our data */
+        Buffer * const hdr = *((Buffer **)Buffer_bufstart(old_buf));
+
+        PARROT_ASSERT(PObj_is_COWable_TEST(old_buf));
+
+        /* Make sure they know that we own it too */
+        /* Set Buffer_shared_FLAG in new buffer */
+        *Buffer_bufflagsptr(hdr) |= Buffer_shared_FLAG;
+
+        /* Now make sure we point to where the other guy does */
+        Buffer_bufstart(old_buf) = Buffer_bufstart(hdr);
+
+        /* And if we're a string, update strstart */
+        /* Somewhat of a hack, but if we get per-pool
+            * collections, it should help ease the pain */
+        if (PObj_is_string_TEST(old_buf))
+            ((STRING *)old_buf)->strstart =
+                (char *)Buffer_bufstart(old_buf) + offset;
+    }
+    else {
+        new_pool_ptr = aligned_mem(old_buf, new_pool_ptr);
+
+        /* Copy our memory to the new pool */
+        memcpy(new_pool_ptr, Buffer_bufstart(old_buf),
+                                Buffer_buflen(old_buf));
+
+        /* If we're shared */
+        if (flags && (*flags & Buffer_shared_FLAG)) {
+            PARROT_ASSERT(PObj_is_COWable_TEST(old_buf));
+
+            /* Let the old buffer know how to find us */
+            *((Buffer **)Buffer_bufstart(old_buf)) = old_buf;
+
+            /* Finally, let the tail know that we've moved, so
+                * that any other references can know to look for
+                * us and not re-copy */
+            *flags |= Buffer_moved_FLAG;
+        }
+
+        Buffer_bufstart(old_buf) = new_pool_ptr;
+
+        /* Remember new pool inside */
+        *Buffer_poolptr(old_buf) = pool;
+
+        if (PObj_is_string_TEST(old_buf))
+            ((STRING *)old_buf)->strstart =
+                    (char *)Buffer_bufstart(old_buf) + offset;
+
+        new_pool_ptr += Buffer_buflen(old_buf);
+    }
+
+    return new_pool_ptr;
+}
+
+/*
+
+=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
+given pool's free list into one large block of memory, setting it as the new
+top block for the pool. Once that is done, and all items have been moved into
+the new block of memory, this function iterates through the old blocks and
+frees each one. It also performs the necessary housekeeping to record the
+freed memory blocks. At the end of this function, the pool will have only one
+block of memory on its free list.
+
+=cut
+
+*/
+
+static void
+free_old_mem_blocks(
+        ARGMOD(Memory_Pools *mem_pools),
+        ARGMOD(Variable_Size_Pool *pool),
+        ARGMOD(Memory_Block *new_block),
+        UINTVAL total_size)
+{
+    ASSERT_ARGS(free_old_mem_blocks)
+    Memory_Block *prev_block = new_block;
+    Memory_Block *cur_block  = new_block->prev;
+
+    PARROT_ASSERT(new_block == pool->top_block);
+
+    while (cur_block) {
+        Memory_Block * const next_block = cur_block->prev;
+
+        if (is_block_almost_full(cur_block)) {
+            /* Skip block */
+            prev_block = cur_block;
+            cur_block  = next_block;
+        }
+        else {
+            /* Note that we don't have it any more */
+            mem_pools->memory_allocated -= cur_block->size;
+            mem_pools->memory_used -= cur_block->size - cur_block->free;
+
+            /* We know the pool body and pool header are a single chunk, so
+             * this is enough to get rid of 'em both */
+            mem_internal_free(cur_block);
+            cur_block        = next_block;
+
+            /* Unlink it from list */
+            prev_block->prev = next_block;
+        }
+    }
+
+    /* Terminate list */
+    prev_block->prev = NULL;
+
+
+    /* ANR: I suspect this should be set to new_block->size, instead of passing
+     * in the raw value of total_size, because alloc_new_block pads the size of
+     * the new block under certain conditions. Leaving it unmodified for now,
+     * so this refactor has no functionality changes, only code cleanups.*/
+    pool->total_allocated        = total_size;
+    pool->guaranteed_reclaimable = 0;
+    pool->possibly_reclaimable   = 0;
+}
+
+/*
+
+=item C<static int is_block_almost_full(const Memory_Block *block)>
+
+Tests if the block is almost full and should be skipped during compacting.
+
+Returns true if less that 20% of block is available
+
+=cut
+
+*/
+
+static int
+is_block_almost_full(ARGIN(const Memory_Block *block))
+{
+    ASSERT_ARGS(is_block_almost_full)
+    return 5 * (block->free + block->freed) < block->size;
+}
+
+/*
+
+=item C<static void free_memory_pool(Variable_Size_Pool *pool)>
+
+Frees a memory pool; helper function for C<Parrot_gc_destroy_memory_pools>.
+
+=cut
+
+*/
+
+static void
+free_memory_pool(ARGFREE(Variable_Size_Pool *pool))
+{
+    ASSERT_ARGS(free_memory_pool)
+
+    Memory_Block *cur_block = pool->top_block;
+
+    while (cur_block) {
+        Memory_Block * const next_block = cur_block->prev;
+        mem_internal_free(cur_block);
+        cur_block = next_block;
+    }
+
+    mem_internal_free(pool);
+}
+
+/*
+
+=back
+
+=head1 SEE ALSO
+
+F<src/gc/memory.c>.
+F<src/gc/alloc_resources.c>.
+
+=cut
+
+*/
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/html_cleanup/src/gc/system.c
==============================================================================
--- branches/html_cleanup/src/gc/system.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/gc/system.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -75,6 +75,7 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+PARROT_NOINLINE
 static void trace_system_stack(PARROT_INTERP,
     ARGIN(const Memory_Pools *mem_pools))
         __attribute__nonnull__(1)
@@ -234,12 +235,14 @@
 Traces the memory block starting at C<< interp->lo_var_ptr >>. This should be
 the address of a local variable which has been created on the stack early in
 the interpreter's lifecycle. We trace until the address of another local stack
-variable in this function, which should be at the "top" of the stack.
+variable in this function, which should be at the "top" of the stack. For this
+reason, this function must never be inlined.
 
 =cut
 
 */
 
+PARROT_NOINLINE
 static void
 trace_system_stack(PARROT_INTERP, ARGIN(const Memory_Pools *mem_pools))
 {
@@ -450,8 +453,8 @@
     prefix = mask & buffer_min;
 
     for (cur_var_ptr = hi_var_ptr;
-            (ptrdiff_t)cur_var_ptr < (ptrdiff_t)lo_var_ptr;
-            cur_var_ptr = (size_t)((ptrdiff_t)cur_var_ptr + sizeof (void *))) {
+        (ptrdiff_t)cur_var_ptr < (ptrdiff_t)lo_var_ptr;
+        cur_var_ptr = (size_t)((ptrdiff_t)cur_var_ptr + sizeof (void *))) {
         const size_t ptr = *(size_t *)cur_var_ptr;
 
         /* Do a quick approximate range check by bit-masking */
@@ -460,14 +463,17 @@
              * guaranteed to be live pmcs/buffers, and could very well have
              * had their bufstart/vtable destroyed due to the linked list of
              * free headers... */
-            if ((pmc_min <= ptr) && (ptr < pmc_max) && is_pmc_ptr(mem_pools, (void *)ptr)) {
-                Parrot_gc_mark_PObj_alive(interp, (PObj *)ptr);
+            if ((pmc_min <= ptr)
+            &&  (ptr     < pmc_max)
+            &&   is_pmc_ptr(mem_pools, (void *)ptr)) {
+                Parrot_gc_mark_PMC_alive(interp, (PMC *)ptr);
             }
-            else if ((buffer_min <= ptr) && (ptr < buffer_max) &&
-                    is_buffer_ptr(mem_pools, (void *)ptr)) {
-                /* ...and since Parrot_gc_mark_PObj_alive doesn't care about bufstart, it
-                 * doesn't really matter if it sets a flag */
-                Parrot_gc_mark_PObj_alive(interp, (PObj *)ptr);
+            else if ((buffer_min <= ptr) && (ptr < buffer_max)
+            &&        is_buffer_ptr(mem_pools, (void *)ptr)) {
+                if (PObj_is_string_TEST((PObj *)ptr))
+                    Parrot_gc_mark_STRING_alive(interp, (STRING *)ptr);
+                else
+                    PObj_live_SET((PObj *)ptr);
             }
         }
     }
@@ -519,7 +525,8 @@
 is_pmc_ptr(ARGIN(const Memory_Pools *mem_pools), ARGIN(const void *ptr))
 {
     ASSERT_ARGS(is_pmc_ptr)
-        return contained_in_pool(mem_pools->pmc_pool, ptr);
+    return contained_in_pool(mem_pools->pmc_pool, ptr)
+        && PObj_is_PMC_TEST((PObj *)ptr);
 }
 
 

Modified: branches/html_cleanup/src/global_setup.c
==============================================================================
--- branches/html_cleanup/src/global_setup.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/global_setup.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -23,6 +23,7 @@
 
 #define INSIDE_GLOBAL_SETUP
 #include "parrot/parrot.h"
+#include "parrot/oplib/core_ops.h"
 #include "global_setup.str"
 
 /* These functions are defined in the auto-generated file core_pmcs.c */
@@ -98,7 +99,7 @@
         STRING * const config_string =
             Parrot_str_new_init(interp,
                                (const char *)parrot_config_stored, parrot_config_size_stored,
-                               PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET,
+                               Parrot_default_encoding_ptr,
                                PObj_external_FLAG|PObj_constant_FLAG);
 
         config_hash = Parrot_thaw(interp, config_string);
@@ -217,6 +218,17 @@
 
     create_initial_context(interp);
 
+    /* initialize the ops hash */
+    if (interp->parent_interpreter) {
+        interp->op_hash = interp->parent_interpreter->op_hash;
+    }
+    else {
+        op_lib_t  *core_ops = PARROT_CORE_OPLIB_INIT(interp, 1);
+        interp->op_hash     = parrot_create_hash_sized(interp, enum_type_ptr,
+                                    Hash_key_type_cstring, core_ops->op_count);
+        parrot_hash_oplib(interp, core_ops);
+    }
+
     /* create the namespace root stash */
     interp->root_namespace = Parrot_pmc_new(interp, enum_class_NameSpace);
     Parrot_init_HLL(interp);

Modified: branches/html_cleanup/src/hash.c
==============================================================================
--- branches/html_cleanup/src/hash.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/hash.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -26,15 +26,25 @@
 
 #include "parrot/parrot.h"
 
-/* the number of entries above which it's faster to hash the hashval instead of
- * looping over the used HashBuckets directly */
-#define INITIAL_SIZE  8
+/* hash first allocation size */
+#define INITIAL_SIZE  2
+
+/* below this hash size we use fixed_size_allocator
+ * else we use system allocator */
+#define SPLIT_POINT  16
 
 /* HEADERIZER HFILE: include/parrot/hash.h */
 
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
+static void allocate_buckets(PARROT_INTERP,
+    ARGMOD(Hash *hash),
+    ARGIN_NULLOK(const UINTVAL size))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*hash);
+
 static void expand_hash(PARROT_INTERP, ARGMOD(Hash *hash))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -55,6 +65,17 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_PURE_FUNCTION
+PARROT_INLINE
+static int hash_compare(PARROT_INTERP,
+    ARGIN(const Hash *hash),
+    ARGIN_NULLOK(void *a),
+    ARGIN_NULLOK(void *b))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
+PARROT_INLINE
 static int hash_compare_cstring(SHIM_INTERP,
     ARGIN(const char *a),
     ARGIN(const char *b))
@@ -63,18 +84,112 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_PURE_FUNCTION
+PARROT_INLINE
+static int hash_compare_int(SHIM_INTERP,
+    ARGIN_NULLOK(const void *a),
+    ARGIN_NULLOK(const void *b));
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
+PARROT_INLINE
+static int hash_compare_pmc(PARROT_INTERP, ARGIN(PMC *a), ARGIN(PMC *b))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
+PARROT_INLINE
+static int hash_compare_pointer(SHIM_INTERP,
+    ARGIN_NULLOK(const void *a),
+    ARGIN_NULLOK(const void *b));
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
+PARROT_INLINE
+static int hash_compare_string(PARROT_INTERP,
+    ARGIN(const void *search_key),
+    ARGIN_NULLOK(const void *bucket_key))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+static int hash_compare_string_enc(PARROT_INTERP,
+    ARGIN(const void *search_key),
+    ARGIN(const void *bucket_key))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
+PARROT_INLINE
+static size_t key_hash(PARROT_INTERP,
+    ARGIN(const Hash *hash),
+    ARGIN_NULLOK(void *key))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
+PARROT_INLINE
 static size_t key_hash_cstring(SHIM_INTERP,
     ARGIN(const void *value),
     size_t seed)
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
+PARROT_PURE_FUNCTION
+PARROT_INLINE
+static size_t key_hash_int(SHIM_INTERP,
+    ARGIN_NULLOK(const void *value),
+    size_t seed);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
+PARROT_INLINE
+static size_t key_hash_PMC(PARROT_INTERP,
+    ARGIN(PMC *value),
+    SHIM(size_t seed))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
+PARROT_INLINE
 static size_t key_hash_pointer(SHIM_INTERP,
     ARGIN(const void *value),
     size_t seed)
         __attribute__nonnull__(2);
 
+PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
+PARROT_INLINE
+static size_t key_hash_STRING(PARROT_INTERP, ARGMOD(STRING *s), size_t seed)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*s);
+
+PARROT_CAN_RETURN_NULL
+static HashBucket * parrot_hash_get_bucket_string(PARROT_INTERP,
+    ARGIN(const Hash *hash),
+    ARGIN(STRING *s),
+    UINTVAL hashval)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+static void parrot_hash_store_value_in_bucket(PARROT_INTERP,
+    ARGMOD(Hash *hash),
+    ARGMOD_NULLOK(HashBucket *bucket),
+    INTVAL hashval,
+    ARGIN_NULLOK(void *key),
+    ARGIN_NULLOK(void *value))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*hash)
+        FUNC_MODIFIES(*bucket);
+
 static void parrot_mark_hash_both(PARROT_INTERP, ARGIN(Hash *hash))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -87,6 +202,9 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+#define ASSERT_ARGS_allocate_buckets __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(hash))
 #define ASSERT_ARGS_expand_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(hash))
@@ -97,13 +215,47 @@
 #define ASSERT_ARGS_get_string_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_hash_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(hash))
 #define ASSERT_ARGS_hash_compare_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(a) \
     , PARROT_ASSERT_ARG(b))
+#define ASSERT_ARGS_hash_compare_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_hash_compare_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(a) \
+    , PARROT_ASSERT_ARG(b))
+#define ASSERT_ARGS_hash_compare_pointer __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_hash_compare_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(search_key))
+#define ASSERT_ARGS_hash_compare_string_enc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(search_key) \
+    , PARROT_ASSERT_ARG(bucket_key))
+#define ASSERT_ARGS_key_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(hash))
 #define ASSERT_ARGS_key_hash_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_key_hash_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_key_hash_PMC __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(value))
 #define ASSERT_ARGS_key_hash_pointer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_key_hash_STRING __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(s))
+#define ASSERT_ARGS_parrot_hash_get_bucket_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(hash) \
+    , PARROT_ASSERT_ARG(s))
+#define ASSERT_ARGS_parrot_hash_store_value_in_bucket \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(hash))
 #define ASSERT_ARGS_parrot_mark_hash_both __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(hash))
@@ -116,11 +268,9 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
-
-
 /*
 
-=item C<size_t key_hash_STRING(PARROT_INTERP, STRING *s, size_t seed)>
+=item C<static size_t key_hash_STRING(PARROT_INTERP, STRING *s, size_t seed)>
 
 Returns the hashed value of the key C<value>.  See also string.c.
 
@@ -130,8 +280,10 @@
 
 
 PARROT_WARN_UNUSED_RESULT
-size_t
-key_hash_STRING(PARROT_INTERP, ARGMOD(STRING *s), SHIM(size_t seed))
+PARROT_PURE_FUNCTION
+PARROT_INLINE
+static size_t
+key_hash_STRING(PARROT_INTERP, ARGMOD(STRING *s), size_t seed)
 {
     ASSERT_ARGS(key_hash_STRING)
 
@@ -144,8 +296,8 @@
 
 /*
 
-=item C<int hash_compare_string(PARROT_INTERP, const void *search_key, const
-void *bucket_key)>
+=item C<static int hash_compare_string(PARROT_INTERP, const void *search_key,
+const void *bucket_key)>
 
 Compares the two strings, returning 0 if they are identical.
 
@@ -154,7 +306,9 @@
 */
 
 PARROT_WARN_UNUSED_RESULT
-int
+PARROT_PURE_FUNCTION
+PARROT_INLINE
+static int
 hash_compare_string(PARROT_INTERP, ARGIN(const void *search_key),
         ARGIN_NULLOK(const void *bucket_key))
 {
@@ -162,45 +316,42 @@
     STRING const *s1 = (STRING const *)search_key;
     STRING const *s2 = (STRING const *)bucket_key;
 
-    if (s1->hashval != s2->hashval)
-        return 1;
-
-    return CHARSET_COMPARE(interp, s1, s2);
+    return Parrot_str_equal(interp, s1, s2) == 0;
 }
 
 
 /*
 
-=item C<int hash_compare_string_distinct_enc(PARROT_INTERP, const void
+=item C<static int hash_compare_string_enc(PARROT_INTERP, const void
 *search_key, const void *bucket_key)>
 
 Compare two strings. Returns 0 if they are identical. Considers differing
-charset or encoding to be distinct.
+encodings to be distinct.
 
 */
 
 PARROT_WARN_UNUSED_RESULT
-int
-hash_compare_string_distinct_enc(PARROT_INTERP, ARGIN(const void *search_key),
-                                                ARGIN(const void *bucket_key))
+static int
+hash_compare_string_enc(PARROT_INTERP, ARGIN(const void *search_key),
+                                       ARGIN(const void *bucket_key))
 {
-    ASSERT_ARGS(hash_compare_string_distinct_enc)
+    ASSERT_ARGS(hash_compare_string_enc)
     STRING const *s1 = (STRING const *)search_key;
     STRING const *s2 = (STRING const *)bucket_key;
 
-    if (s1 && s2 && (
-            s1->charset != s2->charset ||
-            s1->encoding != s2->encoding)) {
+    if (s1->hashval != s2->hashval)
         return 1;
-    }
-
-    return hash_compare_string(interp, search_key, bucket_key);
+    if (s1 && s2 && s1->encoding != s2->encoding)
+        return 1;
+    else
+        return memcmp(s1->strstart, s2->strstart, s1->bufused);
 }
 
 
 /*
 
-=item C<int hash_compare_pointer(PARROT_INTERP, const void *a, const void *b)>
+=item C<static int hash_compare_pointer(PARROT_INTERP, const void *a, const void
+*b)>
 
 Compares the two pointers, returning 0 if they are identical
 
@@ -209,8 +360,9 @@
 */
 
 PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-int
+PARROT_PURE_FUNCTION
+PARROT_INLINE
+static int
 hash_compare_pointer(SHIM_INTERP, ARGIN_NULLOK(const void *a), ARGIN_NULLOK(const void *b))
 {
     ASSERT_ARGS(hash_compare_pointer)
@@ -230,7 +382,8 @@
 */
 
 PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
+PARROT_PURE_FUNCTION
+PARROT_INLINE
 static size_t
 key_hash_pointer(SHIM_INTERP, ARGIN(const void *value), size_t seed)
 {
@@ -257,18 +410,17 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_PURE_FUNCTION
+PARROT_INLINE
 static size_t
 key_hash_cstring(SHIM_INTERP, ARGIN(const void *value), size_t seed)
 {
     ASSERT_ARGS(key_hash_cstring)
-    const unsigned char * p = (const unsigned char *) value;
-    register size_t       h = seed;
-
+    const unsigned char *p = (const unsigned char *) value;
+    size_t h = seed;
     while (*p) {
         h += h << 5;
         h += *p++;
     }
-
     return h;
 }
 
@@ -287,6 +439,7 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_PURE_FUNCTION
+PARROT_INLINE
 static int
 hash_compare_cstring(SHIM_INTERP, ARGIN(const char *a), ARGIN(const char *b))
 {
@@ -297,7 +450,7 @@
 
 /*
 
-=item C<size_t key_hash_PMC(PARROT_INTERP, PMC *value, size_t seed)>
+=item C<static size_t key_hash_PMC(PARROT_INTERP, PMC *value, size_t seed)>
 
 Returns a hashed value for an PMC key (passed as a void pointer, sadly).
 
@@ -307,7 +460,8 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_PURE_FUNCTION
-size_t
+PARROT_INLINE
+static size_t
 key_hash_PMC(PARROT_INTERP, ARGIN(PMC *value), SHIM(size_t seed))
 {
     ASSERT_ARGS(key_hash_PMC)
@@ -316,7 +470,7 @@
 
 /*
 
-=item C<int hash_compare_pmc(PARROT_INTERP, PMC *a, PMC *b)>
+=item C<static int hash_compare_pmc(PARROT_INTERP, PMC *a, PMC *b)>
 
 Compares two PMC for equality, returning 0 if the first is equal to second.
 Uses void pointers to store the PMC, sadly.
@@ -327,7 +481,8 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_PURE_FUNCTION
-int
+PARROT_INLINE
+static int
 hash_compare_pmc(PARROT_INTERP, ARGIN(PMC *a), ARGIN(PMC *b))
 {
     ASSERT_ARGS(hash_compare_pmc)
@@ -345,7 +500,8 @@
 
 /*
 
-=item C<size_t key_hash_int(PARROT_INTERP, const void *value, size_t seed)>
+=item C<static size_t key_hash_int(PARROT_INTERP, const void *value, size_t
+seed)>
 
 Returns a hashed value for an integer key (passed as a void pointer, sadly).
 
@@ -354,8 +510,9 @@
 */
 
 PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-size_t
+PARROT_PURE_FUNCTION
+PARROT_INLINE
+static size_t
 key_hash_int(SHIM_INTERP, ARGIN_NULLOK(const void *value), size_t seed)
 {
     ASSERT_ARGS(key_hash_int)
@@ -364,7 +521,8 @@
 
 /*
 
-=item C<int hash_compare_int(PARROT_INTERP, const void *a, const void *b)>
+=item C<static int hash_compare_int(PARROT_INTERP, const void *a, const void
+*b)>
 
 Compares two integers for equality, returning -1, 0, and 1 if the first is less
 than, equal to, or greater than the second, respectively.  Uses void pointers
@@ -375,8 +533,9 @@
 */
 
 PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-int
+PARROT_PURE_FUNCTION
+PARROT_INLINE
+static int
 hash_compare_int(SHIM_INTERP, ARGIN_NULLOK(const void *a), ARGIN_NULLOK(const void *b))
 {
     ASSERT_ARGS(hash_compare_int)
@@ -385,6 +544,80 @@
 
 /*
 
+=item C<static size_t key_hash(PARROT_INTERP, const Hash *hash, void *key)>
+
+Generic function to get the hashvalue of a given key. It may dispatches to
+key_hash_STRING, key_hash_cstring, etc. depending on hash->key_type.
+
+=cut
+
+*/
+
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
+PARROT_INLINE
+static size_t
+key_hash(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN_NULLOK(void *key))
+{
+    ASSERT_ARGS(key_hash)
+
+    if (hash->key_type == Hash_key_type_STRING
+    ||  hash->key_type == Hash_key_type_STRING_enc)
+        return key_hash_STRING(interp, (STRING *)key, hash->seed);
+
+    if (hash->key_type == Hash_key_type_cstring)
+        return key_hash_cstring(interp, (char *)key, hash->seed);
+
+    if (hash->key_type == Hash_key_type_PMC)
+        return VTABLE_hashvalue(interp, (PMC *)key);
+
+    return ((size_t) key) ^ hash->seed;
+
+}
+
+/*
+
+=item C<static int hash_compare(PARROT_INTERP, const Hash *hash, void *a, void
+*b)>
+
+Generic function to compare values. It may dispatches to
+hash_compare_string, hash_compare_cstring, etc. depending on hash->key_type.
+
+=cut
+
+*/
+
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
+PARROT_INLINE
+static int
+hash_compare(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN_NULLOK(void *a),
+    ARGIN_NULLOK(void *b))
+{
+    ASSERT_ARGS(hash_compare)
+
+    if (a == b)
+        return 0;
+
+    if (hash->key_type == Hash_key_type_STRING)
+        return hash_compare_string(interp, (STRING *)a, (STRING *)b);
+
+    if (hash->key_type == Hash_key_type_STRING_enc)
+        return hash_compare_string_enc(interp, (STRING *)a, (STRING *)b);
+
+    if (hash->key_type == Hash_key_type_cstring)
+        return strcmp((char *)a, (char *)b);
+
+    if (hash->key_type == Hash_key_type_PMC)
+        return hash_compare_pmc(interp, (PMC *)a, (PMC *) b);
+
+    return 1;
+}
+
+/*
+
 =item C<void parrot_dump_hash(PARROT_INTERP, const Hash *hash)>
 
 Prints out the hash in human-readable form, at least once someone implements
@@ -421,12 +654,17 @@
     int mark_key   = 0;
     int mark_value = 0;
 
+    if (!hash->buckets)
+        return;
+
     if (hash->entry_type == (PARROT_DATA_TYPE) enum_hash_string
     ||  hash->entry_type == (PARROT_DATA_TYPE) enum_hash_pmc)
         mark_value = 1;
 
     if (hash->key_type == Hash_key_type_STRING
-    ||  hash->key_type == Hash_key_type_PMC)
+    ||  hash->key_type == Hash_key_type_STRING_enc
+    ||  hash->key_type == Hash_key_type_PMC
+    ||  hash->key_type == Hash_key_type_PMC_ptr)
         mark_key = 1;
 
     if (mark_key) {
@@ -456,9 +694,18 @@
 parrot_mark_hash_keys(PARROT_INTERP, ARGIN(Hash *hash))
 {
     ASSERT_ARGS(parrot_mark_hash_keys)
-    parrot_hash_iterate(hash,
-        PARROT_ASSERT(_bucket->key);
-        Parrot_gc_mark_PObj_alive(interp, (PObj *)_bucket->key););
+
+    if (hash->key_type == Hash_key_type_STRING
+     || hash->key_type == Hash_key_type_STRING_enc) {
+        parrot_hash_iterate(hash,
+            PARROT_ASSERT(_bucket->key);
+            Parrot_gc_mark_STRING_alive(interp, (STRING *)_bucket->key););
+    }
+    else {
+        parrot_hash_iterate(hash,
+            PARROT_ASSERT(_bucket->key);
+            Parrot_gc_mark_PMC_alive(interp, (PMC *)_bucket->key););
+    }
 }
 
 
@@ -476,9 +723,17 @@
 parrot_mark_hash_values(PARROT_INTERP, ARGIN(Hash *hash))
 {
     ASSERT_ARGS(parrot_mark_hash_values)
-    parrot_hash_iterate(hash,
-        PARROT_ASSERT(_bucket->value);
-        Parrot_gc_mark_PObj_alive(interp, (PObj *)_bucket->value););
+
+    if (hash->entry_type == (PARROT_DATA_TYPE) enum_hash_string) {
+        parrot_hash_iterate(hash,
+            PARROT_ASSERT(_bucket->value);
+            Parrot_gc_mark_STRING_alive(interp, (STRING *)_bucket->value););
+    }
+    else if (hash->entry_type == (PARROT_DATA_TYPE) enum_hash_pmc) {
+        parrot_hash_iterate(hash,
+            PARROT_ASSERT(_bucket->value);
+            Parrot_gc_mark_PMC_alive(interp, (PMC *)_bucket->value););
+    }
 }
 
 
@@ -496,11 +751,23 @@
 parrot_mark_hash_both(PARROT_INTERP, ARGIN(Hash *hash))
 {
     ASSERT_ARGS(parrot_mark_hash_both)
-    parrot_hash_iterate(hash,
-        PARROT_ASSERT(_bucket->key);
-        Parrot_gc_mark_PObj_alive(interp, (PObj *)_bucket->key);
-        PARROT_ASSERT(_bucket->value);
-        Parrot_gc_mark_PObj_alive(interp, (PObj *)_bucket->value););
+
+    if ((hash->key_type == Hash_key_type_STRING
+    ||   hash->key_type == Hash_key_type_STRING_enc)
+    &&  hash->entry_type == (PARROT_DATA_TYPE) enum_hash_pmc) {
+        parrot_hash_iterate(hash,
+            PARROT_ASSERT(_bucket->key);
+            Parrot_gc_mark_STRING_alive(interp, (STRING *)_bucket->key);
+            PARROT_ASSERT(_bucket->value);
+            Parrot_gc_mark_PMC_alive(interp, (PMC *)_bucket->value););
+    }
+    else {
+        parrot_hash_iterate(hash,
+            PARROT_ASSERT(_bucket->key);
+            Parrot_gc_mark_PObj_alive(interp, (PObj *)_bucket->key);
+            PARROT_ASSERT(_bucket->value);
+            Parrot_gc_mark_PObj_alive(interp, (PObj *)_bucket->value););
+    }
 }
 
 /*
@@ -517,7 +784,6 @@
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-PARROT_MALLOC
 Hash *
 Parrot_hash_thaw(PARROT_INTERP, ARGMOD(PMC *info))
 {
@@ -527,42 +793,18 @@
     const Hash_key_type     key_type    = (Hash_key_type)VTABLE_shift_integer(interp, info);
     const PARROT_DATA_TYPE  entry_type  = (PARROT_DATA_TYPE)VTABLE_shift_integer(interp, info);
     size_t                  entry_index;
-    Hash                   *hash;
-
-    {
-        hash_comp_fn     cmp_fn;
-        hash_hash_key_fn key_fn;
-
-        switch (key_type) {
-            case Hash_key_type_int:
-                key_fn = (hash_hash_key_fn)key_hash_int;
-                cmp_fn = (hash_comp_fn)hash_compare_int;
-                break;
-            case Hash_key_type_STRING:
-                key_fn = (hash_hash_key_fn)key_hash_STRING;
-                cmp_fn = (hash_comp_fn)hash_compare_string;
-                break;
-            case Hash_key_type_PMC:
-                key_fn = (hash_hash_key_fn)key_hash_PMC;
-                cmp_fn = (hash_comp_fn)hash_compare_pmc;
-                break;
-            default:
-                Parrot_ex_throw_from_c_args(interp, NULL, 1,
-                        "unimplemented key type");
-                break;
-        }
-
-        hash = parrot_create_hash_sized(interp, entry_type, key_type, cmp_fn, key_fn, num_entries);
-
-    }
+    Hash *hash = parrot_create_hash_sized(interp, entry_type, key_type, num_entries);
 
     /* special case for great speed */
     if (key_type   == Hash_key_type_STRING
     &&  entry_type == enum_hash_int) {
         for (entry_index = 0; entry_index < num_entries; ++entry_index) {
-            STRING * const key = VTABLE_shift_string(interp, info);
-            const INTVAL   i   = VTABLE_shift_integer(interp, info);
-            parrot_hash_put(interp, hash, (void *)key, (void *)i);
+            STRING * const key     = VTABLE_shift_string(interp, info);
+            const INTVAL   i       = VTABLE_shift_integer(interp, info);
+            const INTVAL   hashval = key_hash_STRING(interp, key, hash->seed);
+            /* serialized hashes assumed not to contain duplicates */
+            parrot_hash_store_value_in_bucket(interp, hash, NULL, hashval,
+                                         (void *)key, (void *)i);
         }
 
         return hash;
@@ -579,12 +821,14 @@
             }
             break;
           case Hash_key_type_STRING:
+          case Hash_key_type_STRING_enc:
             {
                 STRING * const s_key = VTABLE_shift_string(interp, info);
                 key                  = (void *)s_key;
             }
             break;
           case Hash_key_type_PMC:
+          case Hash_key_type_PMC_ptr:
             {
                 PMC * const p_key = VTABLE_shift_pmc(interp, info);
                 key               = (void *)p_key;
@@ -658,9 +902,11 @@
             VTABLE_push_integer(interp, info, (INTVAL)_bucket->key);
             break;
           case Hash_key_type_STRING:
+          case Hash_key_type_STRING_enc:
             VTABLE_push_string(interp, info, (STRING *)_bucket->key);
             break;
           case Hash_key_type_PMC:
+          case Hash_key_type_PMC_ptr:
             VTABLE_push_pmc(interp, info, (PMC *)_bucket->key);
             break;
           default:
@@ -685,6 +931,51 @@
         });
 }
 
+/*
+
+=item C<static void allocate_buckets(PARROT_INTERP, Hash *hash, const UINTVAL
+size)>
+
+Allocate sized buckets and index storage for a hash
+
+=cut
+
+*/
+
+static void
+allocate_buckets(PARROT_INTERP, ARGMOD(Hash *hash), ARGIN_NULLOK(const UINTVAL size))
+{
+    ASSERT_ARGS(allocate_buckets)
+
+    UINTVAL new_size = INITIAL_SIZE;
+    HashBucket *new_buckets, *bucket;
+    size_t i;
+
+    while (size > new_size)
+        new_size <<= 1;
+
+    if (new_size > SPLIT_POINT)
+        new_buckets  = (HashBucket *) Parrot_gc_allocate_memory_chunk(
+                        interp, HASH_ALLOC_SIZE(new_size));
+    else
+        new_buckets  = (HashBucket *) Parrot_gc_allocate_fixed_size_storage(
+                        interp, HASH_ALLOC_SIZE(new_size));
+
+    memset(new_buckets, 0, HASH_ALLOC_SIZE(new_size));
+
+    hash->mask      = new_size - 1;
+    hash->buckets   = new_buckets;
+    hash->index     = (HashBucket **)(new_buckets + N_BUCKETS(new_size));
+
+    /* add new buckets to free_list
+     * lowest bucket is top on free list and will be used first */
+
+    bucket = hash->buckets + N_BUCKETS(new_size) - 1;
+    for (i = 0; i < N_BUCKETS(new_size); ++i, --bucket) {
+        bucket->next    = hash->free_list;
+        hash->free_list = bucket;
+    }
+}
 
 /*
 
@@ -721,20 +1012,16 @@
 expand_hash(PARROT_INTERP, ARGMOD(Hash *hash))
 {
     ASSERT_ARGS(expand_hash)
-    HashBucket  **old_bi, **new_bi;
-    HashBucket   *bs, *b, *new_mem;
-    HashBucket * const old_offset = (HashBucket *)((char *)hash + sizeof (Hash));
+    HashBucket  **new_index,  **index;
+    HashBucket   *new_buckets, *bucket;
 
+    void *        new_mem;
     void * const  old_mem    = hash->buckets;
     const UINTVAL old_size   = hash->mask + 1;
-    const UINTVAL new_size   = old_size << 1; /* Double. Right-shift is 2x */
-    const UINTVAL old_nb     = N_BUCKETS(old_size);
-    const UINTVAL new_nb     = N_BUCKETS(new_size);
+    const UINTVAL new_size   = old_size  << 1; /* Double. Right-shift is 2x */
+    const UINTVAL new_mask   = new_size   - 1;
     size_t        offset, i;
 
-    const hash_hash_key_fn hash_val_func = hash->hash_val;
-    const int              is_string_key = (hash_val_func == (hash_hash_key_fn)key_hash_STRING);
-
     /*
        allocate some less buckets
        e.g. 3 buckets, 4 pointers:
@@ -747,86 +1034,95 @@
     */
 
     /* resize mem */
-    if (old_offset != old_mem) {
-        /* This buffer has been reallocated at least once before. */
-        new_mem = (HashBucket *)Parrot_gc_reallocate_memory_chunk_with_interior_pointers(
-                interp, old_mem, HASH_ALLOC_SIZE(new_size), HASH_ALLOC_SIZE(old_size));
-    }
-    else {
-        /* Allocate a new buffer. */
-        new_mem = (HashBucket *)Parrot_gc_allocate_memory_chunk_with_interior_pointers(
-                interp, HASH_ALLOC_SIZE(new_size));
-        memcpy(new_mem, old_mem, HASH_ALLOC_SIZE(old_size));
-    }
+    if (new_size > SPLIT_POINT)
+        new_mem  = Parrot_gc_allocate_memory_chunk(
+                        interp, HASH_ALLOC_SIZE(new_size));
+    else
+        new_mem  = Parrot_gc_allocate_fixed_size_storage(
+                        interp, HASH_ALLOC_SIZE(new_size));
+
+    offset = (char *)new_mem - (char *)old_mem;
+
+    new_buckets = (HashBucket *)  new_mem;
+    new_index   = (HashBucket **)(new_buckets + N_BUCKETS(new_size));
+
+    /* copy buckets and index */
+    mem_sys_memcopy(new_buckets, hash->buckets,
+            N_BUCKETS(old_size) * sizeof (HashBucket));
+    mem_sys_memcopy(new_index, hash->index, old_size * sizeof (HashBucket **));
+
+    /* free */
+    if (old_size > SPLIT_POINT)
+        Parrot_gc_free_memory_chunk(interp, old_mem);
+    else
+        Parrot_gc_free_fixed_size_storage(interp, HASH_ALLOC_SIZE(old_size), old_mem);
+
+
+    /* clear second half of the buckets, freed by old the index */
+    memset(new_buckets + N_BUCKETS(old_size), 0,
+            sizeof (HashBucket *) * old_size);
+
+    /* clear second half of the index */
+    memset(new_index + (old_size), 0, sizeof (HashBucket **) * old_size);
+
+
 
     /*
          +---+---+---+---+---+---+-+-+-+-+-+-+-+-+
-         |  buckets  | old_bi    |  new_bi       |
+         |  buckets  | old_index |  new_index    |
          +---+---+---+---+---+---+-+-+-+-+-+-+-+-+
          ^                       ^
          | new_mem               | hash->index
     */
 
-    bs     = new_mem;
-    old_bi = (HashBucket **)(bs + old_nb);
-    new_bi = (HashBucket **)(bs + new_nb);
-
-    /* things can have moved by this offset */
-    offset = (char *)new_mem - (char *)old_mem;
-
-    /* relocate the bucket index */
-    mem_sys_memmove(new_bi, old_bi, old_size * sizeof (HashBucket *));
-
     /* update hash data */
-    hash->index = new_bi;
-    hash->buckets        = bs;
-    hash->mask = new_size - 1;
-
-    /* clear freshly allocated bucket index */
-    memset(new_bi + old_size, 0, sizeof (HashBucket *) * (new_size - old_size));
+    hash->index     = new_index;
+    hash->buckets   = new_buckets;
+    hash->mask      = new_mask;
 
     /* reloc pointers and recalc bucket indices */
     for (i = 0; i < old_size; ++i) {
-        HashBucket **next_p = new_bi + i;
+        index = new_index + i;
 
-        while (*next_p != NULL) {
+        while (*index != NULL) {
             size_t new_loc;
             size_t hashval;
 
-            b = (HashBucket *)((char *)*next_p + offset);
+            bucket = (HashBucket *)((char *)*index + offset);
 
             /* rehash the bucket */
-            if (is_string_key) {
-                STRING *s = (STRING *)b->key;
+            if (hash->key_type == Hash_key_type_STRING
+            ||  hash->key_type == Hash_key_type_STRING_enc) {
+                STRING *s = (STRING *)bucket->key;
                 hashval   = s->hashval;
             }
             else {
-                hashval = hash_val_func(interp, b->key, hash->seed);
+                hashval = key_hash(interp, hash, bucket->key);
             }
 
-            new_loc = hashval & (new_size - 1);
+            new_loc = hashval & new_mask;
 
             if (i != new_loc) {
-                *next_p         = b->next;
-                b->next         = new_bi[new_loc];
-                new_bi[new_loc] = b;
+                *index              = bucket->next;
+                bucket->next        = new_index[new_loc];
+                new_index[new_loc]  = bucket;
             }
             else {
-                *next_p = b;
-                next_p  = &b->next;
+                *index = bucket;
+                index  = &bucket->next;
             }
         }
     }
 
     /* add new buckets to free_list
      * lowest bucket is top on free list and will be used first */
-    for (b = bs + old_nb; b < bs + new_nb - 1; ++b) {
-        b->next = b + 1;
-        b->key  = b->value = NULL;
+    bucket = new_buckets + N_BUCKETS(old_size);
+    for (i = N_BUCKETS(old_size)-1 ; i > 0; --i, ++bucket) {
+        bucket->next = bucket + 1;
     }
 
-    b->next = hash->free_list;
-    hash->free_list = bs + old_nb;
+    bucket->next = NULL;
+    hash->free_list = new_buckets + N_BUCKETS(old_size);
 }
 
 
@@ -848,9 +1144,7 @@
     ASSERT_ARGS(parrot_new_hash)
     return parrot_create_hash(interp,
             enum_type_PMC,
-            Hash_key_type_STRING,
-            hash_compare_string,
-            (hash_hash_key_fn)key_hash_STRING);
+            Hash_key_type_STRING);
 }
 
 
@@ -872,9 +1166,7 @@
     ASSERT_ARGS(parrot_new_cstring_hash)
     return parrot_create_hash(interp,
             enum_type_PMC,
-            Hash_key_type_cstring,
-            (hash_comp_fn)hash_compare_cstring,
-            (hash_hash_key_fn)key_hash_cstring);
+            Hash_key_type_cstring);
 }
 
 
@@ -896,9 +1188,7 @@
     ASSERT_ARGS(parrot_new_pointer_hash)
     return parrot_create_hash(interp,
             enum_type_ptr,
-            Hash_key_type_ptr,
-            hash_compare_pointer,
-            key_hash_pointer);
+            Hash_key_type_ptr);
 }
 
 
@@ -923,15 +1213,13 @@
     ASSERT_ARGS(parrot_new_intval_hash)
     return parrot_create_hash(interp,
             enum_type_INTVAL,
-            Hash_key_type_int,
-            hash_compare_int,
-            key_hash_int);
+            Hash_key_type_int);
 }
 
 /*
 
 =item C<Hash * parrot_create_hash(PARROT_INTERP, PARROT_DATA_TYPE val_type,
-Hash_key_type hkey_type, hash_comp_fn compare, hash_hash_key_fn keyhash)>
+Hash_key_type hkey_type)>
 
 Creates and initializes a hash.  Function pointers determine its behaviors.
 
@@ -943,42 +1231,29 @@
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-PARROT_MALLOC
 Hash *
-parrot_create_hash(PARROT_INTERP, PARROT_DATA_TYPE val_type, Hash_key_type hkey_type,
-        NOTNULL(hash_comp_fn compare), NOTNULL(hash_hash_key_fn keyhash))
+parrot_create_hash(PARROT_INTERP, PARROT_DATA_TYPE val_type, Hash_key_type hkey_type)
 {
     ASSERT_ARGS(parrot_create_hash)
-    return parrot_create_hash_sized(interp, val_type, hkey_type, compare, keyhash,
-                                    INITIAL_SIZE);
-}
-
-
-/*
-
-=item C<static UINTVAL round_up_pow2(UINTVAL x)>
-
-Round a value up to the nearest power of 2.
+    Hash * const hash = (Hash*) Parrot_gc_allocate_fixed_size_storage(interp, sizeof (Hash));
 
-=cut
-
-*/
+    hash->entry_type = val_type;
+    hash->key_type   = hkey_type;
+    hash->seed       = interp->hash_seed;
+    hash->mask       = 0;
+    hash->entries    = 0;
+    hash->index      = NULL;
+    hash->buckets    = NULL;
+    hash->free_list  = NULL;
 
-PARROT_INLINE
-static UINTVAL
-round_up_pow2(UINTVAL x) {
-    UINTVAL y = 1;
-    while (y < x)
-        y <<= 1;
-    return y;
+    return hash;
 }
 
 
 /*
 
 =item C<Hash * parrot_create_hash_sized(PARROT_INTERP, PARROT_DATA_TYPE
-val_type, Hash_key_type hkey_type, hash_comp_fn compare, hash_hash_key_fn
-keyhash, UINTVAL size)>
+val_type, Hash_key_type hkey_type, UINTVAL size)>
 
 Creates and initializes a hash, similar to C<parrot_create_hash>.
 
@@ -990,45 +1265,14 @@
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-PARROT_MALLOC
 Hash *
 parrot_create_hash_sized(PARROT_INTERP, PARROT_DATA_TYPE val_type, Hash_key_type hkey_type,
-        NOTNULL(hash_comp_fn compare), NOTNULL(hash_hash_key_fn keyhash), UINTVAL size)
+        UINTVAL size)
 {
     ASSERT_ARGS(parrot_create_hash_sized)
-    UINTVAL      initial_buckets = size > INITIAL_SIZE ? round_up_pow2(size) : INITIAL_SIZE;
-    HashBucket  *bp;
-    void        *alloc = Parrot_gc_allocate_memory_chunk_with_interior_pointers(
-                            interp, sizeof (Hash) + HASH_ALLOC_SIZE(initial_buckets));
-    Hash * const hash  = (Hash*)alloc;
-    size_t       i;
-
-    PARROT_ASSERT(initial_buckets % 4 == 0);
-
-    hash->compare    = compare;
-    hash->hash_val   = keyhash;
-    hash->entry_type = val_type;
-    hash->key_type   = hkey_type;
-    hash->seed       = interp->hash_seed;
-    hash->mask       = initial_buckets - 1;
-    hash->entries    = 0;
-
-    bp = (HashBucket *)((char *)alloc + sizeof (Hash));
-    hash->free_list = NULL;
-
-    /* fill free_list from hi addresses so that we can use
-     * buckets[i] directly in an OrderedHash, *if* nothing
-     * was deleted */
-
-    hash->buckets = bp;
-    bp += N_BUCKETS(initial_buckets);
-    hash->index = (HashBucket **)bp;
-
-    for (i = 0, --bp; i < N_BUCKETS(initial_buckets); ++i, --bp) {
-        bp->next        = hash->free_list;
-        hash->free_list = bp;
-    }
 
+    Hash *hash = parrot_create_hash(interp, val_type, hkey_type);
+    allocate_buckets(interp, hash, size);
     return hash;
 }
 
@@ -1050,10 +1294,14 @@
 parrot_hash_destroy(PARROT_INTERP, ARGFREE_NOTNULL(Hash *hash))
 {
     ASSERT_ARGS(parrot_hash_destroy)
-    HashBucket * const bp = (HashBucket*)((char*)hash + sizeof (Hash));
-    if (bp != hash->buckets)
-        mem_gc_free(interp, hash->buckets);
-    mem_gc_free(interp, hash);
+    if (hash->buckets){
+        if (hash->mask > SPLIT_POINT)
+            Parrot_gc_free_memory_chunk(interp, hash->buckets);
+        else
+            Parrot_gc_free_fixed_size_storage(interp,
+                HASH_ALLOC_SIZE(hash->mask+1), hash->buckets);
+    }
+    Parrot_gc_free_fixed_size_storage(interp, sizeof (Hash), hash);
 }
 
 
@@ -1148,57 +1396,34 @@
 parrot_hash_get_bucket(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN_NULLOK(const void *key))
 {
     ASSERT_ARGS(parrot_hash_get_bucket)
-    UINTVAL     hashval;
-    HashBucket *bucket;
-    const hash_hash_key_fn hash_val = hash->hash_val;
-    const hash_comp_fn     compare  = hash->compare;
+    DECL_CONST_CAST;
 
     if (hash->entries <= 0)
         return NULL;
 
-    if (hash_val == (hash_hash_key_fn)key_hash_STRING
-    &&  compare == hash_compare_string) {
-        /* fast path for string keys */
-        DECL_CONST_CAST;
-        STRING * const s = (STRING *)PARROT_const_cast(void *, key);
-
-        if (s->hashval)
-            hashval = s->hashval;
-        else
-            hashval = Parrot_str_to_hashval(interp, s);
-
-        bucket = hash->index[hashval & hash->mask];
+    if (hash->key_type == Hash_key_type_STRING) {
+        STRING * const s       = (STRING *)PARROT_const_cast(void *, key);
+        const size_t   hashval = key_hash_STRING(interp, s, hash->seed);
 
-        while (bucket) {
-            const STRING *s2 = (const STRING *)bucket->key;
-
-            if (s == s2
-            || (hashval == s2->hashval
-            &&  CHARSET_COMPARE(interp, s, s2) == 0))
-                return bucket;
-
-            bucket = bucket->next;
-        }
+        return parrot_hash_get_bucket_string(interp, hash, s, hashval);
     }
     else {
-        hashval = hash_val(interp, key, hash->seed);
-        bucket  = hash->index[hashval & hash->mask];
+        const size_t hashval = key_hash(interp, hash,
+                                    PARROT_const_cast(void *, key));
+        HashBucket  *bucket  = hash->index[hashval & hash->mask];
 
         while (bucket) {
-            /* key equality is always a match, so it's worth checking */
-            if (bucket->key == key
-
-            /* ... but the slower comparison is more accurate */
-            || ((compare)(interp, key, bucket->key) == 0))
-                return bucket;
+            if (hash_compare(interp, hash,
+                    PARROT_const_cast(void *, key),
+                    bucket->key) == 0)
+                break;
             bucket = bucket->next;
         }
-    }
 
-    return NULL;
+        return bucket;
+    }
 }
 
-
 /*
 
 =item C<void * parrot_hash_get(PARROT_INTERP, const Hash *hash, const void
@@ -1245,63 +1470,67 @@
 
 /*
 
-=item C<HashBucket* parrot_hash_put(PARROT_INTERP, Hash *hash, void *key, void
-*value)>
+=item C<static HashBucket * parrot_hash_get_bucket_string(PARROT_INTERP, const
+Hash *hash, STRING *s, UINTVAL hashval)>
 
-Puts the key and value into the hash. Note that C<key> is B<not> copied.
+Given a hash, a STRING key, and the hashval of the key, returns the appropriate
+bucket of the hash for the key.  This assumes buckets are already available, so
+ensure the hash has storage before calling this function.
 
 =cut
 
 */
 
-PARROT_EXPORT
-PARROT_IGNORABLE_RESULT
-PARROT_CANNOT_RETURN_NULL
-HashBucket*
-parrot_hash_put(PARROT_INTERP, ARGMOD(Hash *hash),
-        ARGIN_NULLOK(void *key), ARGIN_NULLOK(void *value))
-{
-    ASSERT_ARGS(parrot_hash_put)
-    UINTVAL     hashval;
-    HashBucket *bucket;
-    const hash_hash_key_fn hash_val = hash->hash_val;
-    const hash_comp_fn     compare  = hash->compare;
-
-    if (hash_val == (hash_hash_key_fn)key_hash_STRING
-    &&  compare == hash_compare_string) {
-        /* fast path for string keys */
-        STRING *s = (STRING *)key;
+PARROT_CAN_RETURN_NULL
+static HashBucket *
+parrot_hash_get_bucket_string(PARROT_INTERP, ARGIN(const Hash *hash),
+        ARGIN(STRING *s), UINTVAL hashval)
+{
+    ASSERT_ARGS(parrot_hash_get_bucket_string)
+    HashBucket *bucket = hash->index[hashval & hash->mask];
+
+    while (bucket) {
+        const STRING *s2 = (const STRING *)bucket->key;
+        if (s == s2)
+            break;
 
-        if (s->hashval)
-            hashval = s->hashval;
-        else
-            hashval = Parrot_str_to_hashval(interp, s);
+        /* manually inline part of string_equal  */
+        if (hashval == s2->hashval) {
+            if (s->encoding == s2->encoding) {
+                if ((STRING_byte_length(s) == STRING_byte_length(s2))
+                && (memcmp(s->strstart, s2->strstart, STRING_byte_length(s)) == 0))
+                    break;
+            } else if (Parrot_str_equal(interp, s, s2))
+                    break;
+        }
+        bucket = bucket->next;
+    }
 
-        bucket = hash->index[hashval & hash->mask];
+    return bucket;
+}
 
-        while (bucket) {
-            const STRING *s2 = (const STRING *)bucket->key;
 
-            if (s == s2
-            || (hashval == s2->hashval
-            &&  CHARSET_COMPARE(interp, s, s2) == 0))
-                break;
+/*
 
-            bucket = bucket->next;
-        }
-    }
-    else {
-        hashval = hash_val(interp, key, hash->seed);
-        bucket  = hash->index[hashval & hash->mask];
+=item C<static void parrot_hash_store_value_in_bucket(PARROT_INTERP, Hash *hash,
+HashBucket *bucket, INTVAL hashval, void *key, void *value)>
 
-        /* See if we have an existing value for this key */
-        while (bucket) {
-            /* store hash_val or not */
-            if (compare(interp, key, bucket->key) == 0)
-                break;
-            bucket = bucket->next;
-        }
-    }
+Given a hash, a bucket, the hashval of the key, the key, and its value, stores
+the value in the bucket.  The bucket can be NULL, in which case this function
+will allocate more storage as appropriate.
+
+Note that C<key> is B<not> copied.
+
+=cut
+
+*/
+
+static void
+parrot_hash_store_value_in_bucket(PARROT_INTERP, ARGMOD(Hash *hash),
+    ARGMOD_NULLOK(HashBucket *bucket), INTVAL hashval,
+    ARGIN_NULLOK(void *key), ARGIN_NULLOK(void *value))
+{
+    ASSERT_ARGS(parrot_hash_store_value_in_bucket)
 
     /* If we have a bucket already, put the value in it. Otherwise, we need
        to get a new bucket */
@@ -1310,20 +1539,68 @@
     else {
         /* Get a new bucket off the free list. If the free list is empty, we
            expand the hash so we get more items on the free list */
-        bucket = hash->free_list;
-        if (!bucket) {
+        if (!hash->free_list)
             expand_hash(interp, hash);
-            bucket = hash->free_list;
-        }
+
+        bucket = hash->free_list;
 
         /* Add the value to the new bucket, increasing the count of elements */
         ++hash->entries;
-        hash->free_list                = bucket->next;
-        bucket->key                    = key;
-        bucket->value                  = value;
-        bucket->next = hash->index[hashval & hash->mask];
+        hash->free_list                   = bucket->next;
+        bucket->key                       = key;
+        bucket->value                     = value;
+        bucket->next                      = hash->index[hashval & hash->mask];
         hash->index[hashval & hash->mask] = bucket;
     }
+}
+
+
+/*
+
+=item C<HashBucket* parrot_hash_put(PARROT_INTERP, Hash *hash, void *key, void
+*value)>
+
+Puts the key and value into the hash. Note that C<key> is B<not> copied.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+PARROT_IGNORABLE_RESULT
+PARROT_CANNOT_RETURN_NULL
+HashBucket*
+parrot_hash_put(PARROT_INTERP, ARGMOD(Hash *hash),
+        ARGIN_NULLOK(void *key), ARGIN_NULLOK(void *value))
+{
+    ASSERT_ARGS(parrot_hash_put)
+    HashBucket *bucket = NULL;
+    size_t      hashval;
+
+    if (!hash->buckets){
+        allocate_buckets(interp, hash, INITIAL_SIZE);
+        hashval = key_hash(interp, hash, key);
+    }
+    else {
+        if (hash->key_type == Hash_key_type_STRING) {
+            STRING *s = (STRING *)key;
+            hashval = key_hash_STRING(interp, s, hash->seed);
+            bucket  = parrot_hash_get_bucket_string(interp, hash, s, hashval);
+        }
+        else {
+            hashval = key_hash(interp, hash, key);
+            bucket  = hash->index[hashval & hash->mask];
+
+            while (bucket) {
+                if (hash_compare(interp, hash, key, bucket->key) == 0)
+                    break;
+                bucket = bucket->next;
+            }
+        }
+    }
+
+    parrot_hash_store_value_in_bucket(interp, hash, bucket, hashval,
+        key, value);
 
     return bucket;
 }
@@ -1344,19 +1621,20 @@
 parrot_hash_delete(PARROT_INTERP, ARGMOD(Hash *hash), ARGIN(void *key))
 {
     ASSERT_ARGS(parrot_hash_delete)
-    const UINTVAL hashval = (hash->hash_val)(interp, key, hash->seed) & hash->mask;
-    HashBucket   **prev   = &hash->index[hashval];
-    if (*prev) {
-        const hash_comp_fn compare = hash->compare;
-        for (; *prev; prev = &(*prev)->next) {
-            HashBucket *current = *prev;
-            if ((compare)(interp, key, current->key) == 0) {
-                *prev = current->next;
-                --hash->entries;
-                current->next    = hash->free_list;
-                current->key     = NULL;
-                hash->free_list = current;
-                return;
+    const UINTVAL hashval = key_hash(interp, hash, key) & hash->mask;
+    if (hash->buckets){
+        HashBucket   **prev   = &hash->index[hashval];
+        if (*prev) {
+            for (; *prev; prev = &(*prev)->next) {
+                HashBucket *current = *prev;
+                if (hash_compare(interp, hash, key, current->key) == 0) {
+                    *prev = current->next;
+                    --hash->entries;
+                    current->next    = hash->free_list;
+                    current->key     = NULL;
+                    hash->free_list = current;
+                    return;
+                }
             }
         }
     }
@@ -1400,17 +1678,20 @@
 {
     ASSERT_ARGS(parrot_hash_clone_prunable)
 
+    /* dest hash has the same size as source hash */
+    if (dest->buckets){
+        if (dest->mask+1 > SPLIT_POINT)
+            Parrot_gc_free_memory_chunk(interp, dest->buckets);
+        else
+            Parrot_gc_free_fixed_size_storage(interp, HASH_ALLOC_SIZE(dest->mask+1), dest->buckets);
+    }
+    allocate_buckets(interp, dest, hash->mask);
+
     parrot_hash_iterate(hash,
         void         *valtmp;
         void * const  key = _bucket->key;
 
         switch (hash->entry_type) {
-          case enum_type_undef:
-          case enum_type_ptr:
-          case enum_type_INTVAL:
-            valtmp = (void *)_bucket->value;
-            break;
-
           case enum_type_STRING:
             valtmp = _bucket->value;
             break;
@@ -1425,13 +1706,22 @@
                     valtmp = _bucket->value;
             break;
 
+          case enum_type_undef:
+          case enum_type_ptr:
+          case enum_type_INTVAL:
+            valtmp = (void *)_bucket->value;
+            break;
+
           default:
             valtmp = NULL; /* avoid warning */
             Parrot_ex_throw_from_c_args(interp, NULL, -1,
                     "hash corruption: type = %d\n", hash->entry_type);
         };
-        if (key)
-            parrot_hash_put(interp, dest, key, valtmp););
+        if (key) {
+            const size_t hashval = key_hash(interp, dest, key);
+            /* hash tables has no duplicate keys */
+            parrot_hash_store_value_in_bucket(interp, dest, NULL, hashval, key, valtmp);
+        });
 }
 
 /*
@@ -1532,9 +1822,11 @@
         break;
         /* Currently PMCs are stringified */
       case Hash_key_type_PMC:
+      case Hash_key_type_PMC_ptr:
         ret = (void *)get_integer_pmc(interp, key);
         break;
       case Hash_key_type_STRING:
+      case Hash_key_type_STRING_enc:
         ret = (void *)Parrot_str_from_int(interp, key);
         break;
       default:
@@ -1571,10 +1863,12 @@
       }
 
       case Hash_key_type_PMC:
+      case Hash_key_type_PMC_ptr:
         ret = get_string_pmc(interp, key);
         break;
 
       case Hash_key_type_STRING:
+      case Hash_key_type_STRING_enc:
         ret = key;
         break;
 
@@ -1609,6 +1903,7 @@
             break;
         }
       case Hash_key_type_PMC:
+      case Hash_key_type_PMC_ptr:
         {
             /* Extract real value from Key (and box it if nessary) */
             if (key->vtable->base_type == enum_class_Key)
@@ -1637,6 +1932,7 @@
             break;
         }
       case Hash_key_type_STRING:
+      case Hash_key_type_STRING_enc:
         {
             STRING * const tmp = VTABLE_get_string(interp, key);
             if (STRING_IS_NULL(tmp))
@@ -1672,9 +1968,11 @@
         ret = (INTVAL)key;
         break;
       case Hash_key_type_PMC:
+      case Hash_key_type_PMC_ptr:
         ret = VTABLE_get_integer(interp, (PMC *)key);
         break;
       case Hash_key_type_STRING:
+      case Hash_key_type_STRING_enc:
         ret = Parrot_str_to_int(interp, (STRING *)key);
         break;
       default:
@@ -1706,10 +2004,12 @@
         break;
 
       case Hash_key_type_PMC:
+      case Hash_key_type_PMC_ptr:
         ret = VTABLE_get_string(interp, (PMC *)key);
         break;
 
       case Hash_key_type_STRING:
+      case Hash_key_type_STRING_enc:
         ret = (STRING *)key;
         break;
 
@@ -1741,9 +2041,11 @@
         ret = get_integer_pmc(interp, (INTVAL)key);
         break;
       case Hash_key_type_PMC:
+      case Hash_key_type_PMC_ptr:
         ret = (PMC*)key;
         break;
       case Hash_key_type_STRING:
+      case Hash_key_type_STRING_enc:
         ret = get_string_pmc(interp, (STRING*)key);
         break;
       default:

Modified: branches/html_cleanup/src/hll.c
==============================================================================
--- branches/html_cleanup/src/hll.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/hll.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -329,21 +329,26 @@
         INTVAL core_type, INTVAL hll_type)
 {
     ASSERT_ARGS(Parrot_register_HLL_type)
-    PMC  *entry, *type_hash;
-    PMC  *hll_info = interp->HLL_info;
-    const INTVAL n = VTABLE_elements(interp, hll_info);
 
-    if (hll_id >= n)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_GLOBAL_NOT_FOUND,
-            "no such HLL ID (%vd)", hll_id);
-
-    entry     = VTABLE_get_pmc_keyed_int(interp, hll_info, hll_id);
-    PARROT_ASSERT(!PMC_IS_NULL(entry));
-
-    type_hash = VTABLE_get_pmc_keyed_int(interp, entry, e_HLL_typemap);
-    PARROT_ASSERT(!PMC_IS_NULL(type_hash));
+    if (hll_id == Parrot_get_HLL_id(interp, CONST_STRING(interp, "parrot")))
+        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+            "Cannot map without an HLL");
+    else {
+        PMC *hll_info = interp->HLL_info;
+        const INTVAL n = VTABLE_elements(interp, hll_info);
+        if (hll_id >= n)
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_GLOBAL_NOT_FOUND,
+                "no such HLL ID (%vd)", hll_id);
+        else {
+            PMC  *type_hash;
+            PMC  *entry = VTABLE_get_pmc_keyed_int(interp, hll_info, hll_id);
+            PARROT_ASSERT(!PMC_IS_NULL(entry));
+            type_hash = VTABLE_get_pmc_keyed_int(interp, entry, e_HLL_typemap);
+            PARROT_ASSERT(!PMC_IS_NULL(type_hash));
 
-    VTABLE_set_integer_keyed_int(interp, type_hash, core_type, hll_type);
+            VTABLE_set_integer_keyed_int(interp, type_hash, core_type, hll_type);
+        }
+    }
 }
 
 /*

Modified: branches/html_cleanup/src/interp/inter_create.c
==============================================================================
--- branches/html_cleanup/src/interp/inter_create.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/interp/inter_create.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -165,6 +165,7 @@
     interp->gc_sys->sys_type = parent
                                     ? parent->gc_sys->sys_type
                                     : PARROT_GC_DEFAULT_TYPE;
+    interp->gc_threshold     = GC_DYNAMIC_THRESHOLD_DEFAULT;
 
     /* Done. Return and be done with it */
     return interp;
@@ -252,14 +253,10 @@
     Parrot_runcore_init(interp);
 
     /* Load the core op func and info tables */
-    interp->op_lib          = PARROT_CORE_OPLIB_INIT(interp, 1);
-    interp->op_count        = interp->op_lib->op_count;
-    interp->op_func_table   = interp->op_lib->op_func_table;
-    interp->op_info_table   = interp->op_lib->op_info_table;
-    interp->all_op_libs     = NULL;
-    interp->evc_func_table  = NULL;
-    interp->save_func_table = NULL;
-    interp->code            = NULL;
+    interp->all_op_libs         = NULL;
+    interp->evc_func_table      = NULL;
+    interp->evc_func_table_size = 0;
+    interp->code                = NULL;
 
     /* create the root set registry */
     interp->gc_registry     = Parrot_pmc_new(interp, enum_class_AddrRegistry);
@@ -446,10 +443,11 @@
 
     if (interp->evc_func_table) {
         mem_gc_free(interp, interp->evc_func_table);
-        interp->evc_func_table = NULL;
+        interp->evc_func_table      = NULL;
+        interp->evc_func_table_size = 0;
     }
 
-    /* strings, charsets, encodings - only once */
+    /* strings, encodings - only once */
     Parrot_str_finish(interp);
 
     PARROT_CORE_OPLIB_INIT(interp, 0);

Modified: branches/html_cleanup/src/interp/inter_misc.c
==============================================================================
--- branches/html_cleanup/src/interp/inter_misc.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/interp/inter_misc.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -48,13 +48,13 @@
 {
     ASSERT_ARGS(register_nci_method)
     PMC    * const method      = Parrot_pmc_new(interp, enum_class_NCI);
-    STRING * const method_name = string_make(interp, name, strlen(name),
-        NULL, PObj_constant_FLAG|PObj_external_FLAG);
+    STRING * const method_name = Parrot_str_new_init(interp, name, strlen(name),
+        Parrot_default_encoding_ptr, PObj_constant_FLAG|PObj_external_FLAG);
 
     /* create call func */
     VTABLE_set_pointer_keyed_str(interp, method,
-            string_make(interp, proto, strlen(proto), NULL,
-                PObj_constant_FLAG|PObj_external_FLAG),
+            Parrot_str_new_init(interp, proto, strlen(proto),
+                Parrot_default_encoding_ptr, PObj_constant_FLAG|PObj_external_FLAG),
             func);
 
     /* insert it into namespace */
@@ -64,8 +64,8 @@
 
 /*
 
-=item C<void register_raw_nci_method_in_ns(PARROT_INTERP, const int type, void
-*func, STRING *name)>
+=item C<void register_native_pcc_method_in_ns(PARROT_INTERP, const int type,
+void *func, STRING *name, STRING *signature)>
 
 Create an entry in the C<nci_method_table> for the given raw NCI method
 of PMC class C<type>.
@@ -76,14 +76,14 @@
 
 PARROT_EXPORT
 void
-register_raw_nci_method_in_ns(PARROT_INTERP, const int type, ARGIN(void *func),
-        ARGIN(STRING *name))
+register_native_pcc_method_in_ns(PARROT_INTERP, const int type, ARGIN(void *func),
+        ARGIN(STRING *name), ARGIN(STRING *signature))
 {
-    ASSERT_ARGS(register_raw_nci_method_in_ns)
-    PMC    * const method      = Parrot_pmc_new(interp, enum_class_NCI);
+    ASSERT_ARGS(register_native_pcc_method_in_ns)
+    PMC * method = Parrot_pmc_new(interp, enum_class_NativePCCMethod);
 
     /* setup call func */
-    VTABLE_set_pointer(interp, method, func);
+    VTABLE_set_pointer_keyed_str(interp, method, signature, func);
 
     /* insert it into namespace */
     VTABLE_set_pmc_keyed_str(interp, interp->vtables[type]->_namespace,

Modified: branches/html_cleanup/src/io/api.c
==============================================================================
--- branches/html_cleanup/src/io/api.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/io/api.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -335,7 +335,7 @@
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_PIO_ERROR,
                 "Cannot read from a closed or non-readable filehandle");
 
-        result = Parrot_str_new_noinit(interp, enum_stringrep_one, length);
+        result = Parrot_str_new_noinit(interp, length);
         result->bufused = length;
 
         if (Parrot_io_is_encoding(interp, pmc, CONST_STRING(interp, "utf8")))

Modified: branches/html_cleanup/src/io/buffer.c
==============================================================================
--- branches/html_cleanup/src/io/buffer.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/io/buffer.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -232,7 +232,7 @@
     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,
+                        Parrot_default_encoding_ptr,
                         PObj_external_FLAG);
     size_t   got  = PIO_READ(interp, filehandle, &s);
 
@@ -293,7 +293,7 @@
         return Parrot_io_readline_buffer(interp, filehandle, buf);
 
     if (*buf == NULL)
-        *buf = Parrot_str_new_noinit(interp, enum_stringrep_one, 2048);
+        *buf = Parrot_str_new_noinit(interp, 2048);
 
     s       = *buf;
     len     = s->bufused;
@@ -338,7 +338,7 @@
 
         if (len >= Parrot_io_get_buffer_size(interp, filehandle)) {
             STRING *sf = Parrot_str_new_init(interp, (char *)out_buf, len,
-                PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET,
+                Parrot_default_encoding_ptr,
                 PObj_external_FLAG);
             got                 = PIO_READ(interp, filehandle, &sf);
             s->strlen           = s->bufused = current + got;

Modified: branches/html_cleanup/src/io/filehandle.c
==============================================================================
--- branches/html_cleanup/src/io/filehandle.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/io/filehandle.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -121,7 +121,7 @@
      * when we get a NULL string, we read a default len
      */
     if (*buf == NULL) {
-        *buf = Parrot_str_new_noinit(interp, enum_stringrep_one, len);
+        *buf = Parrot_str_new_noinit(interp, len);
         return *buf;
     }
     else {

Modified: branches/html_cleanup/src/io/socket_unix.c
==============================================================================
--- branches/html_cleanup/src/io/socket_unix.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/io/socket_unix.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -349,10 +349,11 @@
 AGAIN:
     if ((error = recv(io->os_handle, buf, 2048, 0)) >= 0) {
         bytesread += error;
-        /* The charset should probably be 'binary', but right now httpd.pir
+        /* The encoding should probably be 'binary', but right now httpd.pir
          * only works with 'ascii'
          */
-        *s = string_make(interp, buf, bytesread, "ascii", 0);
+        *s = Parrot_str_new_init(interp, buf, bytesread,
+                Parrot_ascii_encoding_ptr, 0);
         return bytesread;
     }
     else {
@@ -369,11 +370,11 @@
           case ECONNRESET:
             /* XXX why close it on err return result is -1 anyway */
             close(io->os_handle);
-            *s = Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
+            *s = Parrot_str_new_noinit(interp, 0);
             return -1;
           default:
             close(io->os_handle);
-            *s = Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
+            *s = Parrot_str_new_noinit(interp, 0);
             return -1;
         }
     }

Modified: branches/html_cleanup/src/io/socket_win32.c
==============================================================================
--- branches/html_cleanup/src/io/socket_win32.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/io/socket_win32.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -299,10 +299,11 @@
 AGAIN:
     if ((error = recv((int)io->os_handle, buf, 2048, 0)) >= 0) {
         bytesread += error;
-        /* The charset should probably be 'binary', but right now httpd.pir
+        /* The encoding should probably be 'binary', but right now httpd.pir
          * only works with 'ascii'
          */
-        *s = string_make(interp, buf, bytesread, "ascii", 0);
+        *s = Parrot_str_new_init(interp, buf, bytesread,
+                Parrot_ascii_encoding_ptr, 0);
         return bytesread;
     }
     else {
@@ -319,11 +320,11 @@
           case WSAECONNRESET:
             /* XXX why close it on err return result is -1 anyway */
             close((int)io->os_handle);
-            *s = Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
+            *s = Parrot_str_new_noinit(interp, 0);
             return -1;
           default:
             close((int)io->os_handle);
-            *s = Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
+            *s = Parrot_str_new_noinit(interp, 0);
             return -1;
         }
     }

Modified: branches/html_cleanup/src/io/utf8.c
==============================================================================
--- branches/html_cleanup/src/io/utf8.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/io/utf8.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -53,7 +53,6 @@
 
     size_t len  = Parrot_io_read_buffer(interp, filehandle, buf);
     s           = *buf;
-    s->charset  = Parrot_unicode_charset_ptr;
     s->encoding = Parrot_utf8_encoding_ptr;
 
     /* count chars, verify utf8 */
@@ -74,11 +73,10 @@
 
                 /* need len - 1 more chars */
                 --len2;
-                s2 = Parrot_str_new_init(interp, NULL, len2, Parrot_utf8_encoding_ptr,
-                                         Parrot_unicode_charset_ptr, 0);
+                s2 = Parrot_str_new_init(interp, NULL, len2,
+                        Parrot_utf8_encoding_ptr, 0);
                 s2->bufused  = len2;
 
-                /* TT #1257: need to check the amount read here? */
                 read = Parrot_io_read_buffer(interp, filehandle, &s2);
                 UNUSED(read);
 

Modified: branches/html_cleanup/src/library.c
==============================================================================
--- branches/html_cleanup/src/library.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/library.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -345,7 +345,7 @@
     const char * const file_name = (const char *)file->strstart;
     if (file->strlen <= 1)
         return 0;
-    PARROT_ASSERT(file->encoding == Parrot_fixed_8_encoding_ptr ||
+    PARROT_ASSERT(STRING_max_bytes_per_codepoint(file) == 1 ||
             file->encoding == Parrot_utf8_encoding_ptr);
 
     /* XXX  ../foo, ./bar */
@@ -380,12 +380,8 @@
 cnv_to_win32_filesep(ARGMOD(STRING *path))
 {
     ASSERT_ARGS(cnv_to_win32_filesep)
-    char* cnv;
+    char *cnv = path->strstart;
 
-    PARROT_ASSERT(path->encoding == Parrot_fixed_8_encoding_ptr ||
-        path->encoding == Parrot_utf8_encoding_ptr);
-
-    cnv = path->strstart;
     while ((cnv = strchr(cnv, path_separator)) != NULL)
         *cnv = win32_path_separator;
 }
@@ -788,46 +784,6 @@
 
 /*
 
-=item C<char* Parrot_get_runtime_prefix(PARROT_INTERP)>
-
-Return a malloced C-string for the runtime prefix.  The calling function
-must free it.
-
-This function is deprecated, use Parrot_get_runtime_path instead.
-See TT #1191
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-char*
-Parrot_get_runtime_prefix(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_get_runtime_prefix)
-    char * const env = Parrot_getenv(interp, CONST_STRING(interp, "PARROT_RUNTIME"));
-
-    Parrot_warn_deprecated(interp, "Parrot_get_runtime_prefix is deprecated TT #1191");
-    if (env)
-        return env;
-    else {
-        PMC    * const config_hash =
-            VTABLE_get_pmc_keyed_int(interp, interp->iglobals, (INTVAL) IGLOBALS_CONFIG_HASH);
-
-        if (VTABLE_elements(interp, config_hash)) {
-            STRING * const key = CONST_STRING(interp, "prefix");
-            STRING * const s   = VTABLE_get_string_keyed_str(interp, config_hash, key);
-            return Parrot_str_to_cstring(interp, s);
-        }
-        else
-            return mem_sys_strdup(".");
-    }
-}
-
-/*
-
 =item C<STRING * Parrot_get_runtime_path(PARROT_INTERP)>
 
 Return a string for the runtime prefix.
@@ -887,23 +843,21 @@
     /* This is a quick fix for TT #65
      * TODO: redo it with the string reimplementation
      */
-    const char *   charset = Parrot_charset_c_name(interp,
-            Parrot_charset_number_of_str(interp, in));
-    STRING * const slash1  = string_make(interp, "/", 1, charset,
-            PObj_external_FLAG|PObj_constant_FLAG);
-    STRING * const slash2  = string_make(interp, "\\", 1, charset,
-            PObj_external_FLAG|PObj_constant_FLAG);
-    STRING * const dot     = string_make(interp, ".", 1, charset,
-            PObj_external_FLAG|PObj_constant_FLAG);
+    STRING * const slash1 = Parrot_str_new_init(interp, "/", 1,
+            in->encoding, PObj_external_FLAG|PObj_constant_FLAG);
+    STRING * const slash2 = Parrot_str_new_init(interp, "\\", 1,
+            in->encoding, PObj_external_FLAG|PObj_constant_FLAG);
+    STRING * const dot    = Parrot_str_new_init(interp, ".", 1,
+            in->encoding, PObj_external_FLAG|PObj_constant_FLAG);
 
     const INTVAL len = Parrot_str_byte_length(interp, in);
     STRING *stem;
     INTVAL pos_sl, pos_dot;
 
-    pos_sl = CHARSET_RINDEX(interp, in, slash1, len);
+    pos_sl = STRING_rindex(interp, in, slash1, len);
     if (pos_sl == -1)
-        pos_sl = CHARSET_RINDEX(interp, in, slash2, len);
-    pos_dot = CHARSET_RINDEX(interp, in, dot, len);
+        pos_sl = STRING_rindex(interp, in, slash2, len);
+    pos_dot = STRING_rindex(interp, in, dot, len);
 
     /* ignore dot in directory name */
     if (pos_dot != -1 && pos_dot < pos_sl)

Modified: branches/html_cleanup/src/longopt.c
==============================================================================
--- branches/html_cleanup/src/longopt.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/longopt.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -92,6 +92,7 @@
         { 'O', 'O', OPTION_optional_FLAG, { "--optimize" } },
         { 'R', 'R', OPTION_required_FLAG, { "--runcore" } },
         { 'g', 'g', OPTION_required_FLAG, { "--gc" } },
+        { '\0', OPT_GC_THRESHOLD, OPTION_required_FLAG, { "--gc-threshold" } },
         { 'V', 'V', (OPTION_flags)0, { "--version" } },
         { 'X', 'X', OPTION_required_FLAG, { "--dynext" } },
         { '\0', OPT_DESTROY_FLAG, (OPTION_flags)0,

Modified: branches/html_cleanup/src/main.c
==============================================================================
--- branches/html_cleanup/src/main.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/main.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -39,6 +39,11 @@
 static void help_debug(void);
 PARROT_WARN_UNUSED_RESULT
 PARROT_PURE_FUNCTION
+static int is_all_digits(ARGIN(const char *s))
+        __attribute__nonnull__(1);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
 static int is_all_hex_digits(ARGIN(const char *s))
         __attribute__nonnull__(1);
 
@@ -74,6 +79,8 @@
 
 #define ASSERT_ARGS_help __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_help_debug __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_is_all_digits __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_is_all_hex_digits __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_version __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
@@ -159,6 +166,29 @@
 
 /*
 
+=item C<static int is_all_digits(const char *s)>
+
+Tests all characters in a string are decimal digits.
+Returns 1 if true, 0 as soon as a non-decimal found
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
+static int
+is_all_digits(ARGIN(const char *s))
+{
+    ASSERT_ARGS(is_all_digits)
+    for (; *s; ++s)
+        if (!isdigit((unsigned char)*s))
+            return 0;
+    return 1;
+}
+
+/*
+
 =item C<static int is_all_hex_digits(const char *s)>
 
 Tests all characters in a string are hexadecimal digits.
@@ -278,6 +308,7 @@
     printf(
     "    -w --warnings\n"
     "    -G --no-gc\n"
+    "       --gc-threshold=percentage    maximum memory wasted by GC\n"
     "       --gc-debug\n"
     "       --leak-test|--destroy-at-end\n"
     "    -g --gc ms|inf set GC type\n"
@@ -367,6 +398,29 @@
             }
             break;
         }
+        else if (!strncmp(arg, "--gc-threshold", 14)) {
+
+            if ((arg = strrchr(arg, '=')))
+                ++arg;
+            else
+                arg = argv[++pos];
+
+            if (is_all_digits(arg)) {
+                interp->gc_threshold = strtoul(arg, NULL, 10);
+
+                if (interp->gc_threshold > 1000) {
+                    fprintf(stderr, "error: maximum GC threshold is 1000\n");
+                    exit(EXIT_FAILURE);
+                }
+            }
+            else {
+                fprintf(stderr, "error: invalid GC threshold specified:"
+                        "'%s'\n", arg);
+                exit(EXIT_FAILURE);
+            }
+            ++pos;
+            arg = argv[pos];
+        }
         else if (!strncmp(arg, "--hash-seed", 11)) {
 
             if ((arg = strrchr(arg, '=')))
@@ -444,6 +498,9 @@
           case 'g':
             /* Handled in parseflags_minimal */
             break;
+          case OPT_GC_THRESHOLD:
+            /* handled in parseflags_minimal */
+            break;
           case 't':
             if (opt.opt_arg && is_all_hex_digits(opt.opt_arg)) {
                 const unsigned long _temp = strtoul(opt.opt_arg, NULL, 16);

Modified: branches/html_cleanup/src/misc.c
==============================================================================
--- branches/html_cleanup/src/misc.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/misc.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -87,8 +87,8 @@
 Parrot_vsprintf_c(PARROT_INTERP, ARGIN(const char *pat), va_list args)
 {
     ASSERT_ARGS(Parrot_vsprintf_c)
-    STRING * const realpat = string_make(interp, pat, strlen(pat),
-                                  NULL, PObj_external_FLAG);
+    STRING * const realpat = Parrot_str_new_init(interp, pat, strlen(pat),
+            Parrot_default_encoding_ptr, PObj_external_FLAG);
 
     STRING * const ret = Parrot_vsprintf_s(interp, realpat, args);
 

Modified: branches/html_cleanup/src/multidispatch.c
==============================================================================
--- branches/html_cleanup/src/multidispatch.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/multidispatch.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -43,6 +43,7 @@
 #include "parrot/oplib/ops.h"
 #include "multidispatch.str"
 #include "pmc/pmc_nci.h"
+#include "pmc/pmc_nativepccmethod.h"
 #include "pmc/pmc_sub.h"
 #include "pmc/pmc_callcontext.h"
 
@@ -590,8 +591,17 @@
     Parrot_Sub_attributes *sub;
     INTVAL      args, dist, i, j, n, m;
 
-    /* has to be a builtin multi method */
-    if (pmc->vtable->base_type == enum_class_NCI) {
+    if (pmc->vtable->base_type == enum_class_NativePCCMethod) {
+        GETATTR_NativePCCMethod_mmd_multi_sig(interp, pmc, multi_sig);
+        if (PMC_IS_NULL(multi_sig)) {
+            STRING *long_sig;
+
+            GETATTR_NativePCCMethod_mmd_long_signature(interp, pmc, long_sig);
+            multi_sig = mmd_build_type_tuple_from_long_sig(interp, long_sig);
+            SETATTR_NativePCCMethod_mmd_multi_sig(interp, pmc, multi_sig);
+        }
+    }
+    else if (pmc->vtable->base_type == enum_class_NCI) {
         GETATTR_NCI_multi_sig(interp, pmc, multi_sig);
         if (PMC_IS_NULL(multi_sig)) {
             STRING *long_sig;
@@ -602,10 +612,10 @@
         }
     }
     else {
-        /* not a multi; no distance */
         PMC_get_sub(interp, pmc, sub);
+
         if (!sub->multi_signature)
-            return 0;
+            return 0; /* not a multi; no distance */
 
         multi_sig = Parrot_mmd_get_cached_multi_sig(interp, pmc);
     }
@@ -969,7 +979,10 @@
     /* Attach a type tuple array to the sub for multi dispatch */
     PMC    *multi_sig = mmd_build_type_tuple_from_type_list(interp, type_list);
 
-    if (sub_obj->vtable->base_type == enum_class_NCI) {
+    if (sub_obj->vtable->base_type == enum_class_NativePCCMethod) {
+        SETATTR_NativePCCMethod_mmd_multi_sig(interp, sub_obj, multi_sig);
+    }
+    else if (sub_obj->vtable->base_type == enum_class_NCI) {
         SETATTR_NCI_multi_sig(interp, sub_obj, multi_sig);
     }
     else if (VTABLE_isa(interp, sub_obj, sub_str)) {

Modified: branches/html_cleanup/src/namespace.c
==============================================================================
--- branches/html_cleanup/src/namespace.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/namespace.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2004-2009, Parrot Foundation.
+Copyright (C) 2004-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -131,9 +131,12 @@
     ARGIN(STRING *key), int flags)
 {
     ASSERT_ARGS(internal_ns_keyed_str)
-    PMC * const ns = VTABLE_get_pmc_keyed_str(interp, base_ns, key);
+    PMC    * const ns     = VTABLE_get_pmc_keyed_str(interp, base_ns, key);
+    STRING * const namesp = CONST_STRING(interp, "NameSpace");
 
-    if (!PMC_IS_NULL(ns) && VTABLE_isa(interp, ns, CONST_STRING(interp, "NameSpace")))
+    if (!PMC_IS_NULL(ns)
+    && (ns->vtable->base_type == enum_class_NameSpace
+     || VTABLE_isa(interp, ns, namesp)))
         return ns;
 
     return internal_ns_maybe_create(interp, base_ns, key, flags);
@@ -200,12 +203,12 @@
 {
     ASSERT_ARGS(internal_ns_keyed)
 
-    if (VTABLE_isa(interp, pmc_key, CONST_STRING(interp, "String"))) {
+    if (PMC_IS_TYPE(pmc_key, Key))
+        return internal_ns_keyed_key(interp, base_ns, pmc_key, flags);
+    else if (VTABLE_isa(interp, pmc_key, CONST_STRING(interp, "String"))) {
         STRING * const str_key = VTABLE_get_string(interp, pmc_key);
         return internal_ns_keyed_str(interp, base_ns, str_key, flags);
     }
-    else if (PMC_IS_TYPE(pmc_key, Key))
-        return internal_ns_keyed_key(interp, base_ns, pmc_key, flags);
     else {
         /* array of strings */
         STRING * const isans = CONST_STRING(interp, "NameSpace");
@@ -727,9 +730,6 @@
     PMC *ns;
     Parrot_Sub_attributes *sub;
 
-    /* PF structures aren't fully constructed yet */
-    Parrot_block_GC_mark(interp);
-
     /* store relative to HLL namespace */
     PMC_get_sub(interp, sub_pmc, sub);
     Parrot_pcc_set_HLL(interp, CURRENT_CONTEXT(interp), sub->HLL_id);
@@ -762,7 +762,6 @@
 
     /* restore HLL_id */
     Parrot_pcc_set_HLL(interp, CURRENT_CONTEXT(interp), cur_id);
-    Parrot_unblock_GC_mark(interp);
 }
 
 /*

Modified: branches/html_cleanup/src/nci/core_thunks.c
==============================================================================
--- branches/html_cleanup/src/nci/core_thunks.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/nci/core_thunks.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -45,7 +45,7 @@
     typedef double(* func_t)(PARROT_INTERP, PMC *, double);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     FLOATVAL return_data;
@@ -69,7 +69,7 @@
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
@@ -93,7 +93,7 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     PMC * return_data;
@@ -117,7 +117,7 @@
     typedef PMC *(* func_t)(PARROT_INTERP, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     PMC * return_data;
@@ -131,7 +131,7 @@
     return_data =  (PMC *)(*fn_pointer)(interp, t_1);
     ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
-if (t_1) Parrot_str_free_cstring(t_1);
+if (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 }
 static void
 pcf_S_JOS(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -139,7 +139,7 @@
     typedef STRING *(* func_t)(PARROT_INTERP, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     STRING * return_data;
@@ -163,7 +163,7 @@
     typedef INTVAL(* func_t)(PARROT_INTERP, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
@@ -185,7 +185,7 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, STRING *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     void * return_data;
@@ -211,7 +211,7 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     void * return_data;
@@ -235,7 +235,7 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     PMC * return_data;
@@ -259,7 +259,7 @@
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
@@ -283,7 +283,7 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     PMC * return_data;
@@ -307,7 +307,7 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     PMC * return_data;
@@ -333,7 +333,7 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, PMC *, STRING *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     void * return_data;
@@ -361,7 +361,7 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     void * return_data;
@@ -387,7 +387,7 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, INTVAL, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     void * return_data;
@@ -413,7 +413,7 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, STRING *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     void * return_data;
@@ -439,7 +439,7 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, FLOATVAL, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     void * return_data;
@@ -465,7 +465,7 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     void * return_data;
@@ -489,7 +489,7 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     void * return_data;
@@ -513,7 +513,7 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     void * return_data;
@@ -537,7 +537,7 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, FLOATVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     void * return_data;
@@ -561,7 +561,7 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     PMC * return_data;
@@ -587,7 +587,7 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, INTVAL, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     PMC * return_data;
@@ -613,7 +613,7 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, STRING *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     PMC * return_data;
@@ -639,7 +639,7 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, FLOATVAL, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     PMC * return_data;
@@ -665,7 +665,7 @@
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
@@ -689,7 +689,7 @@
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
@@ -713,7 +713,7 @@
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, FLOATVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
@@ -737,7 +737,7 @@
     typedef int(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
@@ -759,7 +759,7 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     void * return_data;
@@ -781,7 +781,7 @@
     typedef int(* func_t)(PARROT_INTERP, PMC *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
@@ -805,7 +805,7 @@
     typedef int(* func_t)(PARROT_INTERP, PMC *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
@@ -831,7 +831,7 @@
     typedef int(* func_t)(PARROT_INTERP, PMC *, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
@@ -859,7 +859,7 @@
     typedef int(* func_t)(PARROT_INTERP, PMC *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
@@ -875,7 +875,7 @@
     ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
-if (t_2) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 }
 static void
 pcf_P_JOSSS(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -883,7 +883,7 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, STRING *, STRING *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     PMC * return_data;
@@ -911,7 +911,7 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, STRING *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     void * return_data;
@@ -937,7 +937,7 @@
     typedef STRING *(* func_t)(PARROT_INTERP, PMC *, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     STRING * return_data;
@@ -961,7 +961,7 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     void * return_data;
@@ -985,7 +985,7 @@
     typedef int(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
@@ -1011,7 +1011,7 @@
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
@@ -1037,7 +1037,7 @@
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, INTVAL, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
@@ -1065,7 +1065,7 @@
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     PMC * return_data;
@@ -1087,7 +1087,7 @@
     typedef void(* func_t)(PARROT_INTERP, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     void * return_data;
@@ -1111,7 +1111,7 @@
     typedef PMC *(* func_t)(PARROT_INTERP, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const ctx         = CURRENT_CONTEXT(interp);
     PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
     PMC *       ret_object  = PMCNULL;
     PMC * return_data;

Modified: branches/html_cleanup/src/nci/extra_thunks.c
==============================================================================
--- branches/html_cleanup/src/nci/extra_thunks.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/nci/extra_thunks.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -200,7 +200,7 @@
     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));
     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 (!STRING_IS_NULL(ts_0)) Parrot_str_free_cstring(t_0);
 
 }
 static void
@@ -304,7 +304,7 @@
            ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 
-if (t_2) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 
 }
 static void
@@ -353,7 +353,7 @@
     final_destination = Parrot_str_new(interp, return_data, 0);
            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 (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 }
 static void
 pcf_v_p(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -399,7 +399,7 @@
     
     
 
-if (t_2) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 }
 static void
 pcf_v_ptt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -423,8 +423,8 @@
      (*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
     
     
-if (t_1) Parrot_str_free_cstring(t_1);
-if (t_2) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 }
 static void
 pcf_v_Jtiiipt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -451,12 +451,12 @@
      (*fn_pointer)(interp, t_1, t_2, t_3, t_4, PMC_IS_NULL((PMC*)t_5) ? (void *)NULL : VTABLE_get_pointer(interp, t_5), t_6);
     
     
-if (t_1) Parrot_str_free_cstring(t_1);
+if (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 
 
 
 
-if (t_6) Parrot_str_free_cstring(t_6);
+if (!STRING_IS_NULL(ts_6)) Parrot_str_free_cstring(t_6);
 }
 static void
 pcf_p_JttPP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -486,8 +486,8 @@
                           }
                           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);
+if (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 
 
 }
@@ -513,7 +513,7 @@
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2), t_3);
     ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
-if (t_1) Parrot_str_free_cstring(t_1);
+if (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 
 
 }
@@ -591,7 +591,7 @@
      (*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
     
     
-if (t_1) Parrot_str_free_cstring(t_1);
+if (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 }
 static void
 pcf_v_Jpt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -615,7 +615,7 @@
     
     
 
-if (t_2) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 }
 static void
 pcf_v_(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -1375,7 +1375,7 @@
     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);
     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 (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 
 
 }
@@ -1431,8 +1431,8 @@
     final_destination = Parrot_str_new(interp, return_data, 0);
            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);
+if (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 
 }
 static void
@@ -1459,7 +1459,7 @@
     final_destination = Parrot_str_new(interp, return_data, 0);
            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 (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 
 }
 static void
@@ -1488,9 +1488,9 @@
     final_destination = Parrot_str_new(interp, return_data, 0);
            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);
-if (t_3) Parrot_str_free_cstring(t_3);
+if (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_3)) Parrot_str_free_cstring(t_3);
 
 }
 static void
@@ -1648,8 +1648,8 @@
     return_data =  (char *)(*fn_pointer)(t_0, t_1);
     final_destination = Parrot_str_new(interp, return_data, 0);
            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);
+    if (!STRING_IS_NULL(ts_0)) Parrot_str_free_cstring(t_0);
+if (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 }
 static void
 pcf_I_JOt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -1673,7 +1673,7 @@
     ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
-if (t_2) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 }
 static void
 pcf_v_JOSI(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -2033,8 +2033,8 @@
     return_data =  (long)(*fn_pointer)(t_0, t_1, t_2, t_3);
     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);
+if (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 
 }
 static void
@@ -2229,11 +2229,11 @@
     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);
     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);
-if (t_3) Parrot_str_free_cstring(t_3);
-if (t_4) Parrot_str_free_cstring(t_4);
-if (t_5) Parrot_str_free_cstring(t_5);
+if (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_3)) Parrot_str_free_cstring(t_3);
+if (!STRING_IS_NULL(ts_4)) Parrot_str_free_cstring(t_4);
+if (!STRING_IS_NULL(ts_5)) Parrot_str_free_cstring(t_5);
 }
 static void
 pcf_c_pttt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -2258,9 +2258,9 @@
     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);
     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);
-if (t_3) Parrot_str_free_cstring(t_3);
+if (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_3)) Parrot_str_free_cstring(t_3);
 }
 static void
 pcf_p_pttttiti(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -2294,12 +2294,12 @@
                           }
                           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);
-if (t_3) Parrot_str_free_cstring(t_3);
-if (t_4) Parrot_str_free_cstring(t_4);
+if (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_3)) Parrot_str_free_cstring(t_3);
+if (!STRING_IS_NULL(ts_4)) Parrot_str_free_cstring(t_4);
 
-if (t_6) Parrot_str_free_cstring(t_6);
+if (!STRING_IS_NULL(ts_6)) Parrot_str_free_cstring(t_6);
 
 }
 static void
@@ -2323,7 +2323,7 @@
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
     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 (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 }
 static void
 pcf_i_ptl(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -2347,7 +2347,7 @@
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
     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 (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 
 }
 static void
@@ -2441,7 +2441,7 @@
                           }
                           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 (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 }
 static void
 pcf_p_ptt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -2470,8 +2470,8 @@
                           }
                           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);
+if (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 }
 static void
 pcf_i_pit(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -2496,7 +2496,7 @@
     ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
-if (t_2) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 }
 static void
 pcf_p_pp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -2547,8 +2547,8 @@
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(t_0, t_1, t_2);
     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);
+    if (!STRING_IS_NULL(ts_0)) Parrot_str_free_cstring(t_0);
+if (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 
 }
 static void
@@ -2574,8 +2574,8 @@
     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);
     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);
+if (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 
 }
 static void
@@ -2597,7 +2597,7 @@
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(t_0);
     
-    if (t_0) Parrot_str_free_cstring(t_0);
+    if (!STRING_IS_NULL(ts_0)) Parrot_str_free_cstring(t_0);
 }
 static void
 pcf_p_pttttitl(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -2631,12 +2631,12 @@
                           }
                           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);
-if (t_3) Parrot_str_free_cstring(t_3);
-if (t_4) Parrot_str_free_cstring(t_4);
+if (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_3)) Parrot_str_free_cstring(t_3);
+if (!STRING_IS_NULL(ts_4)) Parrot_str_free_cstring(t_4);
 
-if (t_6) Parrot_str_free_cstring(t_6);
+if (!STRING_IS_NULL(ts_6)) Parrot_str_free_cstring(t_6);
 
 }
 static void
@@ -2667,9 +2667,9 @@
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
                           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 (!STRING_IS_NULL(ts_0)) Parrot_str_free_cstring(t_0);
 
-if (t_2) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 VTABLE_set_integer_native(interp, t_3, i_3);
 
 }
@@ -2701,7 +2701,7 @@
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
                           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 (!STRING_IS_NULL(ts_0)) Parrot_str_free_cstring(t_0);
 
 
 VTABLE_set_integer_native(interp, t_3, i_3);
@@ -2735,7 +2735,7 @@
     ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
-if (t_2) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 
 
 
@@ -2766,7 +2766,7 @@
     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);
     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 (!STRING_IS_NULL(ts_0)) Parrot_str_free_cstring(t_0);
 
 
 
@@ -2805,7 +2805,7 @@
                           }
                           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 (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 
 
 
@@ -2880,8 +2880,8 @@
                           }
                           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);
+if (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 
 
 }
@@ -2916,7 +2916,7 @@
                           }
                           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 (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 
 
 
@@ -3062,7 +3062,7 @@
                           }
                           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 (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 
 }
 static void
@@ -3118,7 +3118,7 @@
                           }
                           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 (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 
 
 }
@@ -3147,7 +3147,7 @@
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
                           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 (!STRING_IS_NULL(ts_0)) Parrot_str_free_cstring(t_0);
 
 }
 static void
@@ -3177,7 +3177,7 @@
                           }
                           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 (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 
 }
 static void
@@ -3203,7 +3203,7 @@
     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);
     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 (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 VTABLE_set_integer_native(interp, t_2, i_2);
 VTABLE_set_integer_native(interp, t_3, i_3);
 }
@@ -3650,7 +3650,7 @@
     ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
-if (t_2) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 }
 static void
 pcf_i_iiti(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -3676,7 +3676,7 @@
     ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
-if (t_2) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 
 }
 static void
@@ -3728,7 +3728,7 @@
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2);
     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 (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 
 }
 static void
@@ -4261,7 +4261,7 @@
     
 
 
-if (t_3) Parrot_str_free_cstring(t_3);
+if (!STRING_IS_NULL(ts_3)) Parrot_str_free_cstring(t_3);
 }
 static void
 pcf_i_piiti(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -4289,7 +4289,7 @@
     
 
 
-if (t_3) Parrot_str_free_cstring(t_3);
+if (!STRING_IS_NULL(ts_3)) Parrot_str_free_cstring(t_3);
 
 }
 static void
@@ -4621,7 +4621,7 @@
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
     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 (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 
 }
 static void
@@ -4648,7 +4648,7 @@
     ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
-if (t_2) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 
 }
 static void
@@ -4818,7 +4818,7 @@
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0);
     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 (!STRING_IS_NULL(ts_0)) Parrot_str_free_cstring(t_0);
 }
 static void
 pcf_i_ti(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -4840,7 +4840,7 @@
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1);
     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 (!STRING_IS_NULL(ts_0)) Parrot_str_free_cstring(t_0);
 
 }
 static void
@@ -5106,7 +5106,7 @@
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
                           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 (!STRING_IS_NULL(ts_0)) Parrot_str_free_cstring(t_0);
 }
 static void
 pcf_p_b(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -5159,7 +5159,7 @@
                           }
                           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 (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 }
 static void
 pcf_p_i(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -5411,7 +5411,7 @@
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
                           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 (!STRING_IS_NULL(ts_0)) Parrot_str_free_cstring(t_0);
 }
 static void
 pcf_p_tpp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -5439,7 +5439,7 @@
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
                           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 (!STRING_IS_NULL(ts_0)) Parrot_str_free_cstring(t_0);
 
 
 }
@@ -5473,13 +5473,13 @@
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
                           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);
-if (t_3) Parrot_str_free_cstring(t_3);
-if (t_4) Parrot_str_free_cstring(t_4);
-if (t_5) Parrot_str_free_cstring(t_5);
-if (t_6) Parrot_str_free_cstring(t_6);
+    if (!STRING_IS_NULL(ts_0)) Parrot_str_free_cstring(t_0);
+if (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_3)) Parrot_str_free_cstring(t_3);
+if (!STRING_IS_NULL(ts_4)) Parrot_str_free_cstring(t_4);
+if (!STRING_IS_NULL(ts_5)) Parrot_str_free_cstring(t_5);
+if (!STRING_IS_NULL(ts_6)) Parrot_str_free_cstring(t_6);
 }
 static void
 pcf_s_(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -5642,7 +5642,7 @@
     return_data =  (char *)(*fn_pointer)(t_0);
     final_destination = Parrot_str_new(interp, return_data, 0);
            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 (!STRING_IS_NULL(ts_0)) Parrot_str_free_cstring(t_0);
 }
 static void
 pcf_t_tl4(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -5667,7 +5667,7 @@
     return_data =  (char *)(*fn_pointer)(t_0, t_1, &i_2);
     final_destination = Parrot_str_new(interp, return_data, 0);
            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 (!STRING_IS_NULL(ts_0)) Parrot_str_free_cstring(t_0);
 
 VTABLE_set_integer_native(interp, t_2, i_2);
 }
@@ -5693,7 +5693,7 @@
     return_data =  (char *)(*fn_pointer)(t_0, &i_1);
     final_destination = Parrot_str_new(interp, return_data, 0);
            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 (!STRING_IS_NULL(ts_0)) Parrot_str_free_cstring(t_0);
 VTABLE_set_integer_native(interp, t_1, i_1);
 }
 static void
@@ -5857,7 +5857,7 @@
     return_data =  (char *)(*fn_pointer)(&t_0);
     final_destination = Parrot_str_new(interp, return_data, 0);
            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 (!STRING_IS_NULL(ts_0)) Parrot_str_free_cstring(t_0);
 }
 static void
 pcf_v_P(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -6069,7 +6069,7 @@
     ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
-if (t_2) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 }
 static void
 pcf_i_Jt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -6091,7 +6091,7 @@
     return_data =  (int)(*fn_pointer)(interp, t_1);
     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 (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 }
 static void
 pcf_i_Ji(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -6392,7 +6392,7 @@
     ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
-if (t_2) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 }
 static void
 pcf_i_pppi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
@@ -6613,7 +6613,7 @@
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, &v_1);
     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 (!STRING_IS_NULL(ts_0)) Parrot_str_free_cstring(t_0);
 VTABLE_set_pointer(interp, t_1, v_1);
 }
 static void
@@ -6640,7 +6640,7 @@
     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));
     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 (!STRING_IS_NULL(ts_1)) Parrot_str_free_cstring(t_1);
 
 VTABLE_set_pointer(interp, t_3, v_3);
 
@@ -6695,7 +6695,7 @@
     ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
-if (t_2) Parrot_str_free_cstring(t_2);
+if (!STRING_IS_NULL(ts_2)) Parrot_str_free_cstring(t_2);
 
 
 }

Modified: branches/html_cleanup/src/oo.c
==============================================================================
--- branches/html_cleanup/src/oo.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/oo.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -120,7 +120,9 @@
         class_name = _class->vtable->whoami;
 
     if (sub) {
-        if (sub->vtable->base_type == enum_class_NCI)
+        if (sub->vtable->base_type == enum_class_NativePCCMethod)
+            result = "NativePCCMethod";
+        else if (sub->vtable->base_type == enum_class_NCI)
             result = "NCI";
         else
             result = "Sub";

Modified: branches/html_cleanup/src/ops/cmp.ops
==============================================================================
--- branches/html_cleanup/src/ops/cmp.ops	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/ops/cmp.ops	Wed Sep 22 03:35:47 2010	(r49232)
@@ -928,7 +928,7 @@
 }
 
 inline op and(invar PMC, invar PMC, invar PMC) :base_core {
-    $1 = VTABLE_logical_and(interp, $2, $3, $1);
+    $1 = VTABLE_get_bool(interp, $2) ? $3 : $2;
 }
 
 ########################################
@@ -954,11 +954,14 @@
 }
 
 inline op not(invar PMC) :base_core {
-    VTABLE_i_logical_not(interp, $1);
+    VTABLE_set_bool(interp, $1, !VTABLE_get_bool(interp, $1));
 }
 
 inline op not(out PMC, invar PMC) :base_core {
-    $1 = VTABLE_logical_not(interp, $2, $1);
+    const INTVAL a = ! VTABLE_get_bool(interp, $2);
+    if (PMC_IS_NULL($1))
+        $1 = Parrot_pmc_new(interp, VTABLE_type(interp, $2));
+    VTABLE_set_bool(interp, $1, a);
 }
 
 ########################################
@@ -976,7 +979,7 @@
 }
 
 inline op or(invar PMC, invar PMC, invar PMC) :base_core {
-    $1 = VTABLE_logical_or(interp, $2, $3, $1);
+    $1 = VTABLE_get_bool(interp, $2) ? $2 : $3;
 }
 
 ########################################
@@ -995,7 +998,17 @@
 }
 
 inline op xor(invar PMC, invar PMC, invar PMC) :base_core {
-    $1 = VTABLE_logical_xor(interp, $2, $3, $1);
+    const INTVAL a = VTABLE_get_bool(interp, $2);
+    const INTVAL b = VTABLE_get_bool(interp, $3);
+    if (a && ! b)
+        $1 = $2;
+    else
+        if (b && ! a)
+            $1 = $3 ;
+        else{
+            $1 = Parrot_pmc_new(interp, VTABLE_type(interp, $2));
+            VTABLE_set_bool(interp, $1, 0);
+        }
 }
 
 =back

Modified: branches/html_cleanup/src/ops/core_ops.c
==============================================================================
--- branches/html_cleanup/src/ops/core_ops.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/ops/core_ops.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -18211,7 +18211,7 @@
 opcode_t *
 Parrot_and_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    PREG(1) = VTABLE_logical_and(interp, PREG(2), PREG(3), PREG(1));
+    PREG(1) = VTABLE_get_bool(interp, PREG(2)) ? PREG(3) : PREG(2);
 
 return (opcode_t *)cur_opcode + 4;}
 
@@ -18232,14 +18232,17 @@
 opcode_t *
 Parrot_not_p(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    VTABLE_i_logical_not(interp, PREG(1));
+    VTABLE_set_bool(interp, PREG(1), !VTABLE_get_bool(interp, PREG(1)));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_not_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    PREG(1) = VTABLE_logical_not(interp, PREG(2), PREG(1));
+    const INTVAL a = ! VTABLE_get_bool(interp, PREG(2));
+    if (PMC_IS_NULL(PREG(1)))
+        PREG(1) = Parrot_pmc_new(interp, VTABLE_type(interp, PREG(2)));
+    VTABLE_set_bool(interp, PREG(1), a);
 
 return (opcode_t *)cur_opcode + 3;}
 
@@ -18267,7 +18270,7 @@
 opcode_t *
 Parrot_or_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    PREG(1) = VTABLE_logical_or(interp, PREG(2), PREG(3), PREG(1));
+    PREG(1) = VTABLE_get_bool(interp, PREG(2)) ? PREG(2) : PREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
@@ -18295,7 +18298,17 @@
 opcode_t *
 Parrot_xor_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    PREG(1) = VTABLE_logical_xor(interp, PREG(2), PREG(3), PREG(1));
+    const INTVAL a = VTABLE_get_bool(interp, PREG(2));
+    const INTVAL b = VTABLE_get_bool(interp, PREG(3));
+    if (a && ! b)
+        PREG(1) = PREG(2);
+    else
+        if (b && ! a)
+            PREG(1) = PREG(3) ;
+        else{
+            PREG(1) = Parrot_pmc_new(interp, VTABLE_type(interp, PREG(2)));
+            VTABLE_set_bool(interp, PREG(1), 0);
+        }
 
 return (opcode_t *)cur_opcode + 4;}
 
@@ -20453,32 +20466,14 @@
 opcode_t *
 Parrot_addattribute_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING * const class_name  = string_from_literal(interp, "Class");
-    STRING * const role_name   = string_from_literal(interp, "Role");
-
-    if (VTABLE_isa(interp, PREG(1), class_name) || VTABLE_isa(interp, PREG(1), role_name))
-        VTABLE_add_attribute(interp, PREG(1), SREG(2), PMCNULL);
-    else {
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
-            EXCEPTION_INVALID_OPERATION,
-            "Cannot add attribute to non-class");return (opcode_t *)handler;
-    }
+    VTABLE_add_attribute(interp, PREG(1), SREG(2), PMCNULL);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_addattribute_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING * const class_name  = string_from_literal(interp, "Class");
-    STRING * const role_name   = string_from_literal(interp, "Role");
-
-    if (VTABLE_isa(interp, PREG(1), class_name) || VTABLE_isa(interp, PREG(1), role_name))
-        VTABLE_add_attribute(interp, PREG(1), CONST(2).u.string, PMCNULL);
-    else {
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
-            EXCEPTION_INVALID_OPERATION,
-            "Cannot add attribute to non-class");return (opcode_t *)handler;
-    }
+    VTABLE_add_attribute(interp, PREG(1), CONST(2).u.string, PMCNULL);
 
 return (opcode_t *)cur_opcode + 3;}
 
@@ -22872,21 +22867,21 @@
 opcode_t *
 Parrot_new_s(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
+    SREG(1) = Parrot_str_new_noinit(interp, 0);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_new_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_new_noinit(interp, enum_stringrep_one, IREG(2));
+    SREG(1) = Parrot_str_new_noinit(interp, IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_new_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_new_noinit(interp, enum_stringrep_one, cur_opcode[2]);
+    SREG(1) = Parrot_str_new_noinit(interp, cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
@@ -23121,35 +23116,35 @@
 opcode_t *
 Parrot_charset_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    IREG(1) = Parrot_charset_number_of_str(interp, SREG(2));
+    IREG(1) = Parrot_encoding_number_of_str(interp, SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_charset_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    IREG(1) = Parrot_charset_number_of_str(interp, CONST(2).u.string);
+    IREG(1) = Parrot_encoding_number_of_str(interp, CONST(2).u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_charsetname_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_charset_name(interp, IREG(2));
+    SREG(1) = Parrot_encoding_name(interp, IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_charsetname_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_charset_name(interp, cur_opcode[2]);
+    SREG(1) = Parrot_encoding_name(interp, cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_find_charset_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    const INTVAL n = Parrot_charset_number(interp, SREG(2));
+    const INTVAL n = Parrot_encoding_number(interp, SREG(2));
     if (n < 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
                 EXCEPTION_INVALID_CHARTYPE,
@@ -23162,7 +23157,7 @@
 opcode_t *
 Parrot_find_charset_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    const INTVAL n = Parrot_charset_number(interp, CONST(2).u.string);
+    const INTVAL n = Parrot_encoding_number(interp, CONST(2).u.string);
     if (n < 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
                 EXCEPTION_INVALID_CHARTYPE,
@@ -23615,7 +23610,8 @@
 Parrot_err_s(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
     const char * const tmp = strerror(errno);
-    SREG(1) = string_make(interp, tmp, strlen(tmp), "ascii", 0);
+    SREG(1) = Parrot_str_new_init(interp, tmp, strlen(tmp),
+            Parrot_ascii_encoding_ptr, 0);
 
 return (opcode_t *)cur_opcode + 2;}
 
@@ -23623,7 +23619,8 @@
 Parrot_err_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
     const char * const tmp = strerror(IREG(2));
-    SREG(1) = string_make(interp, tmp, strlen(tmp), "ascii", 0);
+    SREG(1) = Parrot_str_new_init(interp, tmp, strlen(tmp),
+            Parrot_ascii_encoding_ptr, 0);
 
 return (opcode_t *)cur_opcode + 3;}
 
@@ -23631,7 +23628,8 @@
 Parrot_err_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
     const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
     const char * const tmp = strerror(cur_opcode[2]);
-    SREG(1) = string_make(interp, tmp, strlen(tmp), "ascii", 0);
+    SREG(1) = Parrot_str_new_init(interp, tmp, strlen(tmp),
+            Parrot_ascii_encoding_ptr, 0);
 
 return (opcode_t *)cur_opcode + 3;}
 
@@ -25980,9 +25978,8 @@
     Parrot_str_free_cstring(cstr);
     IREG(1) = U_SUCCESS(err) ? (INTVAL) codepoint : -1;
 #else
-    opcode_t * const dest = cur_opcode + 3;
-    Parrot_ex_throw_from_op_args(interp, dest, EXCEPTION_LIBRARY_ERROR,
-        "no ICU lib loaded");
+    opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
+        EXCEPTION_LIBRARY_ERROR, "no ICU lib loaded");return (opcode_t *)dest;
 #endif
 
 return (opcode_t *)cur_opcode + 3;}
@@ -25997,9 +25994,8 @@
     Parrot_str_free_cstring(cstr);
     IREG(1) = U_SUCCESS(err) ? (INTVAL) codepoint : -1;
 #else
-    opcode_t * const dest = cur_opcode + 3;
-    Parrot_ex_throw_from_op_args(interp, dest, EXCEPTION_LIBRARY_ERROR,
-        "no ICU lib loaded");
+    opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
+        EXCEPTION_LIBRARY_ERROR, "no ICU lib loaded");return (opcode_t *)dest;
 #endif
 
 return (opcode_t *)cur_opcode + 3;}
@@ -26094,7 +26090,7 @@
   PARROT_FUNCTION_CORE,                       /* core_type = PARROT_XX_CORE */
   0,                                /* flags */
   2,    /* major_version */
-  7,    /* minor_version */
+  8,    /* minor_version */
   0,    /* patch_version */
   1083,             /* op_count */
   core_op_info_table,       /* op_info_table */
@@ -26219,9 +26215,9 @@
 
     hop         = NULL;
     hop_buckets = NULL;
-}
+}PARROT_EXPORT
 op_lib_t *
-Parrot_DynOp_core_2_7_0(PARROT_INTERP, long init) {
+Parrot_DynOp_core_2_8_0(PARROT_INTERP, long init) {
     /* initialize and return op_lib ptr */
     if (init == 1) {
 
@@ -26250,7 +26246,7 @@
 
 {
     PMC *const lib = Parrot_pmc_new(interp, enum_class_ParrotLibrary);
-    ((Parrot_ParrotLibrary_attributes*)PMC_data(lib))->oplib_init = (void *) Parrot_DynOp_core_2_7_0;
+    ((Parrot_ParrotLibrary_attributes*)PMC_data(lib))->oplib_init = (void *) Parrot_DynOp_core_2_8_0;
     dynop_register(interp, lib);
     return lib;
 }

Modified: branches/html_cleanup/src/ops/experimental.ops
==============================================================================
--- branches/html_cleanup/src/ops/experimental.ops	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/ops/experimental.ops	Wed Sep 22 03:35:47 2010	(r49232)
@@ -363,9 +363,9 @@
     Parrot_str_free_cstring(cstr);
     $1 = U_SUCCESS(err) ? (INTVAL) codepoint : -1;
 #else
-    opcode_t * const dest = expr NEXT();
-    Parrot_ex_throw_from_op_args(interp, dest, EXCEPTION_LIBRARY_ERROR,
-        "no ICU lib loaded");
+    opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+        EXCEPTION_LIBRARY_ERROR, "no ICU lib loaded");
+    goto ADDRESS(dest);
 #endif
 }
 

Modified: branches/html_cleanup/src/ops/object.ops
==============================================================================
--- branches/html_cleanup/src/ops/object.ops	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/ops/object.ops	Wed Sep 22 03:35:47 2010	(r49232)
@@ -399,7 +399,8 @@
 
 =item B<get_class>(out PMC, in PMC)
 
-Find the PMC for a class, by string name or by key.
+Find the PMC for a class, by string name, key or namespace.  This op does
+C<not> find the class of an instance of an object.  use C<typeof> for that.
 
 =cut
 
@@ -463,17 +464,7 @@
 =cut
 
 inline op addattribute(invar PMC, in STR) :object_classes {
-    STRING * const class_name  = string_from_literal(interp, "Class");
-    STRING * const role_name   = string_from_literal(interp, "Role");
-
-    if (VTABLE_isa(interp, $1, class_name) || VTABLE_isa(interp, $1, role_name))
-        VTABLE_add_attribute(interp, $1, $2, PMCNULL);
-    else {
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
-            EXCEPTION_INVALID_OPERATION,
-            "Cannot add attribute to non-class");
-        goto ADDRESS(handler);
-    }
+    VTABLE_add_attribute(interp, $1, $2, PMCNULL);
 }
 
 =item B<removeattribute>(invar PMC, in STR) B<(unimplemented)>

Modified: branches/html_cleanup/src/ops/pmc.ops
==============================================================================
--- branches/html_cleanup/src/ops/pmc.ops	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/ops/pmc.ops	Wed Sep 22 03:35:47 2010	(r49232)
@@ -681,7 +681,7 @@
 
 =item B<morph>(invar PMC, in PMC)
 
-Have $1 turn itself into a PMC of type $2.
+Have $1 turn itself into a PMC of type $2. $2 should be a Class PMC.
 
 =cut
 

Modified: branches/html_cleanup/src/ops/string.ops
==============================================================================
--- branches/html_cleanup/src/ops/string.ops	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/ops/string.ops	Wed Sep 22 03:35:47 2010	(r49232)
@@ -323,14 +323,16 @@
 
 Allocate a new empty string of length $2 (optional).
 
+XXX: Do these ops make sense with immutable strings?
+
 =cut
 
 inline op new(out STR) :base_mem {
-    $1 = Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
+    $1 = Parrot_str_new_noinit(interp, 0);
 }
 
 inline op new(out STR, in INT) :base_mem {
-    $1 = Parrot_str_new_noinit(interp, enum_stringrep_one, $2);
+    $1 = Parrot_str_new_noinit(interp, $2);
 }
 
 
@@ -474,15 +476,15 @@
 =cut
 
 op charset(out INT, in STR) :base_core {
-    $1 = Parrot_charset_number_of_str(interp, $2);
+    $1 = Parrot_encoding_number_of_str(interp, $2);
 }
 
 op charsetname(out STR, in INT) :base_core {
-    $1 = Parrot_charset_name(interp, $2);
+    $1 = Parrot_encoding_name(interp, $2);
 }
 
 op find_charset(out INT, in STR) :base_core {
-    const INTVAL n = Parrot_charset_number(interp, $2);
+    const INTVAL n = Parrot_encoding_number(interp, $2);
     if (n < 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
                 EXCEPTION_INVALID_CHARTYPE,

Modified: branches/html_cleanup/src/ops/sys.ops
==============================================================================
--- branches/html_cleanup/src/ops/sys.ops	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/ops/sys.ops	Wed Sep 22 03:35:47 2010	(r49232)
@@ -72,12 +72,14 @@
 
 op err(out STR) {
     const char * const tmp = strerror(errno);
-    $1 = string_make(interp, tmp, strlen(tmp), "ascii", 0);
+    $1 = Parrot_str_new_init(interp, tmp, strlen(tmp),
+            Parrot_ascii_encoding_ptr, 0);
 }
 
 op err(out STR, in INT) {
     const char * const tmp = strerror($2);
-    $1 = string_make(interp, tmp, strlen(tmp), "ascii", 0);
+    $1 = Parrot_str_new_init(interp, tmp, strlen(tmp),
+            Parrot_ascii_encoding_ptr, 0);
 }
 
 

Modified: branches/html_cleanup/src/packdump.c
==============================================================================
--- branches/html_cleanup/src/packdump.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/packdump.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -169,8 +169,8 @@
       case PFC_STRING:
         Parrot_io_printf(interp, "    [ 'PFC_STRING', {\n");
         pobj_flag_dump(interp, (long)PObj_get_FLAGS(self->u.string));
-        Parrot_io_printf(interp, "        CHARSET  => %ld,\n",
-                   self->u.string->charset);
+        Parrot_io_printf(interp, "        ENCODING => %ld,\n",
+                   self->u.string->encoding);
         i = self->u.string->bufused;
         Parrot_io_printf(interp, "        SIZE     => %ld,\n",
                    (long)i);
@@ -318,15 +318,16 @@
                     namespace_description = null;
                 }
                 Parrot_io_printf(interp,
-                            "\t\tclass => %Ss,\n"
-                            "\t\tstart_offs => %d,\n"
-                            "\t\tend_offs => %d,\n"
-                            "\t\tname    => '%Ss',\n"
-                            "\t\tsubid   => '%Ss',\n"
-                            "\t\tmethod  => '%Ss',\n"
-                            "\t\tnsentry => '%Ss',\n"
-                            "\t\tnamespace => %Ss\n"
-                            "\t\tHLL_id => %d,\n",
+                            "\t\tclass       => %Ss,\n"
+                            "\t\tstart_offs  => %d,\n"
+                            "\t\tend_offs    => %d,\n"
+                            "\t\tname        => '%Ss',\n"
+                            "\t\tsubid       => '%Ss',\n"
+                            "\t\tmethod      => '%Ss',\n"
+                            "\t\tnsentry     => '%Ss',\n"
+                            "\t\tnamespace   => %Ss,\n"
+                            "\t\tHLL_id      => %d,\n"
+                            "\t\tn_regs_used => [ %d, %d, %d, %d ],\n",
                             pmc->vtable->whoami,
                             sub->start_offs,
                             sub->end_offs,
@@ -335,7 +336,11 @@
                             sub->method_name,
                             sub->ns_entry_name,
                             namespace_description,
-                            sub->HLL_id);
+                            sub->HLL_id,
+                            sub->n_regs_used[0],
+                            sub->n_regs_used[1],
+                            sub->n_regs_used[2],
+                            sub->n_regs_used[3]);
                 break;
               case enum_class_FixedIntegerArray:
                 Parrot_io_printf(interp,

Modified: branches/html_cleanup/src/packfile.c
==============================================================================
--- branches/html_cleanup/src/packfile.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/packfile.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -2778,7 +2778,7 @@
     ASSERT_ARGS(byte_code_unpack)
     PackFile_ByteCode * const byte_code = (PackFile_ByteCode *)self;
     int i;
-    int total_ops = 0;
+    size_t total_ops = 0;
 
     byte_code->op_count          = PF_fetch_opcode(self->pf, &cursor);
     byte_code->op_func_table     = mem_gc_allocate_n_zeroed_typed(interp,
@@ -2849,12 +2849,12 @@
                 opcode_t idx = PF_fetch_opcode(self->pf, &cursor);
                 opcode_t op  = PF_fetch_opcode(self->pf, &cursor);
 
-                if (0 > op || op >= entry->lib->op_count)
+                if (0 > op || (size_t)op >= entry->lib->op_count)
                     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_MALFORMED_PACKFILE,
                         "opcode index out of bounds on library `%s'. Found %d, expected 0 to %d.",
                         entry->lib->name, op, entry->lib->op_count - 1);
 
-                if (0 > idx || idx >= byte_code->op_count)
+                if (0 > idx || (size_t)idx >= byte_code->op_count)
                     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_MALFORMED_PACKFILE,
                         "op table index out of bounds for entry from library `%s'."
                         " Found %d, expected 0 to %d",
@@ -3202,7 +3202,7 @@
         /* Set up new entry and insert it. */
         PackFile_DebugFilenameMapping *mapping = debug->mappings + insert_pos;
         STRING *namestr = Parrot_str_new_init(interp, filename, strlen(filename),
-                PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET, 0);
+                Parrot_default_encoding_ptr, 0);
         size_t count = ct->const_count;
         size_t i;
 
@@ -3228,7 +3228,7 @@
             fnconst           = &ct->constants[ct->const_count - 1];
             fnconst->type     = PFC_STRING;
             fnconst->u.string = Parrot_str_new_init(interp, filename, strlen(filename),
-                    PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET,
+                    Parrot_default_encoding_ptr,
                     PObj_constant_FLAG);
         }
 
@@ -3912,6 +3912,11 @@
 
     self->const_count = 0;
 
+    if (self->string_hash) {
+        parrot_hash_destroy(interp, self->string_hash);
+        self->string_hash = NULL;
+    }
+
     return;
 }
 

Modified: branches/html_cleanup/src/packfile/pf_items.c
==============================================================================
--- branches/html_cleanup/src/packfile/pf_items.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/packfile/pf_items.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -34,6 +34,7 @@
 
 #include "parrot/parrot.h"
 #include "byteorder.h"
+#include "pf_items.str"
 
 /* HEADERIZER HFILE: include/parrot/packfile.h */
 
@@ -959,14 +960,16 @@
 PF_fetch_opcode(ARGIN_NULLOK(const PackFile *pf), ARGMOD(const opcode_t **stream))
 {
     ASSERT_ARGS(PF_fetch_opcode)
-    opcode_t o;
-    if (!pf || !pf->fetch_op)
+    if (!pf || !pf->fetch_op) {
         return *(*stream)++;
-    o = (pf->fetch_op)(*((const unsigned char **)stream));
-    TRACE_PRINTF_VAL(("  PF_fetch_opcode: 0x%lx (%ld), at 0x%x\n",
-                      o, o, OFFS(pf, *stream)));
-    *((const unsigned char **) (stream)) += pf->header->wordsize;
-    return o;
+    }
+    else {
+        const unsigned char *ucstream = *(const unsigned char **)stream;
+        opcode_t o  = (pf->fetch_op)(ucstream);
+        ucstream   += pf->header->wordsize;
+        *stream     = (opcode_t *)ucstream;
+        return o;
+    }
 }
 
 /*
@@ -1217,7 +1220,7 @@
     const int wordsize = pf ? pf->header->wordsize : sizeof (opcode_t);
     size_t  size       = PF_fetch_opcode(pf, cursor);
     STRING *s          = Parrot_str_new_init(interp, (const char *)*cursor, size,
-                            Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr,
+                            Parrot_binary_encoding_ptr,
                             PObj_external_FLAG);
     *((const unsigned char **)(cursor)) += ROUND_UP_B(size, wordsize);
     return s;
@@ -1244,8 +1247,7 @@
     ASSERT_ARGS(PF_store_buf)
     const int  wordsize = sizeof (opcode_t);
 
-    PARROT_ASSERT(s->encoding == Parrot_fixed_8_encoding_ptr);
-    PARROT_ASSERT(s->charset  == Parrot_binary_charset_ptr);
+    PARROT_ASSERT(s->encoding == Parrot_binary_encoding_ptr);
 
     *cursor++ = s->bufused;
 
@@ -1315,9 +1317,7 @@
     STRING   *s;
     UINTVAL   flags;
     UINTVAL   encoding_nr;
-    UINTVAL   charset_nr;
-    const ENCODING *encoding;
-    const CHARSET  *charset;
+    const STR_VTABLE *encoding;
     size_t    size;
     const int wordsize          = pf ? pf->header->wordsize : sizeof (opcode_t);
     opcode_t  flag_charset_word = PF_fetch_opcode(pf, cursor);
@@ -1326,30 +1326,26 @@
         return STRINGNULL;
 
     /* decode flags, charset and encoding */
-    flags         = (flag_charset_word & 0x1 ? PObj_constant_FLAG : 0) |
-                    (flag_charset_word & 0x2 ? PObj_private7_FLAG : 0) ;
-    encoding_nr   = (flag_charset_word >> 16);
-    charset_nr    = (flag_charset_word >> 8) & 0xFF;
-
+    flags       = (flag_charset_word & 0x1 ? PObj_constant_FLAG : 0) |
+                  (flag_charset_word & 0x2 ? PObj_private7_FLAG : 0) ;
+    encoding_nr = (flag_charset_word >> 8) & 0xFF;
 
     size = (size_t)PF_fetch_opcode(pf, cursor);
 
     TRACE_PRINTF(("PF_fetch_string(): flags=0x%04x, ", flags));
     TRACE_PRINTF(("encoding_nr=%ld, ", encoding_nr));
-    TRACE_PRINTF(("charset_nr=%ld, ", charset_nr));
     TRACE_PRINTF(("size=%ld.\n", size));
 
     encoding = Parrot_get_encoding(interp, encoding_nr);
-    charset  = Parrot_get_charset(interp, charset_nr);
     if (!encoding)
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
                     "Invalid encoding number '%d' specified", encoding_nr);
-    if (!charset)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
-                    "Invalid charset number '%d' specified", charset_nr);
 
-    s = Parrot_str_new_init(interp, (const char *)*cursor, size,
-            encoding, charset, flags);
+    if (size || (encoding != CONST_STRING(interp, "")->encoding))
+        s = Parrot_str_new_init(interp, (const char *)*cursor, size,
+                encoding, flags);
+    else
+        s = CONST_STRING(interp, "");
 
     /* print only printable characters */
     TRACE_PRINTF_VAL(("PF_fetch_string(): string is '%s' at 0x%x\n",
@@ -1411,8 +1407,7 @@
      */
 
     /* encode charset_nr, encoding_nr and flags into the same word */
-    *cursor++ = (Parrot_encoding_number_of_str(NULL, s) << 16)       |
-                (Parrot_charset_number_of_str(NULL, s) << 8)         |
+    *cursor++ = (Parrot_encoding_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;

Modified: branches/html_cleanup/src/packout.c
==============================================================================
--- branches/html_cleanup/src/packout.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/packout.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -273,9 +273,11 @@
     GETATTR_Key_str_key(interp, key, key_str);
     GETATTR_Key_num_key(interp, key, key_num);
 
-    if (type == PFC_STRING && !PMC_IS_NULL(ct->string_hash)) {
-        if (VTABLE_exists_keyed_str(interp, ct->string_hash, key_str)) {
-            i = VTABLE_get_integer_keyed_str(interp, ct->string_hash, key_str);
+    if (type == PFC_STRING && ct->string_hash) {
+        HashBucket *bucket = parrot_hash_get_bucket(interp, ct->string_hash,
+                key_str);
+        if (bucket) {
+            i = (int)PTR2INTVAL(bucket->value);
             if (i < ct->const_count) /* only consider constants that have already occured */
                 return i;
         }
@@ -290,10 +292,7 @@
             if (constant->type == PFC_STRING) {
                 STRING * const sc = constant->u.string;
                 if (Parrot_str_equal(interp, key_str, sc)
-                &&  Parrot_charset_number_of_str(interp, key_str)
-                ==  Parrot_charset_number_of_str(interp, sc)
-                &&  Parrot_encoding_number_of_str(interp, key_str)
-                ==  Parrot_encoding_number_of_str(interp, sc)) {
+                &&  key_str->encoding == sc->encoding) {
                     return i;
                 }
             }

Modified: branches/html_cleanup/src/parrot_debugger.c
==============================================================================
--- branches/html_cleanup/src/parrot_debugger.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/parrot_debugger.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -113,7 +113,7 @@
 =item C<gcdebug>
 
 Toggle garbage collection debugging mode.  In gcdebug mode a garbage collection
-cycle is run before each opcocde, which is the same as using the gcdebug core.
+cycle is run before each opcode, which is the same as using the gcdebug core.
 
 =item C<quit> or C<q>
 
@@ -136,6 +136,8 @@
 
 */
 
+#define PARROT_IN_EXTENSION
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -152,7 +154,7 @@
 
 =item C<int main(int argc, const char *argv[])>
 
-Reads the PIR, PASM or PBC file from argv[1], loads it, and then calls
+Reads the PIR, PASM, or PBC file from argv[1], loads it, and then calls
 Parrot_debug().
 
 =cut
@@ -229,7 +231,7 @@
         const char source []= ".sub aux :main\nexit 0\n.end\n";
         Parrot_compile_string(interp, compiler, source, &errstr);
 
-        if (!Parrot_str_is_null(interp, errstr))
+        if (!STRING_IS_NULL(errstr))
             Parrot_io_eprintf(interp, "%Ss\n", errstr);
     }
 
@@ -247,11 +249,12 @@
     Parrot_exit(interp, 0);
 }
 
+
 /*
 
 =item C<static void PDB_run_code(PARROT_INTERP, int argc, const char *argv[])>
 
-Run the code, catching exceptions if they are left unhandled.
+Runs the code, catching exceptions if they are left unhandled.
 
 =cut
 
@@ -275,6 +278,7 @@
     free_runloop_jump_point(interp);
 }
 
+
 /*
 
 =item C<static void PDB_printwelcome(void)>
@@ -290,7 +294,7 @@
 {
     fprintf(stderr,
         "Parrot " PARROT_VERSION " Debugger\n"
-        "\nPlease note: the debugger is currently under reconstruction\n");
+        "(Please note: the debugger is currently under reconstruction)\n");
 }
 
 /*
@@ -331,11 +335,7 @@
 
 =item * Print the interpreter info.
 
-=item * Make the user interface better (add comands
-history/completion).
-
-=item * Some other things I don't remember now because it's late.
-
+=item * Make the user interface better (add command history/completion).
 
 =back
 

Modified: branches/html_cleanup/src/pbc_dump.c
==============================================================================
--- branches/html_cleanup/src/pbc_dump.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pbc_dump.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -59,6 +59,7 @@
 #include "parrot/parrot.h"
 #include "parrot/embed.h"
 #include "parrot/oplib/ops.h"
+#include "parrot/oplib/core_ops.h"
 
 /*
 

Modified: branches/html_cleanup/src/pbc_merge.c
==============================================================================
--- branches/html_cleanup/src/pbc_merge.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pbc_merge.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -36,10 +36,12 @@
 
 */
 
+#define PARROT_IN_EXTENSION
 
 #include "parrot/parrot.h"
 #include "parrot/embed.h"
 #include "parrot/oplib/ops.h"
+#include "parrot/oplib/core_ops.h"
 #include "pmc/pmc_sub.h"
 
 
@@ -232,8 +234,8 @@
     INTVAL read_result;
 
     /* Check the file exists. */
-    STRING * const fs = string_make(interp, fullname,
-            strlen(fullname), NULL, 0);
+    STRING * const fs = Parrot_str_new_init(interp, fullname,
+            strlen(fullname), Parrot_default_encoding_ptr, 0);
     if (!Parrot_stat_info_intval(interp, fs, STAT_EXISTS)) {
         Parrot_io_eprintf(interp, "PBC Merge: Can't stat %s, code %i.\n",
                 fullname, errno);
@@ -698,6 +700,7 @@
     opcode_t  *ops       = bc->base.data;
     opcode_t   cur_op    = 0;
     int        cur_input = 0;
+    op_lib_t  *core_ops  = PARROT_GET_CORE_OPLIB(interp);
 
     /* Loop over the ops in the merged bytecode. */
     while (cur_op < (opcode_t)bc->base.size) {
@@ -737,10 +740,10 @@
 
         /* Handle special case variable argument opcodes. */
         op_func = interp->code->op_func_table[op_num];
-        if (op_func == interp->op_func_table[PARROT_OP_set_args_pc]    ||
-            op_func == interp->op_func_table[PARROT_OP_get_results_pc] ||
-            op_func == interp->op_func_table[PARROT_OP_get_params_pc]  ||
-            op_func == interp->op_func_table[PARROT_OP_set_returns_pc]) {
+        if (op_func == core_ops->op_func_table[PARROT_OP_set_args_pc]    ||
+            op_func == core_ops->op_func_table[PARROT_OP_get_results_pc] ||
+            op_func == core_ops->op_func_table[PARROT_OP_get_params_pc]  ||
+            op_func == core_ops->op_func_table[PARROT_OP_set_returns_pc]) {
             /* Get the signature. */
             PMC * const sig = bc->const_table->constants[op_ptr[1]].u.key;
 

Modified: branches/html_cleanup/src/pmc/addrregistry.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/addrregistry.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/addrregistry.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -46,9 +46,7 @@
     VTABLE void init() {
         Hash  *registry = parrot_create_hash(INTERP,
                 enum_type_int,
-                Hash_key_type_PMC,
-                hash_compare_int,
-                key_hash_int);
+                Hash_key_type_PMC_ptr);
 
         SET_ATTR_hash(INTERP, SELF, registry);
         PObj_custom_mark_destroy_SETALL(SELF);

Modified: branches/html_cleanup/src/pmc/boolean.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/boolean.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/boolean.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -8,103 +8,193 @@
 
 =head1 DESCRIPTION
 
-This class implements a boolean value variable.
+This PMC implements a Boolean type with a single true/false value.
+A C<Boolean> does not morph to other types when its value is set; it simply
+changes its value.
 
-Albeit the C<Boolean PMC> is derived from the C<Integer PMC>,
-it doesn't morph to other types. Only its value is changed.
+This implementation of C<Boolean> inherits from the C<Scalar> PMC.
+Unlike the previous implementation, it does I<not> inherit
+from C<Integer>.
 
-=head2 Methods
+=head2 Functions
 
-=over 4
+=over
 
 =cut
 
 */
 
 /* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
 
-pmclass Boolean extends Integer provides boolean provides scalar auto_attrs {
+/* This new Boolean PMC stores its boolean value in a private PObj flag. */
+
+#define boolean_FLAG PObj_private0_FLAG
+
+#define get_boolean_FLAG(pmc) \
+    ((PObj_get_FLAGS(pmc) & boolean_FLAG) != 0)
+
+#define set_boolean_FLAG(pmc, val) \
+     if (val) \
+         PObj_get_FLAGS(pmc) |= boolean_FLAG; \
+     else \
+         PObj_get_FLAGS(pmc) &= ~boolean_FLAG;
+
+#define flip_boolean_FLAG(pmc) \
+     PObj_get_FLAGS(pmc) ^= boolean_FLAG
+
+
+pmclass Boolean extends scalar provides boolean provides scalar manual_attrs {
 
 /*
 
+=item C<void init()>
+
+Create a new C<Boolean> with initial value C<FALSE>.
+
 =item C<void init_pmc(PMC *value)>
 
-Initialises SELF value according to the boolean value of the passed PMC.
+Create a new C<Boolean> with the given initial value interpreted
+as a Boolean.
+
+=item C<void init_int(INTVAL value)>
+
+Create a new C<Boolean> with the given initial value interpreted
+as a Boolean.
 
 =cut
 
 */
+
+    /* These init functions set the boolean flag directly. */
+
+    VTABLE void init() {
+        set_boolean_FLAG(SELF, 0);
+    }
+
     VTABLE void init_pmc(PMC *value) {
-        INTVAL v = PMC_IS_NULL(value) ? (INTVAL) 0 : VTABLE_get_bool(INTERP, value);
-        SELF.set_bool(v);
+        INTVAL v = PMC_IS_NULL(value) ? 0 : VTABLE_get_bool(INTERP, value);
+        set_boolean_FLAG(SELF, v);
     }
-/*
 
-=item C<STRING *get_string()>
+    VTABLE void init_int(INTVAL value) {
+        set_boolean_FLAG(SELF, value);
+    }
 
-Return "1" or "0".
+/*
 
-=cut
+=item C<INTVAL get_bool()>
 
-*/
-    VTABLE STRING *get_string() {
-        return SUPER();
-    }
+Obtain the value of the C<Boolean> as an integer: 1 = C<TRUE>, 0 = C<FALSE>.
 
+=item C<INTVAL get_integer()>
 
-/*
+Same as C<get_bool()>.
 
-=item C<void set_integer_native(INTVAL value)>
+=item C<FLOATVAL get_number()>
 
-=item C<void set_bool(INTVAL value)>
+Obtain the value of the C<Boolean> as a float: 1.0 = C<TRUE>, 0.0 = C<FALSE>.
+
+=item C<STRING *get_string()>
 
-=item C<void set_pmc(PMC *value)>
+Obtain the value of the C<Boolean> as a string: "1" = C<TRUE>, "0" = C<FALSE>.
 
 =cut
 
 */
-    VTABLE void set_integer_native(INTVAL value) {
-        SUPER((value != 0));
+
+    VTABLE INTVAL get_bool() {
+        return get_boolean_FLAG(SELF);
     }
 
+    VTABLE INTVAL get_integer() {
+        return SELF.get_bool();
+    }
 
-    VTABLE void set_bool(INTVAL value) {
-        SELF.set_integer_native(value);
+    VTABLE FLOATVAL get_number() {
+        INTVAL value = SELF.get_bool();
+        return (FLOATVAL)value;
+    }
+
+    VTABLE STRING *get_string() {
+        return Parrot_str_from_int(INTERP, SELF.get_integer());
     }
 
 /*
 
+=item C<void set_bool(INTVAL value)>
+
+Sets the value of the Boolean to the specified integer value: 0 = C<FALSE>, non-0 =
+C<TRUE>.
+
+=item C<void set_integer_native(INTVAL value)>
+
+Same as C<set_bool()>.
+
 =item C<void set_number_native(FLOATVAL value)>
 
-Sets the value to C<value> evaluated in a boolean context.
+Sets the value of the Boolean to the specified float value: 0.0 = C<FALSE>, non-0.0 =
+C<TRUE>.
+
+=item C<void set_string_native(STRING *value)>
+
+Sets the Boolean to the value represented by the specified string. All values are
+considered C<TRUE> except for C<""> and C<"0>", which are considered
+C<FALSE>.
 
 =cut
 
 */
 
+    VTABLE void set_bool(INTVAL value) {
+        set_boolean_FLAG(SELF, value);
+    }
+
+    VTABLE void set_integer_native(INTVAL value) {
+        SELF.set_bool(value);
+    }
+
     VTABLE void set_number_native(FLOATVAL value) {
         SELF.set_bool(!FLOAT_IS_ZERO(value));
     }
 
+    VTABLE void set_string_native(STRING *value) {
+        SELF.set_bool(Parrot_str_boolean(INTERP, value));
+    }
+
 /*
 
-=item C<void set_string_native(STRING *value)>
+=item C<void freeze(PMC *info)>
+
+Used to archive the C<Boolean>.
 
-Sets the value to C<*value> evaluated in a boolean context.
+=item C<void thaw(PMC *info)>
+
+Used to unarchive the C<Boolean>.
 
 =cut
 
 */
 
-    VTABLE void set_string_native(STRING *value) {
-        SELF.set_bool(Parrot_str_boolean(INTERP, value));
+    VTABLE void freeze(PMC *info) {
+        SUPER(info);
+        VTABLE_push_integer(INTERP, info, SELF.get_bool());
     }
+
+    VTABLE void thaw(PMC *info) {
+        SUPER(info);
+        SELF.set_bool(VTABLE_shift_integer(INTERP, info));
+    }
+
 }
 
 /*
 
 =back
 
+See also the C<Scalar> PMC.
+
 =cut
 
 */

Modified: branches/html_cleanup/src/pmc/bytebuffer.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/bytebuffer.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/bytebuffer.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -21,17 +21,14 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING * build_string(PARROT_INTERP,
-    ARGIN(const unsigned char *content),
+    ARGIN_NULLOK(const unsigned char *content),
     INTVAL size,
-    ARGIN_NULLOK(const CHARSET *charset),
-    ARGIN_NULLOK(const ENCODING *encoding))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+    ARGIN_NULLOK(const STR_VTABLE *encoding))
+        __attribute__nonnull__(1);
 
 static INTVAL grow_to(INTVAL position);
 #define ASSERT_ARGS_build_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(content))
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_grow_to __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
@@ -306,26 +303,23 @@
 
 =over 4
 
-=item C<get_string(string charset, string encoding)>
+=item C<get_string(string encoding)>
 
-Create a string with the buffer content and the charset and encoding
-specified.
+Create a string with the buffer content and the encoding specified.
 
 =cut
 
 */
 
-    METHOD get_string(STRING *charsetname, STRING *encodingname) {
+    METHOD get_string(STRING *encodingname) {
         STRING *result;
         unsigned char *content;
         INTVAL size;
-        const CHARSET *charset = Parrot_get_charset(INTERP,
-            Parrot_charset_number(INTERP, charsetname));
-        const ENCODING *encoding = Parrot_get_encoding(INTERP,
+        const STR_VTABLE *encoding = Parrot_get_encoding(INTERP,
             Parrot_encoding_number(INTERP, encodingname));
         GET_ATTR_content(INTERP, SELF, content);
         GET_ATTR_size(INTERP, SELF, size);
-        result = build_string(INTERP, content, size, charset, encoding);
+        result = build_string(INTERP, content, size, encoding);
         RETURN(STRING *result);
     }
 
@@ -333,7 +327,7 @@
 
 =item C<get_string_as(string as)>
 
-Create a string with the buffer content and the same charset and encoding
+Create a string with the buffer content and the same encoding
 as the string argument.
 
 =cut
@@ -344,11 +338,11 @@
         STRING *result;
         unsigned char *content;
         INTVAL size;
-        const CHARSET* charset = STRING_IS_NULL(as) ? PARROT_DEFAULT_CHARSET : as->charset;
-        const ENCODING *encoding = STRING_IS_NULL(as) ? PARROT_DEFAULT_ENCODING : as->encoding;
+        const STR_VTABLE *encoding = STRING_IS_NULL(as) ?
+                Parrot_default_encoding_ptr : as->encoding;
         GET_ATTR_content(INTERP, SELF, content);
         GET_ATTR_size(INTERP, SELF, size);
-        result = build_string(INTERP, content, size, charset, encoding);
+        result = build_string(INTERP, content, size, encoding);
         RETURN(STRING *result);
     }
 
@@ -368,9 +362,9 @@
 decrease the number of reallocations.
 
 =item C<static STRING * build_string(PARROT_INTERP, const unsigned char
-*content, INTVAL size, const CHARSET *charset, const ENCODING *encoding)>
+*content, INTVAL size, const STR_VTABLE *encoding)>
 
-Build a string fro the buffer content with the charset and encoding specified.
+Build a string from the buffer content with the encoding specified.
 
 =cut
 
@@ -391,25 +385,23 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-build_string(PARROT_INTERP, ARGIN(const unsigned char *content),
+build_string(PARROT_INTERP, ARGIN_NULLOK(const unsigned char *content),
         INTVAL size,
-        ARGIN_NULLOK(const CHARSET *charset),
-        ARGIN_NULLOK(const ENCODING *encoding))
+        ARGIN_NULLOK(const STR_VTABLE *encoding))
 {
     ASSERT_ARGS(build_string)
-    STRING *result;
-    if (charset == NULL)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
-                "Invalid charset");
     if (encoding == NULL)
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
                 "Invalid encoding");
-    result = Parrot_str_new_init(interp, (const char *)content, size, encoding, charset, 0);
-    if (!CHARSET_VALIDATE(interp, result))
-        Parrot_ex_throw_from_c_args(interp, NULL,
-                EXCEPTION_INVALID_STRING_REPRESENTATION,
-                "Invalid buffer content");
-    return result;
+    else {
+        STRING * const result = Parrot_str_new_init(interp,
+                (const char *)content, size, encoding, 0);
+        if (!STRING_validate(interp, result))
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                    EXCEPTION_INVALID_STRING_REPRESENTATION,
+                    "Invalid buffer content");
+        return result;
+    }
 }
 
 /*

Modified: branches/html_cleanup/src/pmc/callcontext.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/callcontext.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/callcontext.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -390,9 +390,7 @@
     if (!hash) {
         hash = parrot_create_hash(interp,
             enum_type_ptr,
-            Hash_key_type_STRING,
-            hash_compare_string,
-            (hash_hash_key_fn)key_hash_STRING);
+            Hash_key_type_STRING);
 
         SETATTR_CallContext_hash(interp, SELF, hash);
     }
@@ -1346,7 +1344,8 @@
     }
 
     VTABLE INTVAL get_integer_keyed_str(STRING *key) {
-        Hash * const hash = get_hash(INTERP, SELF);
+        Hash *hash;
+        GETATTR_CallContext_hash(INTERP, SELF, hash);
 
         if (hash) {
             void     * const k    = hash_key_from_string(INTERP, hash, key);
@@ -1360,7 +1359,8 @@
     }
 
     VTABLE FLOATVAL get_number_keyed_str(STRING *key) {
-        Hash * const hash = get_hash(INTERP, SELF);
+        Hash *hash;
+        GETATTR_CallContext_hash(INTERP, SELF, hash);
 
         if (hash) {
             void     * const k    = hash_key_from_string(INTERP, hash, key);
@@ -1375,7 +1375,8 @@
 
 
     VTABLE STRING * get_string_keyed_str(STRING *key) {
-        Hash * const hash = get_hash(INTERP, SELF);
+        Hash *hash;
+        GETATTR_CallContext_hash(INTERP, SELF, hash);
 
         if (hash) {
             void     * const k    = hash_key_from_string(INTERP, hash, key);
@@ -1389,7 +1390,8 @@
     }
 
     VTABLE PMC * get_pmc_keyed_str(STRING *key) {
-        Hash * const hash = get_hash(INTERP, SELF);
+        Hash *hash;
+        GETATTR_CallContext_hash(INTERP, SELF, hash);
 
         if (hash) {
             void     * const k    = hash_key_from_string(INTERP, hash, key);
@@ -1407,7 +1409,8 @@
     }
 
     VTABLE INTVAL get_integer_keyed(PMC *key) {
-        Hash * const hash = get_hash(INTERP, SELF);
+        Hash *hash;
+        GETATTR_CallContext_hash(INTERP, SELF, hash);
 
         if (hash) {
             void     * const k    = hash_key_from_pmc(INTERP, hash, key);
@@ -1421,7 +1424,8 @@
     }
 
     VTABLE FLOATVAL get_number_keyed(PMC *key) {
-        Hash * const hash = get_hash(INTERP, SELF);
+        Hash *hash;
+        GETATTR_CallContext_hash(INTERP, SELF, hash);
 
         if (hash) {
             void     * const k    = hash_key_from_pmc(INTERP, hash, key);
@@ -1435,7 +1439,8 @@
     }
 
     VTABLE STRING * get_string_keyed(PMC *key) {
-        Hash * const hash = get_hash(INTERP, SELF);
+        Hash *hash;
+        GETATTR_CallContext_hash(INTERP, SELF, hash);
 
         if (hash) {
             void     * const k    = hash_key_from_pmc(INTERP, hash, key);
@@ -1449,7 +1454,8 @@
     }
 
     VTABLE PMC * get_pmc_keyed(PMC *key) {
-        Hash * const hash = get_hash(INTERP, SELF);
+        Hash *hash;
+        GETATTR_CallContext_hash(INTERP, SELF, hash);
 
         if (hash) {
             void     * const k    = hash_key_from_pmc(INTERP, hash, key);
@@ -1467,7 +1473,8 @@
     }
 
     VTABLE INTVAL exists_keyed(PMC *key) {
-        Hash * const hash = get_hash(INTERP, SELF);
+        Hash *hash;
+        GETATTR_CallContext_hash(INTERP, SELF, hash);
 
         if (hash) {
             void * const k = hash_key_from_pmc(INTERP, hash, key);
@@ -1478,7 +1485,8 @@
     }
 
     VTABLE INTVAL exists_keyed_str(STRING *key) {
-        Hash * const hash = get_hash(INTERP, SELF);
+        Hash *hash;
+        GETATTR_CallContext_hash(INTERP, SELF, hash);
 
         if (hash) {
             void * const k = hash_key_from_string(INTERP, hash, key);
@@ -1514,6 +1522,7 @@
         PMC * const  dest = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
         INTVAL       num;
         Pcc_cell    *our_cells, *dest_cells;
+        Hash        *hash;
 
         GET_ATTR_num_positionals(INTERP, SELF, num);
         /* Copy positionals */
@@ -1528,6 +1537,8 @@
         GET_ATTR_arg_flags(INTERP, SELF, arg_flags);
         GET_ATTR_return_flags(INTERP, SELF, return_flags);
 
+        GET_ATTR_hash(INTERP, SELF, hash);
+
         if (!PMC_IS_NULL(type_tuple))
             SET_ATTR_type_tuple(INTERP, dest, VTABLE_clone(INTERP, type_tuple));
 
@@ -1540,8 +1551,8 @@
         if (!PMC_IS_NULL(return_flags))
             SET_ATTR_return_flags(INTERP, dest, VTABLE_clone(INTERP, return_flags));
 
-        parrot_hash_clone(INTERP, get_hash(INTERP, SELF),
-            get_hash(INTERP, dest));
+        if (hash)
+            parrot_hash_clone(INTERP, hash, get_hash(INTERP, dest));
 
         return dest;
     }

Modified: branches/html_cleanup/src/pmc/class.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/class.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/class.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -141,11 +141,6 @@
         __attribute__nonnull__(3)
         __attribute__nonnull__(4);
 
-static size_t key_hash_pointer(SHIM_INTERP,
-    ARGIN(const void *value),
-    size_t seed)
-        __attribute__nonnull__(2);
-
 PARROT_CANNOT_RETURN_NULL
 static STRING * make_class_name(PARROT_INTERP, ARGIN(PMC *SELF))
         __attribute__nonnull__(1)
@@ -174,8 +169,6 @@
     , PARROT_ASSERT_ARG(object) \
     , PARROT_ASSERT_ARG(all_parents) \
     , PARROT_ASSERT_ARG(init))
-#define ASSERT_ARGS_key_hash_pointer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(value))
 #define ASSERT_ARGS_make_class_name __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(SELF))
@@ -184,22 +177,6 @@
 
 /*
 
-=item C<static size_t key_hash_pointer(PARROT_INTERP, const void *value, size_t
-seed)>
-
-=cut
-
-*/
-
-static size_t
-key_hash_pointer(SHIM_INTERP, ARGIN(const void *value), size_t seed)
-{
-    ASSERT_ARGS(key_hash_pointer)
-    return ((size_t) value ^ seed);
-}
-
-/*
-
 =item C<static int cache_class_attribs(PARROT_INTERP, PMC *cur_class, PMC
 *attrib_index, PMC *cache, int cur_index)>
 
@@ -685,9 +662,10 @@
 
         _class->vtable_overrides = Parrot_pmc_new(INTERP, enum_class_Hash);
         _class->parent_overrides = Parrot_pmc_new(INTERP, enum_class_Hash);
+
         _class->isa_cache        = parrot_create_hash(INTERP,
-            enum_type_INTVAL, Hash_key_type_PMC,
-            (hash_comp_fn)hash_compare_pointer, (hash_hash_key_fn)key_hash_pointer);
+            enum_type_INTVAL, Hash_key_type_PMC_ptr);
+
 
         /* We put ourself on the all parents list. */
         VTABLE_push_pmc(INTERP, _class->all_parents, SELF);

Modified: branches/html_cleanup/src/pmc/complex.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/complex.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/complex.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -301,7 +301,7 @@
 }
 
 
-pmclass Complex auto_attrs {
+pmclass Complex provides complex provides scalar auto_attrs {
 
     ATTR FLOATVAL re; /* real part */
     ATTR FLOATVAL im; /* imaginary part */

Modified: branches/html_cleanup/src/pmc/continuation.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/continuation.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/continuation.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -42,8 +42,8 @@
 
 
 /*
- * A Continuation (and RetContinuation, ExceptionHandler) has in its
- * context a pointer to the register frame, which contains active objects.
+ * A Continuation (and an ExceptionHandler) has in its context a pointer
+ * to the register frame, which contains active objects.
  * Additionally ct->current_cont has the continuation of the caller.
  */
 

Modified: branches/html_cleanup/src/pmc/default.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/default.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/default.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -533,6 +533,22 @@
 
 /*
 
+=item C<void PMC *add_attribute(STRING *name, PMC *type)>
+
+Throws an exception, as you can only add an attribute to something Class-y or
+Role-y.
+
+=cut
+
+*/
+
+    VTABLE void add_attribute(STRING *name, PMC *type) {
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
+            "Cannot add attribute to non-class");
+    }
+
+/*
+
 =item C<PMC *get_namespace>
 
 Return the namespace for this PMC.
@@ -781,7 +797,7 @@
 
     INTVAL hashvalue() {
         STRING *s = SELF.get_string();
-        return key_hash_STRING(INTERP, s, 0);
+        return Parrot_str_to_hashval(INTERP, s);
     }
 
 /*
@@ -1839,56 +1855,6 @@
 
         return retval;
     }
-/*
-
-=item C<PMC *logical_or(PMC *value, PMC *dest)>
-
-Default fallback. Performs a multiple dispatch call for 'logical_or'.
-
-=cut
-
-*/
-
-    VTABLE PMC *logical_or(PMC *value, PMC *dest) {
-        PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
-                "logical_or", "PPP->P", SELF, value, dest, &result);
-        return result;
-    }
-
-/*
-
-=item C<PMC *logical_and(PMC *value, PMC *dest)>
-
-Default fallback. Performs a multiple dispatch call for 'logical_and'.
-
-=cut
-
-*/
-
-    VTABLE PMC *logical_and(PMC *value, PMC *dest) {
-        PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
-                "logical_and", "PPP->P", SELF, value, dest, &result);
-        return result;
-    }
-
-/*
-
-=item C<PMC *logical_xor(PMC *value, PMC *dest)>
-
-Default fallback. Performs a multiple dispatch call for 'logical_xor'.
-
-=cut
-
-*/
-
-    VTABLE PMC *logical_xor(PMC *value, PMC *dest) {
-        PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
-                "logical_xor", "PPP->P", SELF, value, dest, &result);
-        return result;
-    }
 
 /*
 

Modified: branches/html_cleanup/src/pmc/eval.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/eval.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/eval.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -240,7 +240,6 @@
             return;
         }
 
-        /* TT #1315 create PF API, move it there */
         seg = (PackFile_Segment *)cur_cs->const_table;
         if (seg) {
             PackFile_Segment_destroy(INTERP, seg);
@@ -321,8 +320,7 @@
          * effect
          */
         aligned_size = size + 15;
-        res          = Parrot_str_new_noinit(INTERP, enum_stringrep_one,
-                                         aligned_size);
+        res          = Parrot_str_new_noinit(INTERP, aligned_size);
         res->strlen  = res->bufused = size;
 
         if ((size_t)(res->strstart) & 0xf) {

Modified: branches/html_cleanup/src/pmc/filehandle.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/filehandle.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/filehandle.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -373,18 +373,24 @@
 
 #ifdef PARROT_HAS_READLINE
     /* 4-column indent to get c_indent.t to DTRT */
-        char * const r = readline(got_prompt ? prompt->strstart : NULL);
+        char *prompt_cstring =
+            (got_prompt ? Parrot_str_to_cstring(INTERP, prompt) : NULL);
+        char * const r = readline(prompt_cstring);
+        Parrot_str_free_cstring(prompt_cstring);
 
         if (r) {
             if (*r)
                 add_history(r);
 
             string_result = Parrot_str_new(INTERP, r, 0);
-            mem_internal_free(r);
+            free(r);
         }
 #else
-        if (got_prompt)
-            fprintf(stderr, "%s", prompt->strstart);
+        if (got_prompt) {
+            char *prompt_cstring = Parrot_str_to_cstring(INTERP, prompt);
+            fprintf(stderr, "%s", prompt_cstring);
+            Parrot_str_free_cstring(prompt_cstring);
+        }
 
         if (!(PARROT_FILEHANDLE(SELF)->flags & PIO_F_LINEBUF))
             Parrot_io_setlinebuf(INTERP, SELF);
@@ -463,6 +469,8 @@
             Parrot_io_close(INTERP, filehandle);
         }
         else {
+            PMC *sb;
+
             /* slurp open file */
             if (Parrot_io_is_closed_filehandle(INTERP, SELF))
                 Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_PIO_ERROR,
@@ -472,12 +480,15 @@
             if (!(PARROT_FILEHANDLE(SELF)->flags & PIO_F_LINEBUF))
                 Parrot_io_setlinebuf(INTERP, SELF);
 
-            result = STRINGNULL;
+            sb = Parrot_pmc_new_init_int(interp, enum_class_StringBuilder,
+                    4096);
+
             do {
                 STRING * const part = Parrot_io_reads(INTERP, SELF, 0);
-                result = STRING_IS_NULL(result) ? part :
-                        Parrot_str_concat(INTERP, result, part);
+                VTABLE_push_string(interp, sb, part);
             } while (!Parrot_io_eof(INTERP, SELF));
+
+            result = VTABLE_get_string(interp, sb);
         }
 
         RETURN(STRING *result);

Modified: branches/html_cleanup/src/pmc/fixedbooleanarray.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/fixedbooleanarray.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/fixedbooleanarray.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -334,10 +334,8 @@
 */
 
     VTABLE PMC *get_pmc_keyed_int(INTVAL key) {
-        PMC  * const ret = Parrot_pmc_new(INTERP, enum_class_Boolean);
-        const INTVAL val = SELF.get_integer_keyed_int(key);
-        VTABLE_set_integer_native(INTERP, ret, val);
-        return ret;
+        return Parrot_pmc_new_init_int(INTERP, enum_class_Boolean,
+                SELF.get_integer_keyed_int(key));
     }
 
 /*

Modified: branches/html_cleanup/src/pmc/float.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/float.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/float.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -139,12 +139,14 @@
 */
 
     VTABLE void set_integer_native(INTVAL value) {
-        Parrot_pmc_reuse(INTERP, SELF, enum_class_Integer, 0);
+        Parrot_pmc_reuse(INTERP, SELF,
+            Parrot_get_ctx_HLL_type(INTERP, enum_class_Integer), 0);
         SELF.set_integer_native(value);
     }
 
     VTABLE void set_bool(INTVAL value) {
-        Parrot_pmc_reuse(INTERP, SELF, enum_class_Boolean, 0);
+        Parrot_pmc_reuse(INTERP, SELF,
+            Parrot_get_ctx_HLL_type(INTERP, enum_class_Boolean), 0);
         SELF.set_bool(value);
     }
 
@@ -175,7 +177,8 @@
 */
 
     VTABLE void set_string_native(STRING *value) {
-        Parrot_pmc_reuse(INTERP, SELF, enum_class_String, 0);
+        Parrot_pmc_reuse(INTERP, SELF,
+            Parrot_get_ctx_HLL_type(INTERP, enum_class_String), 0);
         SELF.set_string_native(value);
     }
 

Modified: branches/html_cleanup/src/pmc/hash.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/hash.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/hash.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -141,9 +141,7 @@
 
         attr->hash = parrot_create_hash(INTERP,
                 (PARROT_DATA_TYPE)value_type,
-                Hash_key_type_STRING,
-                hash_compare_string,
-                (hash_hash_key_fn)key_hash_STRING);
+                Hash_key_type_STRING);
         PObj_custom_mark_destroy_SETALL(SELF);
     }
 
@@ -233,23 +231,17 @@
         if (type == Hash_key_type_STRING)
             new_hash = parrot_create_hash(INTERP,
                     entry_type,
-                    Hash_key_type_STRING,
-                    hash_compare_string,
-                    (hash_hash_key_fn)key_hash_STRING);
+                    Hash_key_type_STRING);
         else if (type == Hash_key_type_int)
             /* new_int_hash set BOTH keys and values to INTVAL */
             new_hash = parrot_create_hash(INTERP,
                     entry_type,
-                    Hash_key_type_int,
-                    hash_compare_int,
-                    key_hash_int);
+                    Hash_key_type_int);
         else if (type == Hash_key_type_PMC)
             /* new_int_hash set BOTH keys and values to INTVAL */
             new_hash = parrot_create_hash(INTERP,
                     entry_type,
-                    Hash_key_type_PMC,
-                    (hash_comp_fn)hash_compare_pmc,
-                    (hash_hash_key_fn)key_hash_PMC);
+                    Hash_key_type_PMC);
         else
             /* We probably will not implement other types of keys. They are way
              * too dangerous to use from PIR */
@@ -310,9 +302,7 @@
           case enum_type_PMC:
             new_hash = parrot_create_hash(INTERP,
                         (PARROT_DATA_TYPE)type,
-                        old_hash ? old_hash->key_type : Hash_key_type_STRING,
-                        old_hash ? old_hash->compare  : hash_compare_string,
-                        old_hash ? old_hash->hash_val : (hash_hash_key_fn)key_hash_STRING);
+                        old_hash ? old_hash->key_type : Hash_key_type_STRING);
             break;
           default:
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_UNIMPLEMENTED,
@@ -383,12 +373,13 @@
     }
 
     VTABLE STRING *get_repr() {
-        /* TT #1231:  Use freeze in get_repr() (for hashes) */
-        PMC * const  iter = VTABLE_get_iter(INTERP, SELF);
-        STRING      *res  = CONST_STRING(INTERP, "{");
-        const INTVAL n    = VTABLE_elements(INTERP, SELF);
+        PMC * const iter = VTABLE_get_iter(INTERP, SELF);
+        PMC          *sb = Parrot_pmc_new(INTERP, enum_class_StringBuilder);
+        const INTVAL n   = VTABLE_elements(INTERP, SELF);
         INTVAL       j;
 
+        VTABLE_push_string(INTERP, sb, CONST_STRING(INTERP, "{"));
+
         for (j = 0; j < n; ++j) {
             STRING * const key      = VTABLE_shift_string(INTERP, iter);
             char *   const key_str  = Parrot_str_to_cstring(INTERP, key);
@@ -407,25 +398,22 @@
             Parrot_str_free_cstring(key_str);
 
             if (all_digit) {
-                res = Parrot_str_concat(INTERP, res, key);
+                VTABLE_push_string(INTERP, sb, key);
             }
             else {
-                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, "'"));
+                VTABLE_push_string(INTERP, sb, CONST_STRING(INTERP, "'"));
+                VTABLE_push_string(INTERP, sb, key);
+                VTABLE_push_string(INTERP, sb, CONST_STRING(INTERP, "'"));
             }
-
-            res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, ": "));
+            VTABLE_push_string(INTERP, sb, CONST_STRING(INTERP, ":"));
             val = SELF.get_pmc_keyed_str(key);
-            res = Parrot_str_concat(INTERP, res, VTABLE_get_string(INTERP, val));
+            VTABLE_push_string(INTERP, sb, VTABLE_get_string(INTERP, val));
 
             if (j < n - 1)
-                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, ", "));
+                VTABLE_push_string(INTERP, sb, CONST_STRING(INTERP, ", "));
         }
 
-        res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "}"));
-
-        return res;
+        return VTABLE_get_string(INTERP, sb);
     }
 
 /*
@@ -628,8 +616,9 @@
         HashBucket * const b =
             parrot_hash_get_bucket(INTERP, hash, hash_key_from_string(INTERP, hash, key));
 
+        /* XXX: shouldn't we return STRINGNULL? */
         if (!b)
-            return Parrot_str_new_noinit(INTERP, enum_stringrep_one, 0);
+            return CONST_STRING(INTERP, "");
 
         return hash_value_to_string(INTERP, hash, b->value);
     }
@@ -640,7 +629,7 @@
             parrot_hash_get_bucket(INTERP, hash, hash_key_from_int(INTERP, hash, key));
 
         if (!b)
-            return Parrot_str_new_noinit(INTERP, enum_stringrep_one, 0);
+            return CONST_STRING(INTERP, "");
 
         return hash_value_to_string(INTERP, hash, b->value);
     }
@@ -661,7 +650,7 @@
         HashBucket * const b        = parrot_hash_get_bucket(INTERP, hash, hash_key);
 
         if (!b)
-            return Parrot_str_new_noinit(INTERP, enum_stringrep_one, 0);
+            return CONST_STRING(INTERP, "");
 
         key = key_next(INTERP, key);
 
@@ -772,9 +761,8 @@
 
         GET_ATTR_hash(INTERP, SELF, hash);
 
-        /* special case the most likely key type, for speed */
-        if (hash->key_type != Hash_key_type_STRING)
-            key = (STRING *)hash_key_from_string(INTERP, hash, key);
+        if (!hash->entries)
+            return PMCNULL;
 
         b = parrot_hash_get_bucket(INTERP, hash, key);
 
@@ -1198,7 +1186,6 @@
 */
 
     VTABLE void freeze(PMC *info) {
-        SUPER(info);
         Parrot_hash_freeze(INTERP, (Hash *)SELF.get_pointer(), info);
     }
 
@@ -1213,7 +1200,6 @@
 */
 
     VTABLE void thaw(PMC *info) {
-        SUPER(info);
         SELF.set_pointer((void *)Parrot_hash_thaw(INTERP, info));
     }
 }

Modified: branches/html_cleanup/src/pmc/hashiterator.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/hashiterator.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/hashiterator.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -79,7 +79,32 @@
 {
     ASSERT_ARGS(advance_to_next)
     Parrot_HashIterator_attributes * const attrs  = PARROT_HASHITERATOR(self);
-    parrot_hash_iterator_advance(attrs->parrot_hash, attrs->bucket, attrs->pos);
+    if (attrs->parrot_hash->key_type == Hash_key_type_int
+    ||  attrs->parrot_hash->key_type == Hash_key_type_ptr
+    ||  attrs->parrot_hash->key_type == Hash_key_type_cstring){
+        /* indexed scan */
+        if (attrs->elements){
+            if (attrs->bucket)
+                attrs->bucket = attrs->bucket->next;
+            while (!attrs->bucket) {
+                /* If there is no more buckets */
+                if (attrs->pos == attrs->total_buckets)
+                    break;
+                attrs->bucket = attrs->parrot_hash->index[attrs->pos++];
+            }
+        }
+    }
+    else{
+        /* linear scan */
+        if (!attrs->bucket)
+            attrs->bucket = attrs->parrot_hash->buckets;
+        while (attrs->elements > 0) {
+            attrs->bucket = attrs->parrot_hash->buckets + attrs->pos++;
+            if (attrs->bucket->key)
+                break;
+        }
+    }
+
     --attrs->elements;
     return;
 }
@@ -110,17 +135,11 @@
         attrs->pmc_hash         = hash;
         attrs->parrot_hash      = (Hash*)VTABLE_get_pointer(INTERP, hash);
         attrs->total_buckets    = attrs->parrot_hash->mask + 1;
-        attrs->bucket           = 0;
+        attrs->elements         = attrs->parrot_hash->entries;
+        attrs->bucket           = NULL;
         attrs->pos              = 0;
-        /* Will be decreased on initial advance_to_next */
-        /* XXX Do we really need to support this use-case ? */
-        attrs->elements         = attrs->parrot_hash->entries + 1;
 
         PObj_custom_mark_SET(SELF);
-
-        /* Initial state of iterator is "before start" */
-        /* So, advance to first element */
-        advance_to_next(INTERP, SELF);
     }
 
 /*
@@ -163,9 +182,9 @@
 
         if (value == ITERATE_FROM_START) {
             /* Restart iterator */
-            attrs->bucket           = 0;
+            attrs->elements         = attrs->parrot_hash->entries;
+            attrs->bucket           = NULL;
             attrs->pos              = 0;
-            advance_to_next(INTERP, SELF);
             return;
         }
 
@@ -197,7 +216,8 @@
 */
 
     VTABLE INTVAL get_bool() {
-        return PARROT_HASHITERATOR(SELF)->bucket != 0;
+        return PARROT_HASHITERATOR(SELF)->elements != 0;
+
     }
 
 /*
@@ -215,7 +235,7 @@
     }
 
     VTABLE INTVAL get_integer() {
-        return SELF.elements();
+        return PARROT_HASHITERATOR(SELF)->elements;
     }
 
 /*
@@ -235,7 +255,10 @@
 
         PMC        *ret;
 
-        if (!attrs->bucket)
+        /* Move to next bucket */
+        advance_to_next(INTERP, SELF);
+
+        if (attrs->elements < 0)
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "StopIteration");
 
@@ -243,9 +266,6 @@
         VTABLE_set_pointer_keyed_int(INTERP, ret, 0, attrs->parrot_hash);
         VTABLE_set_pointer_keyed_int(INTERP, ret, 1, attrs->bucket);
 
-        /* Move to next bucket */
-        advance_to_next(INTERP, SELF);
-
         return ret;
     }
 
@@ -254,17 +274,15 @@
 */
 
     VTABLE STRING* shift_string() {
-        Parrot_HashIterator_attributes * const attrs =
-                PARROT_HASHITERATOR(SELF);
-        HashBucket                     * const bucket = attrs->bucket;
-
-        if (!attrs->parrot_hash || !attrs->bucket)
-            return CONST_STRING(INTERP, "");
+        Parrot_HashIterator_attributes * const attrs = PARROT_HASHITERATOR(SELF);
 
         /* Move to next bucket */
         advance_to_next(INTERP, SELF);
 
-        return hash_key_to_string(INTERP, attrs->parrot_hash, bucket->key);
+        if (attrs->elements < 0)
+            return CONST_STRING(INTERP, "");
+
+        return hash_key_to_string(INTERP, attrs->parrot_hash, attrs->bucket->key);
     }
 
 }

Copied: branches/html_cleanup/src/pmc/imageiofreeze.pmc (from r49200, trunk/src/pmc/imageiofreeze.pmc)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/html_cleanup/src/pmc/imageiofreeze.pmc	Wed Sep 22 03:35:47 2010	(r49232, copy of r49200, trunk/src/pmc/imageiofreeze.pmc)
@@ -0,0 +1,526 @@
+/*
+Copyright (C) 2010, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/pmc/imageiofreeze.pmc - ImageIOFreeze PMC
+
+=head1 DESCRIPTION
+
+Freezes other PMCs.
+
+=head1 FUNCTIONS
+
+=over 4
+
+=cut
+
+*/
+
+#include "parrot/imageio.h"
+
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void create_buffer(PARROT_INTERP,
+    ARGIN_NULLOK(PMC *pmc),
+    ARGMOD(PMC *info))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*info);
+
+PARROT_INLINE
+static void ensure_buffer_size(PARROT_INTERP, ARGIN(PMC *io), size_t len)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_INLINE
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static opcode_t * GET_VISIT_CURSOR(ARGIN(const PMC *pmc))
+        __attribute__nonnull__(1);
+
+PARROT_INLINE
+static void INC_VISIT_CURSOR(ARGMOD(PMC *pmc), UINTVAL inc)
+        __attribute__nonnull__(1)
+        FUNC_MODIFIES(*pmc);
+
+PARROT_INLINE
+static void SET_VISIT_CURSOR(ARGMOD(PMC *pmc), ARGIN(const char *cursor))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*pmc);
+
+#define ASSERT_ARGS_create_buffer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(info))
+#define ASSERT_ARGS_ensure_buffer_size __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(io))
+#define ASSERT_ARGS_GET_VISIT_CURSOR __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(pmc))
+#define ASSERT_ARGS_INC_VISIT_CURSOR __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(pmc))
+#define ASSERT_ARGS_SET_VISIT_CURSOR __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(pmc) \
+    , PARROT_ASSERT_ARG(cursor))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
+/*
+
+=item C<static opcode_t * GET_VISIT_CURSOR(const PMC *pmc)>
+
+Get the buffer cursor. Buffer relocations are handled.
+
+=cut
+
+*/
+
+PARROT_INLINE
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static opcode_t *
+GET_VISIT_CURSOR(ARGIN(const PMC *pmc))
+{
+    ASSERT_ARGS(GET_VISIT_CURSOR)
+
+    char * const buf = (char *)Buffer_bufstart(PARROT_IMAGEIOFREEZE(pmc)->buffer);
+    const size_t pos = PARROT_IMAGEIOFREEZE(pmc)->pos;
+    return (opcode_t *)(buf + pos);
+}
+
+/*
+
+=item C<static void SET_VISIT_CURSOR(PMC *pmc, const char *cursor)>
+
+Set the buffer cursor. Buffer relocations are handled.
+
+=cut
+
+*/
+
+
+PARROT_INLINE
+static void
+SET_VISIT_CURSOR(ARGMOD(PMC *pmc), ARGIN(const char *cursor))
+{
+    ASSERT_ARGS(SET_VISIT_CURSOR)
+
+    const char * const bufstart  = (const char *)Buffer_bufstart(PARROT_IMAGEIOFREEZE(pmc)->buffer);
+    PARROT_IMAGEIOFREEZE(pmc)->pos = (cursor - bufstart);
+}
+
+/*
+
+=item C<static void INC_VISIT_CURSOR(PMC *pmc, UINTVAL inc)>
+
+Increment the buffer cursor. Buffer relocations are handled.
+
+=cut
+
+*/
+
+
+PARROT_INLINE
+static void
+INC_VISIT_CURSOR(ARGMOD(PMC *pmc), UINTVAL inc)
+{
+    ASSERT_ARGS(INC_VISIT_CURSOR)
+
+    PARROT_IMAGEIOFREEZE(pmc)->pos += inc;
+}
+
+
+/*
+
+=item C<static void create_buffer(PARROT_INTERP, PMC *pmc, PMC *info)>
+
+Allocate the image buffer.
+
+=cut
+
+*/
+
+static void
+create_buffer(PARROT_INTERP, ARGIN_NULLOK(PMC *pmc), ARGMOD(PMC *info))
+{
+    ASSERT_ARGS(create_buffer)
+
+    INTVAL  len;
+
+    if (!PMC_IS_NULL(pmc)) {
+        STRING * const array = CONST_STRING(interp, "array");
+        STRING * const hash  = CONST_STRING(interp, "hash");
+        INTVAL         items = 1;
+
+        if (VTABLE_does(interp, pmc, array) || VTABLE_does(interp, pmc, hash))
+            items += VTABLE_elements(interp, pmc);
+
+        len = items * FREEZE_BYTES_PER_ITEM;
+    }
+    else
+        len = FREEZE_BYTES_PER_ITEM;
+
+    PARROT_IMAGEIOFREEZE(info)->buffer =
+        Parrot_gc_new_bufferlike_header(interp, sizeof (Buffer));
+    Parrot_gc_allocate_buffer_storage_aligned(interp,
+        PARROT_IMAGEIOFREEZE(info)->buffer, len);
+    SET_VISIT_CURSOR(info,
+        (const char *)Buffer_bufstart(PARROT_IMAGEIOFREEZE(info)->buffer));
+}
+
+/*
+
+=item C<static void ensure_buffer_size(PARROT_INTERP, PMC *io, size_t len)>
+
+Checks the size of the buffer to see if it can accommodate C<len> more
+bytes. If not, expands the buffer.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+ensure_buffer_size(PARROT_INTERP, ARGIN(PMC *io), size_t len)
+{
+    ASSERT_ARGS(ensure_buffer_size)
+
+    Buffer * const buf  = PARROT_IMAGEIOFREEZE(io)->buffer;
+    const size_t used   = PARROT_IMAGEIOFREEZE(io)->pos;
+    const int need_free = Buffer_buflen(buf) - used - len;
+
+    /* grow by factor 1.5 or such */
+    if (need_free <= 16) {
+        size_t new_size = (size_t) (Buffer_buflen(buf) * 1.5);
+
+        if (new_size < Buffer_buflen(buf) - need_free + 512)
+            new_size = Buffer_buflen(buf) - need_free + 512;
+
+        Parrot_gc_reallocate_buffer_storage(interp, buf, new_size);
+        PARROT_ASSERT(Buffer_buflen(buf) - used - len >= 15);
+    }
+
+#ifndef DISABLE_GC_DEBUG
+    Parrot_gc_compact_memory_pool(interp);
+#endif
+}
+
+pmclass ImageIOFreeze auto_attrs {
+    ATTR Buffer              *buffer;      /* buffer to store the image */
+    ATTR size_t               pos;         /* current read/write buf position */
+    ATTR PMC                 *seen;        /* seen hash */
+    ATTR PMC                 *todo;        /* todo list */
+    ATTR UINTVAL              id;          /* freze ID of PMC */
+    ATTR struct PackFile     *pf;
+    ATTR PackFile_ConstTable *pf_ct;
+
+/*
+
+=back
+
+=head1 VTABLES
+
+=over 4
+
+=cut
+
+*/
+
+/*
+
+=item C<void init()>
+
+Initializes the PMC.
+
+=cut
+
+*/
+    VTABLE void init() {
+        PARROT_IMAGEIOFREEZE(SELF)->seen = Parrot_pmc_new(INTERP, enum_class_Hash);
+        VTABLE_set_pointer(INTERP, PARROT_IMAGEIOFREEZE(SELF)->seen,
+            parrot_new_intval_hash(INTERP));
+
+        PARROT_IMAGEIOFREEZE(SELF)->todo =
+            Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
+
+        PObj_flag_CLEAR(private1, SELF);
+
+        PObj_custom_mark_SET(SELF);
+    }
+
+
+/*
+
+=item C<void destroy()>
+
+Destroys the PMC.
+
+=cut
+
+*/
+    VTABLE void destroy() {
+        PackFile_destroy(INTERP, PARROT_IMAGEIOFREEZE(SELF)->pf);
+        PARROT_IMAGEIOFREEZE(SELF)->pf = NULL;
+    }
+
+
+/*
+
+=item C<void mark()>
+
+Marks the PMC as alive.
+
+=cut
+
+*/
+    VTABLE void mark() {
+        PObj * const buffer = (PObj *)(PARROT_IMAGEIOFREEZE(SELF)->buffer);
+        if (buffer)
+            Parrot_gc_mark_PObj_alive(INTERP, buffer);
+        Parrot_gc_mark_PMC_alive(INTERP, PARROT_IMAGEIOFREEZE(SELF)->todo);
+        Parrot_gc_mark_PMC_alive(INTERP, PARROT_IMAGEIOFREEZE(SELF)->seen);
+    }
+
+
+/*
+
+=item C<STRING *get_string()>
+
+Returns the content of the image as a string.
+
+=cut
+
+*/
+
+    VTABLE STRING *get_string() {
+        return Parrot_str_new_from_buffer(INTERP,
+                                          PARROT_IMAGEIOFREEZE(SELF)->buffer,
+                                          PARROT_IMAGEIOFREEZE(SELF)->pos);
+    }
+
+
+/*
+
+=item C<VTABLE PMC *get_iter()>
+
+Get the C<todo> list for this freeze/thaw for iterating over.
+
+=cut
+
+*/
+
+    VTABLE PMC *get_iter() {
+        return PARROT_IMAGEIOFREEZE(SELF)->todo;
+    }
+
+/*
+
+=item C<VTABLE INTVAL get_integer()>
+
+Returns the flags describing the visit action.
+
+=cut
+
+*/
+
+    VTABLE INTVAL get_integer() {
+        return VISIT_FREEZE_NORMAL;
+    }
+
+
+/*
+
+=item C<VTABLE void push_integer(INTVAL v)>
+
+Pushes the integer C<v> onto the end of the image.
+
+=cut
+
+*/
+
+    VTABLE void push_integer(INTVAL v) {
+        const size_t len = PF_size_integer() * sizeof (opcode_t);
+        ensure_buffer_size(INTERP, SELF, len);
+        SET_VISIT_CURSOR(SELF,
+            (const char *)PF_store_integer(GET_VISIT_CURSOR(SELF), v));
+    }
+
+
+/*
+
+=item C<VTABLE void push_float(FLOATVAL v)>
+
+Pushes the float C<v> onto the end of the image.
+
+=cut
+
+*/
+
+    VTABLE void push_float(FLOATVAL v) {
+        const size_t len = PF_size_number() * sizeof (opcode_t);
+        ensure_buffer_size(INTERP, SELF, len);
+        SET_VISIT_CURSOR(SELF,
+            (const char *)PF_store_number(GET_VISIT_CURSOR(SELF), &v));
+    }
+
+
+/*
+
+=item C<VTABLE void push_string(STRING *v)>
+
+Pushes the string C<*v> onto the end of the image.
+
+=cut
+
+*/
+
+    VTABLE void push_string(STRING *v) {
+        if (PObj_flag_TEST(private1, SELF)) {
+            /* store a reference to constant table entry of string */
+            PMC                 * const v_pmc = key_new_string(interp, v);
+            PackFile_ConstTable * const table = PARROT_IMAGEIOFREEZE(SELF)->pf_ct;
+            const int idx =
+                PackFile_ConstTable_rlookup(INTERP, table, v_pmc, PFC_STRING);
+
+            if (idx >= 0) {
+                STATICSELF.push_integer(idx);
+                return;
+            }
+
+            /* XXX handle cases where the PMC has changed after
+             * Parrot_freeze_strings was called eg: :immediate subs */
+            STATICSELF.push_integer(-1);
+
+            /* TODO
+             * should really be:
+             * PANIC(INTERP, "string not previously in constant table "
+             *               "when freezing to packfile"); */
+        }
+
+        {
+            const size_t len = PF_size_string(v) * sizeof (opcode_t);
+            ensure_buffer_size(INTERP, SELF, len);
+            SET_VISIT_CURSOR(SELF,
+                (const char *)PF_store_string(GET_VISIT_CURSOR(SELF), v));
+        }
+    }
+
+
+/*
+
+=item C<VTABLE void push_pmc(PMC *v)>
+
+Pushes a reference to pmc C<*v> onto the end of the image. If C<*v>
+hasn't been seen yet, it is also pushed onto the todo list.
+
+=cut
+
+*/
+
+    VTABLE void push_pmc(PMC *v) {
+        UINTVAL id;
+        int packid_type;
+
+        if (PMC_IS_NULL(v)) {
+            id   = 0;
+            packid_type = enum_PackID_seen;
+        }
+        else {
+            Hash * const hash = (Hash *)VTABLE_get_pointer(INTERP,
+                    PARROT_IMAGEIOFREEZE(SELF)->seen);
+            HashBucket * const b = parrot_hash_get_bucket(INTERP, hash, v);
+
+            if (b) {
+                id = (UINTVAL)b->value;
+                packid_type = enum_PackID_seen;
+            }
+            else {
+                ++PARROT_IMAGEIOFREEZE(SELF)->id; /* next id to freeze */
+                id = PARROT_IMAGEIOFREEZE(SELF)->id;
+                packid_type = enum_PackID_normal;
+            }
+        }
+
+        SELF.push_integer(PackID_new(id, packid_type));
+
+        if (packid_type == enum_PackID_normal) {
+            Hash * const hash = (Hash *)VTABLE_get_pointer(INTERP,
+                    PARROT_IMAGEIOFREEZE(SELF)->seen);
+
+            PARROT_ASSERT(v);
+
+            /* workaround to keep ParrotInterpreter PBC hack working */
+            if (v->vtable->base_type == enum_class_ParrotInterpreter)
+                PObj_flag_CLEAR(private1, SELF);
+
+            SELF.push_integer(
+                    PObj_is_object_TEST(v)
+                    ? (INTVAL) enum_class_Object
+                    : v->vtable->base_type);
+
+            parrot_hash_put(INTERP, hash, v, (void *)id);
+            VTABLE_push_pmc(INTERP, PARROT_IMAGEIOFREEZE(SELF)->todo, v);
+        }
+    }
+
+
+/*
+
+=item C<void set_pointer(void *value)>
+
+Sets the constant table of this ImageIO PMC.
+
+=cut
+
+*/
+
+    VTABLE void set_pointer(void *value) {
+        PObj_flag_SET(private1, SELF);
+        PARROT_IMAGEIOFREEZE(SELF)->pf_ct = (PackFile_ConstTable *)value;
+    }
+
+
+    VTABLE void set_pmc(PMC *p)
+    {
+        create_buffer(INTERP, p, SELF);
+
+        if (PObj_flag_TEST(private1, SELF)) {
+            PARROT_IMAGEIOFREEZE(SELF)->pf = PARROT_IMAGEIOFREEZE(SELF)->pf_ct->base.pf;
+        }
+        else {
+            const UINTVAL header_length =
+                GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
+
+            PARROT_IMAGEIOFREEZE(SELF)->pf = PackFile_new(INTERP, 0);
+            PObj_custom_destroy_SET(SELF);
+
+            ensure_buffer_size(INTERP, SELF, header_length);
+            mem_sys_memcopy(GET_VISIT_CURSOR(SELF),
+                PARROT_IMAGEIOFREEZE(SELF)->pf->header, PACKFILE_HEADER_BYTES);
+            INC_VISIT_CURSOR(SELF, header_length);
+        }
+
+        STATICSELF.push_pmc(p);
+        Parrot_visit_loop_visit(INTERP, SELF);
+    }
+}
+
+
+/*
+
+=back
+
+=cut
+
+*/
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Copied: branches/html_cleanup/src/pmc/imageiothaw.pmc (from r49200, trunk/src/pmc/imageiothaw.pmc)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/html_cleanup/src/pmc/imageiothaw.pmc	Wed Sep 22 03:35:47 2010	(r49232, copy of r49200, trunk/src/pmc/imageiothaw.pmc)
@@ -0,0 +1,355 @@
+/*
+Copyright (C) 2010, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/pmc/imageiothaw.pmc - ImageIOThaw PMC
+
+=head1 DESCRIPTION
+
+Thaws PMCs from packfile images.
+
+=head1 VTABLES
+
+=over 4
+
+=cut
+
+*/
+
+#include "parrot/imageio.h"
+
+#define BYTECODE_SHIFT_OK(interp, pmc) PARROT_ASSERT( \
+    PARROT_IMAGEIOTHAW(pmc)->curs <= (opcode_t *) \
+    (PARROT_IMAGEIOTHAW(pmc)->img->strstart + \
+    Parrot_str_byte_length((interp), PARROT_IMAGEIOTHAW(pmc)->img)))
+
+
+/* HEADERIZER HFILE: none */
+
+pmclass ImageIOThaw auto_attrs {
+    ATTR STRING              *img;
+    ATTR opcode_t            *curs;
+    ATTR PMC                 *todo;
+    ATTR PackFile            *pf;
+    ATTR PackFile_ConstTable *pf_ct;
+
+/*
+
+=item C<void init()>
+
+Initializes the PMC.
+
+=cut
+
+*/
+
+    VTABLE void init() {
+        PARROT_IMAGEIOTHAW(SELF)->todo =
+            Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
+
+        PObj_flag_CLEAR(private1, SELF);
+
+        PObj_custom_mark_SET(SELF);
+    }
+
+
+/*
+
+=item C<void destroy()>
+
+Destroys the PMC.
+
+=cut
+
+*/
+
+    VTABLE void destroy() {
+        PackFile_destroy(INTERP, PARROT_IMAGEIOTHAW(SELF)->pf);
+        PARROT_IMAGEIOTHAW(SELF)->pf = NULL;
+    }
+
+
+/*
+
+=item C<void mark()>
+
+Marks the PMC as alive.
+
+=cut
+
+*/
+
+    VTABLE void mark() {
+        Parrot_gc_mark_STRING_alive(INTERP, PARROT_IMAGEIOTHAW(SELF)->img);
+        Parrot_gc_mark_PMC_alive(INTERP, PARROT_IMAGEIOTHAW(SELF)->todo);
+    }
+
+
+/*
+
+=item C<void set_string_native(STRING *image)>
+
+Thaws the PMC contained in C<image>.
+
+=cut
+
+*/
+
+    VTABLE void set_string_native(STRING *image) {
+        if (!PObj_external_TEST(image))
+            Parrot_str_pin(INTERP, image);
+
+        PARROT_IMAGEIOTHAW(SELF)->img  = image;
+        PARROT_IMAGEIOTHAW(SELF)->curs = (opcode_t *)image->strstart;
+
+        if (PObj_flag_TEST(private1, SELF)) {
+            PARROT_IMAGEIOTHAW(SELF)->pf = PARROT_IMAGEIOTHAW(SELF)->pf_ct->base.pf;
+        }
+        else {
+            const UINTVAL header_length =
+                 GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
+            int unpacked_length;
+
+            PARROT_IMAGEIOTHAW(SELF)->pf   = PackFile_new(INTERP, 0);
+            PObj_custom_destroy_SET(SELF);
+
+            PARROT_IMAGEIOTHAW(SELF)->pf->options |= PFOPT_PMC_FREEZE_ONLY;
+            unpacked_length = PackFile_unpack(INTERP, PARROT_IMAGEIOTHAW(SELF)->pf,
+                                PARROT_IMAGEIOTHAW(SELF)->curs,
+                                Parrot_str_byte_length(interp, image));
+
+            if (unpacked_length)
+                PARROT_IMAGEIOTHAW(SELF)->curs += header_length / sizeof (opcode_t*);
+            else
+                Parrot_ex_throw_from_c_args(INTERP, NULL,
+                        EXCEPTION_INVALID_STRING_REPRESENTATION,
+                        "PackFile header failed during unpack");
+        }
+
+        STATICSELF.shift_pmc();
+        Parrot_visit_loop_visit(INTERP, SELF);
+
+        /* we're done reading the image */
+        PARROT_ASSERT(image->strstart + Parrot_str_byte_length(interp, image) ==
+                    (char *)PARROT_IMAGEIOTHAW(SELF)->curs);
+
+        Parrot_visit_loop_thawfinish(INTERP, SELF);
+
+        if (!PObj_external_TEST(image))
+            Parrot_str_unpin(INTERP, image);
+    }
+
+
+/*
+
+=item C<PMC *get_iter()>
+
+Gets the todo list for iterating over.
+
+=cut
+
+*/
+
+    VTABLE PMC *get_iter() {
+        return PARROT_IMAGEIOTHAW(SELF)->todo;
+    }
+
+/*
+
+=item C<PMC *get_pmc()>
+
+Get the thawed PMC.
+
+=cut
+
+*/
+
+    VTABLE PMC *get_pmc() {
+        return VTABLE_get_pmc_keyed_int(INTERP,
+            (PARROT_IMAGEIOTHAW(SELF))->todo, 0);
+    }
+
+
+/*
+
+=item C<INTVAL get_integer()>
+
+Get the visit action.
+
+=cut
+
+*/
+
+    VTABLE INTVAL get_integer() {
+        return VISIT_THAW_NORMAL;
+    }
+
+
+/*
+
+=item C<void set_pointer(void *value)>
+
+Set an exterior constant table to use for cross-referencing constants.
+
+=cut
+
+*/
+
+    VTABLE void set_pointer(void *value) {
+        PObj_flag_SET(private1, SELF);
+        PARROT_IMAGEIOTHAW(SELF)->pf_ct = (PackFile_ConstTable *)value;
+    }
+
+
+/*
+
+=item C<INTVAL shift_integer()>
+
+Retreive an integer as the next item from the image.
+
+=cut
+
+*/
+
+    VTABLE INTVAL shift_integer() {
+        /* inlining PF_fetch_integer speeds up PBC thawing measurably */
+        const PackFile      *pf        = PARROT_IMAGEIOTHAW(SELF)->pf;
+        const unsigned char *stream    = (const unsigned char *)PARROT_IMAGEIOTHAW(SELF)->curs;
+        const INTVAL         i         = pf->fetch_iv(stream);
+        PARROT_IMAGEIOTHAW(SELF)->curs = (opcode_t *)(stream + pf->header->wordsize);
+        BYTECODE_SHIFT_OK(INTERP, SELF);
+        return i;
+    }
+
+
+/*
+
+=item C<FLOATVAL shift_float()>
+
+Retreive a float as the next item from the image.
+
+=cut
+
+*/
+
+    VTABLE FLOATVAL shift_float() {
+        PackFile       *pf             = PARROT_IMAGEIOTHAW(SELF)->pf;
+        const opcode_t *curs           = PARROT_IMAGEIOTHAW(SELF)->curs;
+        FLOATVAL        f              = PF_fetch_number(pf, &curs);
+        PARROT_IMAGEIOTHAW(SELF)->curs = (opcode_t *)curs;
+        BYTECODE_SHIFT_OK(INTERP, SELF);
+        return f;
+    }
+
+
+/*
+
+=item C<STRING *shift_string()>
+
+Retreive a string as the next item from the image.
+
+=cut
+
+*/
+
+    VTABLE STRING *shift_string() {
+        if (PObj_flag_TEST(private1, SELF)) {
+            const INTVAL i = STATICSELF.shift_integer();
+            BYTECODE_SHIFT_OK(INTERP, SELF);
+
+            if (i >= 0) {
+                PackFile_ConstTable *table = PARROT_IMAGEIOTHAW(SELF)->pf_ct;
+
+                if (!table->constants[i].type)
+                    Parrot_ex_throw_from_c_args(interp, NULL,
+                            EXCEPTION_MALFORMED_PACKFILE,
+                            "Reference to constant not yet unpacked %d", i);
+                return table->constants[i].u.string;
+            }
+
+            /* XXX
+             * only got here because constant table doesn't contain the string
+             * fallback on inline strings
+             */
+        }
+
+        {
+            PackFile *pf                   = PARROT_IMAGEIOTHAW(SELF)->pf;
+            const opcode_t *curs           = PARROT_IMAGEIOTHAW(SELF)->curs;
+            STRING   *s                    = PF_fetch_string(INTERP, pf, &curs);
+            PARROT_IMAGEIOTHAW(SELF)->curs = (opcode_t *)curs;
+            BYTECODE_SHIFT_OK(INTERP, SELF);
+            return s;
+        }
+    }
+
+
+/*
+
+=item C<PMC *shift_pmc()>
+
+Retreive a PMC as the next item from the image.
+
+=cut
+
+*/
+
+    VTABLE PMC *shift_pmc() {
+        const UINTVAL  n            = SELF.shift_integer();
+        const INTVAL   id           = PackID_get_PMCID(n);
+        const int      packid_flags = PackID_get_FLAGS(n);
+        PMC           *pmc          = PMCNULL;
+        PMC           *todo         = PARROT_IMAGEIOTHAW(SELF)->todo;
+
+        switch (packid_flags) {
+            case enum_PackID_seen:
+                if (id) /* got a non-NULL PMC */
+                    pmc = VTABLE_get_pmc_keyed_int(INTERP, todo, id - 1);
+                break;
+            case enum_PackID_normal:
+                {
+                    const INTVAL type = SELF.shift_integer();
+
+                    PARROT_ASSERT(id - 1 == VTABLE_elements(INTERP, todo));
+
+                    if (type <= 0 || type > INTERP->n_vtable_max)
+                        Parrot_ex_throw_from_c_args(INTERP, NULL, 1,
+                                "Unknown PMC type to thaw %d", type);
+
+                    /* workaround to keep ParrotInterpreter PBC hack working */
+                    if (type == enum_class_ParrotInterpreter)
+                        PObj_flag_CLEAR(private1, SELF);
+
+                    pmc = Parrot_pmc_new_noinit(INTERP, type);
+
+                    VTABLE_set_pmc_keyed_int(INTERP, todo, id - 1, pmc);
+                }
+                break;
+            default:
+                Parrot_ex_throw_from_c_args(INTERP, NULL, 1,
+                        "Unknown PMC id args thaw %d", packid_flags);
+                break;
+        }
+
+        return pmc;
+    }
+
+}
+
+/*
+
+=back
+
+=cut
+
+*/
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */
+

Modified: branches/html_cleanup/src/pmc/integer.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/integer.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/integer.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -257,7 +257,7 @@
 
 =item C<void set_integer_native(INTVAL value)>
 
-Sets the value of the integer to the value of the C<Integer> C<*value>.
+Sets the value of the integer to the value of the native integer C<*value>.
 
 =cut
 
@@ -286,20 +286,23 @@
 */
 
     VTABLE void set_number_native(FLOATVAL value) {
-        Parrot_pmc_reuse(INTERP, SELF, enum_class_Float, 0);
+        Parrot_pmc_reuse(INTERP, SELF,
+            Parrot_get_ctx_HLL_type(INTERP, enum_class_Float), 0);
         SELF.set_number_native(value);
     }
 
 
     VTABLE void set_bool(INTVAL value) {
-        Parrot_pmc_reuse(INTERP, SELF, enum_class_Boolean, 0);
+        Parrot_pmc_reuse(INTERP, SELF,
+            Parrot_get_ctx_HLL_type(INTERP, enum_class_Boolean), 0);
         SELF.set_bool(value);
     }
 
 
 
     VTABLE void set_string_native(STRING *value) {
-        Parrot_pmc_reuse(INTERP, SELF, enum_class_String, 0);
+        Parrot_pmc_reuse(INTERP, SELF,
+            Parrot_get_ctx_HLL_type(INTERP, enum_class_String), 0);
         SELF.set_string_native(value);
     }
 
@@ -987,6 +990,46 @@
 
 /*
 
+=item C<PMC *neg(PMC *dest)>
+
+=item C<void i_neg()>
+
+Set C<dest> to the negated value of C<SELF>. If the value of C<SELF>
+is the minimum integer, a BigInt is created.
+
+=cut
+
+*/
+
+    VTABLE PMC *neg(PMC *dest) {
+        const INTVAL a = SELF.get_integer();
+
+        if (a != PARROT_INTVAL_MIN)
+            return Parrot_pmc_new_init_int(INTERP, VTABLE_type(INTERP, SELF),
+                                                   -a);
+        else {
+            PMC *promoted;
+            maybe_throw_overflow_error(INTERP);
+            promoted = Parrot_pmc_new_init_int(INTERP, enum_class_BigInt, 0);
+            return VTABLE_subtract_int(INTERP, promoted, a, promoted);
+        }
+    }
+
+    VTABLE void i_neg() {
+        const INTVAL a = SELF.get_integer();
+
+        if (a != PARROT_INTVAL_MIN)
+            VTABLE_set_integer_native(INTERP, SELF, -a);
+        else {
+            maybe_throw_overflow_error(INTERP);
+            SELF = upgrade_self_to_bignum(INTERP, SELF);
+            VTABLE_set_integer_native(INTERP, SELF, 0);
+            VTABLE_i_subtract_int(INTERP, SELF, a);
+        }
+    }
+
+/*
+
 =item C<INTVAL is_equal(PMC *value)>
 
 The C<==> operation.
@@ -1158,23 +1201,38 @@
 
 =item C<void absolute()>
 
-Sets C<dest> to the absolute value of SELF.
+Sets C<dest> to the absolute value of C<SELF>. If the value of C<SELF>
+is the minimum integer, a BigInt is created.
 
 =cut
 
 */
 
     VTABLE PMC *absolute(PMC *dest) {
-        const INTVAL a = abs(SELF.get_integer());
+        const INTVAL a = SELF.get_integer();
 
-        /* TT # 1245 overflow for -maxint */
-        return Parrot_pmc_new_init_int(INTERP, VTABLE_type(INTERP, SELF), a);
+        if (a != PARROT_INTVAL_MIN)
+            return Parrot_pmc_new_init_int(INTERP, VTABLE_type(INTERP, SELF),
+                                                   abs(a));
+        else {
+            PMC *promoted;
+            maybe_throw_overflow_error(INTERP);
+            promoted = Parrot_pmc_new_init_int(INTERP, enum_class_BigInt, a);
+            return VTABLE_neg(INTERP, promoted, dest);
+        }
     }
 
 
     VTABLE void i_absolute() {
-        const INTVAL a = abs(SELF.get_integer());
-        VTABLE_set_integer_native(INTERP, SELF, a);
+        const INTVAL a = SELF.get_integer();
+
+        if (a != PARROT_INTVAL_MIN)
+            VTABLE_set_integer_native(INTERP, SELF, abs(a));
+        else {
+            maybe_throw_overflow_error(INTERP);
+            SELF = upgrade_self_to_bignum(INTERP, SELF);
+            VTABLE_i_neg(INTERP, SELF);
+        }
     }
 
 

Modified: branches/html_cleanup/src/pmc/lexpad.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/lexpad.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/lexpad.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2007-2009, Parrot Foundation.
+Copyright (C) 2007-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -97,10 +97,14 @@
     }
 
     VTABLE INTVAL exists_keyed_str(STRING *name) {
-        PMC *info;
+        PMC  *info;
+        Hash *hash;
         GET_ATTR_lexinfo(INTERP, SELF, info);
-        return parrot_hash_get_bucket(INTERP,
-                (Hash *)VTABLE_get_pointer(INTERP, info), name) != 0;
+        hash = (Hash *)VTABLE_get_pointer(INTERP, info);
+
+        return hash->entries
+            ? (parrot_hash_get_bucket(INTERP, hash, name) != 0)
+            : 0;
     }
 
     VTABLE INTVAL exists_keyed(PMC *name) {
@@ -109,23 +113,24 @@
     }
 
     VTABLE PMC *get_pmc_keyed_str(STRING *name) {
-        PMC              * info;
-        Hash             * hash;
-        PMC              * ctx;
-        HashBucket       * b;
-        INTVAL            regno;
+        PMC        *info;
+        Hash       *hash;
+        PMC        *ctx;
+        HashBucket *b;
 
         GET_ATTR_lexinfo(INTERP, SELF, info);
-        GET_ATTR_ctx(INTERP, SELF, ctx);
         hash = (Hash *)VTABLE_get_pointer(INTERP, info);
-        b    = parrot_hash_get_bucket(INTERP, hash, name);
 
-        if (!b)
-            return NULL;
+        if (!hash->entries)
+            return PMCNULL;
 
-        regno = (INTVAL) b->value;
+        b = parrot_hash_get_bucket(INTERP, hash, name);
+
+        if (!b)
+            return PMCNULL;
 
-        return CTX_REG_PMC(ctx, regno);
+        GET_ATTR_ctx(INTERP, SELF, ctx);
+        return CTX_REG_PMC(ctx, (INTVAL)b->value);
     }
 
     VTABLE PMC *get_pmc_keyed(PMC *name) {
@@ -138,10 +143,8 @@
         Hash             * hash;
         PMC              * ctx;
         HashBucket       * b;
-        INTVAL             regno;
 
         GET_ATTR_lexinfo(INTERP, SELF, info);
-        GET_ATTR_ctx(INTERP, SELF, ctx);
         hash = (Hash *)VTABLE_get_pointer(INTERP, info);
         b    = parrot_hash_get_bucket(INTERP, hash, name);
 
@@ -149,8 +152,8 @@
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LEX_NOT_FOUND,
                 "Lexical '%Ss' not found", name);
 
-        regno                   = (INTVAL) b->value;
-        CTX_REG_PMC(ctx, regno) = value;
+        GET_ATTR_ctx(INTERP, SELF, ctx);
+        CTX_REG_PMC(ctx, (INTVAL)b->value) = value;
     }
 
     VTABLE void set_pmc_keyed(PMC *name, PMC *value) {

Modified: branches/html_cleanup/src/pmc/namespace.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/namespace.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/namespace.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -32,7 +32,7 @@
         __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
-static void add_nci_to_namespace(PARROT_INTERP,
+static void add_native_to_namespace(PARROT_INTERP,
     ARGIN(PMC *SELF),
     ARGIN(STRING *key),
     ARGIN_NULLOK(PMC *value))
@@ -76,7 +76,7 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(SELF) \
     , PARROT_ASSERT_ARG(key))
-#define ASSERT_ARGS_add_nci_to_namespace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_add_native_to_namespace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(SELF) \
     , PARROT_ASSERT_ARG(key))
@@ -235,15 +235,14 @@
 */
 
 static void
-add_nci_to_namespace(PARROT_INTERP, ARGIN(PMC *SELF), ARGIN(STRING *key),
+add_native_to_namespace(PARROT_INTERP, ARGIN(PMC *SELF), ARGIN(STRING *key),
         ARGIN_NULLOK(PMC *value))
 {
-    ASSERT_ARGS(add_nci_to_namespace)
-
-    STRING * const nci_str = CONST_STRING(interp, "NCI");
+    ASSERT_ARGS(add_native_to_namespace)
 
     if (!PMC_IS_NULL(value)
-    &&   VTABLE_isa(interp, value, nci_str)) {
+    && (value->vtable->base_type == enum_class_NativePCCMethod ||
+        value->vtable->base_type == enum_class_NCI)) {
         Parrot_NameSpace_attributes * const nsinfo = PARROT_NAMESPACE(SELF);
         PMC * const classobj = VTABLE_get_class(interp, SELF);
 
@@ -433,8 +432,8 @@
         if (maybe_add_sub_to_namespace(INTERP, SELF, key, value))
             return;
 
-        /* If it's an NCI method */
-        add_nci_to_namespace(INTERP, SELF, key, value);
+        /* If it's an native method */
+        add_native_to_namespace(INTERP, SELF, key, value);
 
         /* If it's a multi-sub and the first in this NS... */
         add_multi_to_namespace(INTERP, SELF, key, value);

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

Modified: branches/html_cleanup/src/pmc/nci.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/nci.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/nci.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -221,20 +221,6 @@
 
 /*
 
-=item C<METHOD set_raw_nci_ptr(void *func)>
-
-Sets the specified function pointer and raw flag.
-
-=cut
-
-*/
-
-    METHOD make_raw_nci(PMC *func) {
-        VTABLE_set_pointer(interp, SELF, (void *)func);
-    }
-
-/*
-
 =item C<void init()>
 
 Initializes the NCI with a C<NULL> function pointer.
@@ -244,11 +230,13 @@
 */
 
     VTABLE void init() {
-        /* Mark that we're not a raw NCI. */
-        PObj_flag_CLEAR(private2, SELF);
         PObj_custom_mark_SET(SELF);
     }
 
+    VTABLE void *get_pointer() {
+        return PARROT_NCI(SELF)->orig_func;
+    }
+
 /*
 
 =item C<void set_pointer_keyed_str(STRING *key, void *func)>
@@ -259,15 +247,6 @@
 
 */
 
-    VTABLE void set_pointer(void *ptr) {
-        SET_ATTR_orig_func(INTERP, SELF, ptr);
-        PObj_flag_SET(private2, SELF);
-    }
-
-    VTABLE void *get_pointer() {
-        return PARROT_NCI(SELF)->orig_func;
-    }
-
     VTABLE void set_pointer_keyed_str(STRING *key, void *func) {
         Parrot_NCI_attributes * const nci_info   = PARROT_NCI(SELF);
 
@@ -278,8 +257,8 @@
         if (!PObj_constant_TEST(key)) {
             char * const key_c      = Parrot_str_to_cstring(INTERP, key);
             const size_t key_length = Parrot_str_byte_length(interp, key);
-            key                     = string_make(interp, key_c, key_length,
-                                        NULL, PObj_constant_FLAG);
+            key                     = Parrot_str_new_init(interp, key_c, key_length,
+                                        Parrot_default_encoding_ptr, PObj_constant_FLAG);
             Parrot_str_free_cstring(key_c);
         }
 
@@ -300,11 +279,12 @@
             Parrot_NCI_attributes * const nci_info = PARROT_NCI(SELF);
 
             Parrot_gc_mark_PMC_alive(interp, nci_info->fb_info);
+            Parrot_gc_mark_PMC_alive(interp, nci_info->multi_sig);
+
             Parrot_gc_mark_STRING_alive(interp, nci_info->signature);
-            Parrot_gc_mark_STRING_alive(interp, nci_info->pcc_params_signature);
-            Parrot_gc_mark_STRING_alive(interp, nci_info->pcc_params_signature);
             Parrot_gc_mark_STRING_alive(interp, nci_info->long_signature);
-            Parrot_gc_mark_PMC_alive(interp, nci_info->multi_sig);
+            Parrot_gc_mark_STRING_alive(interp, nci_info->pcc_params_signature);
+            Parrot_gc_mark_STRING_alive(interp, nci_info->pcc_return_signature);
         }
     }
 
@@ -337,7 +317,7 @@
         nci_info_ret->pcc_params_signature  = nci_info_self->pcc_params_signature;
         nci_info_ret->pcc_return_signature  = nci_info_self->pcc_params_signature;
         nci_info_ret->arity                 = nci_info_self->arity;
-        PObj_get_FLAGS(ret)                |= (PObj_get_FLAGS(SELF) & 0x7);
+        PObj_get_FLAGS(ret)                 = PObj_get_FLAGS(SELF);
 
         return ret;
     }
@@ -377,9 +357,7 @@
         PMC                          *cont;
 
         GET_ATTR_orig_func(INTERP, SELF, orig_func);
-        func = PObj_flag_TEST(private2, SELF)
-            ? (nci_thunk_t) D2FPTR(orig_func)
-            : (nci_thunk_t) D2FPTR(nci_info->func);
+        func = (nci_thunk_t)D2FPTR(nci_info->func);
 
         GET_ATTR_fb_info(INTERP, SELF, fb_info);
 

Modified: branches/html_cleanup/src/pmc/object.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/object.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/object.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -355,7 +355,7 @@
 
         /* If there's a vtable override for 'get_attr_str' run that first. */
         PMC * const method = Parrot_oo_find_vtable_override(INTERP,
-                VTABLE_get_class(INTERP, SELF), get_attr);
+                obj->_class, get_attr);
 
         if (!PMC_IS_NULL(method)) {
             PMC *result = PMCNULL;
@@ -420,7 +420,7 @@
 
         /* If there's a vtable override for 'set_attr_str' run that first. */
         PMC * const method = Parrot_oo_find_vtable_override(INTERP,
-                VTABLE_get_class(INTERP, SELF), vtable_meth_name);
+                obj->_class, vtable_meth_name);
 
         if (!PMC_IS_NULL(method)) {
             Parrot_ext_call(INTERP, method, "PiSP->", SELF, name, value);
@@ -594,20 +594,7 @@
 
 */
     VTABLE PMC *get_class() {
-        PMC    * const classobj  = PARROT_OBJECT(SELF)->_class;
-        STRING * const get_class = CONST_STRING(INTERP, "get_class");
-
-        /* If there's a vtable override for 'get_class' run that instead. */
-        PMC    * const method    = Parrot_oo_find_vtable_override(INTERP,
-                classobj, get_class);
-
-        if (!PMC_IS_NULL(method)) {
-            PMC *result;
-            Parrot_ext_call(INTERP, method, "Pi->P", SELF, &result);
-            return result;
-        }
-
-        return classobj;
+        return PARROT_OBJECT(SELF)->_class;
     }
 
 
@@ -690,10 +677,11 @@
 */
 
     VTABLE INTVAL isa(STRING *classname) {
-        if (SUPER(classname))
+        if (SELF->vtable->whoami == classname
+        ||  Parrot_str_equal(INTERP, SELF->vtable->whoami, classname))
             return 1;
         else {
-            PMC * _class = VTABLE_get_class(INTERP, SELF);
+            PMC *_class = PARROT_OBJECT(SELF)->_class;
             return VTABLE_isa(INTERP, _class, classname);
         }
     }

Modified: branches/html_cleanup/src/pmc/oplib.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/oplib.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/oplib.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -64,9 +64,9 @@
         INTVAL        num;
 
         GET_ATTR_oplib(INTERP, SELF, oplib);
-        num  = oplib->op_code(INTERP, cstr, 1);
+        num  = oplib->_op_code(INTERP, cstr, 1);
         if (num == -1)
-            num = oplib->op_code(INTERP, cstr, 0);
+            num = oplib->_op_code(INTERP, cstr, 0);
 
         Parrot_str_free_cstring(cstr);
         return num;
@@ -116,10 +116,6 @@
         return STATICSELF.elements();
     }
 
-    VTABLE INTVAL get_integer() {
-        return STATICSELF.elements();
-    }
-
     METHOD op_family(STRING *shortname)
     {
         char * const sname = Parrot_str_to_cstring(INTERP, shortname);

Modified: branches/html_cleanup/src/pmc/packfile.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/packfile.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/packfile.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -21,6 +21,19 @@
 
 #include "pmc/pmc_packfiledirectory.h"
 
+typedef enum {
+    attr_wordsize,
+    attr_byteorder,
+    attr_fptype,
+    attr_version_major,
+    attr_version_minor,
+    attr_version_patch,
+    attr_bytecode_major,
+    attr_bytecode_minor,
+    attr_uuid_type,
+    attr_NONE = -1
+} AttrEnumPackfile;
+
 /* HEADERIZER HFILE: none */
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
@@ -33,10 +46,18 @@
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*self);
 
+static AttrEnumPackfile getAttrEnum(PARROT_INTERP,
+    ARGIN(const STRING *name))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
 #define ASSERT_ARGS_copy_packfile_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(self) \
     , PARROT_ASSERT_ARG(pf))
+#define ASSERT_ARGS_getAttrEnum __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(name))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -100,7 +121,7 @@
                 PMC_data_typed(SELF, Parrot_Packfile_attributes*);
         PackFile                   *pf;
 
-        attrs->uuid     = Parrot_str_new_noinit(INTERP, enum_stringrep_one, 0);
+        attrs->uuid     = CONST_STRING(INTERP, "");
         attrs->directory = Parrot_pmc_new(INTERP, enum_class_PackfileDirectory);
 
         /* Create dummy PackFile and copy default attributes to self */
@@ -160,7 +181,7 @@
         PackFile_pack(INTERP, pf, ptr);
 
         str = Parrot_str_new_init(INTERP, (const char*)ptr, length,
-                PARROT_FIXED_8_ENCODING, PARROT_BINARY_CHARSET, 0);
+                Parrot_binary_encoding_ptr, 0);
         Parrot_gc_free_memory_chunk(INTERP, ptr);
 
         PackFile_destroy(INTERP, pf);
@@ -243,28 +264,40 @@
     VTABLE INTVAL get_integer_keyed_str(STRING *key) {
         Parrot_Packfile_attributes * const attrs = PARROT_PACKFILE(SELF);
 
-        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "wordsize")))
-            return attrs->wordsize;
-        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "byteorder")))
-            return attrs->byteorder;
-        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "fptype")))
-            return attrs->fptype;
-        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "version_major")))
-            return attrs->version_major;
-        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "version_minor")))
-            return attrs->version_minor;
-        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "version_patch")))
-            return attrs->version_patch;
-        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "bytecode_major")))
-            return attrs->bytecode_major;
-        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "bytecode_minor")))
-            return attrs->bytecode_minor;
-        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "uuid_type")))
-            return attrs->uuid_type;
-
-        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_KEY_NOT_FOUND,
-                       "Packfile: No such integer key \"%s\"",
-                       Parrot_str_cstring(INTERP, key));
+        INTVAL result;
+        switch (getAttrEnum(INTERP, key)) {
+          case attr_wordsize:
+            result = attrs->wordsize;
+            break;
+          case attr_byteorder:
+            result = attrs->byteorder;
+            break;
+          case attr_fptype:
+            result = attrs->fptype;
+            break;
+          case attr_version_major:
+            result = attrs->version_major;
+            break;
+          case attr_version_minor:
+            result = attrs->version_minor;
+            break;
+          case attr_version_patch:
+            result = attrs->version_patch;
+            break;
+          case attr_bytecode_major:
+            result = attrs->bytecode_major;
+            break;
+          case attr_bytecode_minor:
+            result = attrs->bytecode_minor;
+            break;
+          case attr_uuid_type:
+            result = attrs->uuid_type;
+            break;
+          default:
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_KEY_NOT_FOUND,
+                    "Packfile: No such integer key \"%Ss\"", key);
+        }
+        return result;
     }
 
 /*
@@ -287,8 +320,7 @@
             return PARROT_PACKFILE(SELF)->uuid;
 
         Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_KEY_NOT_FOUND,
-                       "Packfile: No such string key \"%s\"",
-                       Parrot_str_cstring(INTERP, key));
+                    "Packfile: No such string key \"%Ss\"", key);
     }
 
 
@@ -346,25 +378,23 @@
 */
     VTABLE void set_integer_keyed_str(STRING *key, INTVAL value) {
         Parrot_Packfile_attributes * const attrs = PARROT_PACKFILE(SELF);
-        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "version_major"))) {
+        switch (getAttrEnum(INTERP, key)) {
+          case attr_version_major:
             attrs->version_major = value;
-            return;
-        }
-        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "version_minor"))) {
+            break;
+          case attr_version_minor:
             attrs->version_minor = value;
-            return;
-        }
-        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "version_patch"))) {
+            break;
+          case attr_version_patch:
             attrs->version_patch = value;
-            return;
-        }
-        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "uuid_type"))) {
+            break;
+          case attr_uuid_type:
             attrs->uuid_type = value;
-            return;
+            break;
+          default:
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_KEY_NOT_FOUND,
+                    "Packfile: No such integer key \"%Ss\"", key);
         }
-        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_KEY_NOT_FOUND,
-                       "Packfile: No such integer key \"%s\"",
-                       Parrot_str_cstring(INTERP, key));
     }
 
 
@@ -407,8 +437,7 @@
         }
 
         Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_KEY_NOT_FOUND,
-                       "Packfile: No such string key \"%s\"",
-                       Parrot_str_cstring(INTERP, key));
+                       "Packfile: No such string key \"%Ss\"", key);
     }
 
 /*
@@ -471,7 +500,61 @@
         PMC * const dir = PARROT_PACKFILE(SELF)->directory;
         RETURN(PMC *dir);
     }
+
 }
+
+
+/*
+
+=back
+
+=cut
+
+*/
+
+/*
+
+=head2 Auxliary functions
+
+=over 4
+
+=item C<static AttrEnumPackfile getAttrEnum(PARROT_INTERP, const STRING *name)>
+
+Gets an enumerated value corresponding to the attribute with that name.
+
+=cut
+
+*/
+
+static AttrEnumPackfile
+getAttrEnum(PARROT_INTERP, ARGIN(const STRING *name))
+{
+    ASSERT_ARGS(getAttrEnum)
+
+    AttrEnumPackfile r;
+    if (Parrot_str_equal(interp, name, CONST_STRING(interp, "wordsize")))
+        r = attr_wordsize;
+    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "byteorder")))
+        r = attr_byteorder;
+    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "fptype")))
+        r = attr_fptype;
+    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "version_major")))
+        r = attr_version_major;
+    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "version_minor")))
+        r = attr_version_minor;
+    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "version_patch")))
+        r = attr_version_patch;
+    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "bytecode_major")))
+        r = attr_bytecode_major;
+    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "bytecode_minor")))
+        r = attr_bytecode_minor;
+    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "uuid_type")))
+        r = attr_uuid_type;
+    else
+        r = attr_NONE;
+    return r;
+}
+
 /*
 
 =back

Modified: branches/html_cleanup/src/pmc/packfileannotations.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/packfileannotations.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/packfileannotations.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -80,6 +80,8 @@
                 PARROT_PACKFILEANNOTATIONS(SELF);
 
         Parrot_gc_mark_PMC_alive(INTERP, attrs->const_table);
+        Parrot_gc_mark_PMC_alive(INTERP, attrs->gr_byte);
+        Parrot_gc_mark_PMC_alive(INTERP, attrs->gr_entries);
         Parrot_gc_mark_PMC_alive(INTERP, attrs->annotations);
 
         SUPER();

Modified: branches/html_cleanup/src/pmc/packfilefixupentry.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/packfilefixupentry.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/packfilefixupentry.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -42,7 +42,7 @@
         Parrot_PackfileFixupEntry_attributes * attrs =
                 PMC_data_typed(SELF, Parrot_PackfileFixupEntry_attributes*);
 
-        attrs->name = Parrot_str_new_noinit(INTERP, enum_stringrep_one, 0);
+        attrs->name = CONST_STRING(INTERP, "");
 
         PObj_custom_mark_SET(SELF);
     }
@@ -98,8 +98,7 @@
 
         attrs->type     = entry->type;
         attrs->name     = Parrot_str_new_init(INTERP, entry->name,
-                strlen(entry->name), PARROT_FIXED_8_ENCODING,
-                PARROT_BINARY_CHARSET, 0);
+                strlen(entry->name), Parrot_binary_encoding_ptr, 0);
         attrs->offset   = entry->offset;
     }
 

Modified: branches/html_cleanup/src/pmc/resizablestringarray.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/resizablestringarray.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/resizablestringarray.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -302,25 +302,6 @@
 
 /*
 
-=item C<PMC *shift_pmc()>
-
-Removes and returns the first element in the array.
-
-=cut
-
-*/
-
-    VTABLE PMC *shift_pmc() {
-        STRING * const strval = SELF.shift_string();
-        PMC    * const value  = Parrot_pmc_new(INTERP, enum_class_String);
-
-        VTABLE_set_string_native(INTERP, value, strval);
-
-        return value;
-    }
-
-/*
-
 =item C<INTVAL shift_integer()>
 
 Removes and returns the first element in the array.

Modified: branches/html_cleanup/src/pmc/scalar.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/scalar.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/scalar.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -807,98 +807,6 @@
 
 /*
 
-=back
-
-=head2 Logical Methods
-
-=over 4
-
-=item C<PMC *logical_or(PMC *value, PMC *dest)>
-
-Returns the result of the logical C<OR> of C<SELF> and C<value>, i.e. returns
-C<SELF> it is true or C<value>: C<dest> is alway ignored.
-
-=cut
-
-*/
-
-    VTABLE PMC *logical_or(PMC *value, PMC *dest) {
-        if (SELF.get_bool())
-            return SELF;
-
-        return value;
-    }
-
-/*
-
-=item C< PMC *logical_and(PMC *value, PMC *dest)>
-
-Returns the result of the logical C<AND> of C<SELF> and C<value>, i.e.
-returns C<value> if C<SELF> is true else C<SELF>. C<dest> is always ignored.
-
-=cut
-
-*/
-
-    VTABLE PMC *logical_and(PMC *value, PMC *dest) {
-        if (SELF.get_bool())
-            return value;
-
-        return SELF;
-    }
-
-/*
-
-=item C<PMC *logical_xor(PMC *value, PMC *dest)>
-
-Returns the result of the logical C<XOR> of C<SELF> and C<*value>.
-
-=cut
-
-*/
-
-    VTABLE PMC *logical_xor(PMC *value, PMC *dest) {
-        const INTVAL my_bool    = SELF.get_bool();
-        const INTVAL value_bool = VTABLE_get_bool(INTERP, value);
-
-        if (my_bool && ! value_bool)
-            return SELF;
-        else if (value_bool && ! my_bool)
-            return value;
-
-        dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-        VTABLE_set_bool(INTERP, dest, 0);
-        return dest;
-    }
-
-/*
-
-=item C<PMC *logical_not(PMC *dest)>
-
-=item C<void i_logical_not()>
-
-Returns in C<*dest> the result of the logical negation of the scalar and
-C<*value>.
-
-=cut
-
-*/
-
-    VTABLE PMC *logical_not(PMC *dest) {
-        const INTVAL a = ! SELF.get_bool();
-
-        dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-
-        VTABLE_set_bool(INTERP, dest, a);
-        return dest;
-    }
-
-    VTABLE void i_logical_not() {
-        VTABLE_set_bool(INTERP, SELF, ! SELF.get_bool());
-    }
-
-/*
-
 =item C<INTVAL defined()>
 
 Always returns true.

Modified: branches/html_cleanup/src/pmc/string.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/string.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/string.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -193,7 +193,7 @@
         if (PObj_constant_TEST(SELF) && !PObj_constant_TEST(value)) {
             char * const copy = Parrot_str_to_cstring(INTERP, value);
             value             = Parrot_str_new_init(INTERP, copy, strlen(copy),
-                PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET,
+                Parrot_default_encoding_ptr,
                 PObj_constant_FLAG);
             Parrot_str_free_cstring(copy);
         }
@@ -692,7 +692,7 @@
         if (!len)
             RETURN(STRING src);
 
-        if (src->charset != Parrot_ascii_charset_ptr)
+        if (src->encoding != Parrot_ascii_encoding_ptr)
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_ENCODING,
                 "Can't translate non-ascii");
 
@@ -724,18 +724,18 @@
 
     METHOD is_integer(STRING *src) {
         INTVAL         i;
-        unsigned char *p;
+        char          *p;
         const INTVAL   len = Parrot_str_length(INTERP, src);
 
         if (!len)
             RETURN(INTVAL 0);
 
-        if (src->charset != Parrot_ascii_charset_ptr)
+        if (STRING_max_bytes_per_codepoint(src) != 1)
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_ENCODING,
-                "Can't is_integer non-ascii");
+                "Can't is_integer non fixed_8");
 
         i = 0;
-        p = (unsigned char *)Buffer_bufstart(src);
+        p = src->strstart;
 
         if (p[i] == '-' || p[i] == '+' ||
             (p[i] >= '0' && p[i] <= '9')) {
@@ -794,7 +794,7 @@
         if (!Parrot_str_length(INTERP, substring))
             RETURN(INTVAL res);
 
-        res = CHARSET_RINDEX(INTERP, src, substring, (UINTVAL)start);
+        res = STRING_rindex(INTERP, src, substring, (UINTVAL)start);
         RETURN(INTVAL res);
     }
 
@@ -808,15 +808,13 @@
 
 */
 
-    METHOD unescape(STRING *charsetname, STRING *encodingname)
+    METHOD unescape(STRING *encodingname)
     {
-        const CHARSET *charset = Parrot_get_charset(INTERP,
-            Parrot_charset_number(INTERP, charsetname));
-        const ENCODING *encoding = Parrot_get_encoding(INTERP,
+        const STR_VTABLE *encoding = Parrot_get_encoding(INTERP,
             Parrot_encoding_number(INTERP, encodingname));
         STRING * const src = VTABLE_get_string(INTERP, SELF);
         STRING * const dest = Parrot_str_unescape_string(INTERP, src,
-                charset, encoding, 0);
+                encoding, 0);
         RETURN(STRING *dest);
     }
 

Modified: branches/html_cleanup/src/pmc/stringbuilder.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/stringbuilder.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/stringbuilder.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -24,10 +24,7 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static size_t calculate_capacity(SHIM_INTERP,
-    size_t current,
-    size_t additional);
-
+static size_t calculate_capacity(SHIM_INTERP, size_t needed);
 #define ASSERT_ARGS_calculate_capacity __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
@@ -37,6 +34,7 @@
 pmclass StringBuilder provides string auto_attrs {
     ATTR STRING *buffer;    /* Mutable string to gather results */
 
+
 /*
 
 =item C<void init()>
@@ -51,6 +49,7 @@
         STATICSELF.init_int(INITIAL_STRING_CAPACITY);
     }
 
+
 /*
 
 =item C<void init_int()>
@@ -62,37 +61,64 @@
 */
 
     VTABLE void init_int(INTVAL initial_size) {
-        STRING * const buffer = mem_gc_allocate_zeroed_typed(INTERP, STRING);
-        buffer->encoding  = Parrot_default_encoding_ptr;
-        buffer->charset   = Parrot_default_charset_ptr;
-        /* We need all string flags here because we use this buffer in substr_str */
-        buffer->flags     = PObj_is_string_FLAG | PObj_external_FLAG;
-        buffer->_bufstart = buffer->strstart = mem_gc_allocate_n_typed(INTERP,
-                initial_size, char);
-        buffer->_buflen   = initial_size;
+        STRING * const buffer = Parrot_gc_new_string_header(INTERP, 0);
+
+        if (initial_size < INITIAL_STRING_CAPACITY)
+            initial_size = INITIAL_STRING_CAPACITY;
+
+        Parrot_gc_allocate_string_storage(INTERP, buffer, initial_size);
+        buffer->encoding = Parrot_default_encoding_ptr;
 
         SET_ATTR_buffer(INTERP, SELF, buffer);
 
-        PObj_custom_destroy_SET(SELF);
+        PObj_custom_mark_SET(SELF);
     }
 
+
 /*
 
-=item C<void destroy()>
+=item C<void init_pmc()>
 
-Free the buffer on destruction.
+Initializes the StringBuilder with an array of STRINGs.
 
 =cut
 
 */
 
-    VTABLE void destroy() {
+    VTABLE void init_pmc(PMC *ar) {
+        const INTVAL count = VTABLE_elements(INTERP, ar);
+
+        if (!count)
+            STATICSELF.init_int(INITIAL_STRING_CAPACITY);
+        else {
+            STRING * const first = VTABLE_get_string_keyed_int(INTERP, ar, 0);
+            const INTVAL   size  = Parrot_str_byte_length(INTERP, first);
+            INTVAL         i;
+
+            /* it's just an estimate, but estimates help */
+            STATICSELF.init_int(size * count);
+            SELF.push_string(first);
+
+            for (i = 1; i < count; ++i)
+                SELF.push_string(VTABLE_get_string_keyed_int(INTERP, ar, i));
+        }
+    }
+
+/*
+
+=item C<void mark()>
+
+Mark the buffer.
+
+=cut
+
+*/
+
+    VTABLE void mark() {
         if (PMC_data(SELF)) {
             STRING *buffer;
             GET_ATTR_buffer(INTERP, SELF, buffer);
-            if (buffer->_bufstart)
-                mem_gc_free(INTERP, buffer->_bufstart);
-            mem_gc_free(INTERP, buffer);
+            Parrot_gc_mark_STRING_alive(INTERP, buffer);
         }
     }
 
@@ -109,8 +135,8 @@
     VTABLE STRING *get_string() {
         STRING *buffer;
         GET_ATTR_buffer(INTERP, SELF, buffer);
-        /* We need to clone buffer because outside of StringBuilder strings */
-        /* are immutable */
+        /* We need to build a new string because outside of StringBuilder
+         * strings are immutable. */
         return Parrot_str_clone(INTERP, buffer);
     }
 
@@ -125,10 +151,9 @@
 */
 
     VTABLE void push_string(STRING *s) {
-        STRING          *buffer;
-        size_t           total_size;
-        const CHARSET   *cs;
-        const ENCODING  *enc = NULL;
+        STRING           *buffer;
+        size_t            total_size;
+        const STR_VTABLE *enc;
 
         /* Early return on NULL strings */
         if (STRING_IS_NULL(s))
@@ -136,43 +161,63 @@
 
         GET_ATTR_buffer(INTERP, SELF, buffer);
 
-        /* If strings are incompatible - convert them */
-        /* TODO Ask chromatic why in Parrot_str_join he ignored charset */
-        cs = Parrot_str_rep_compatible(interp, buffer, s, &enc);
-        if (!cs) {
-
-            /* Create new temporary string */
-            STRING * const new_buffer = Parrot_unicode_charset_ptr->to_charset(interp, buffer);
-            mem_gc_free(INTERP, buffer->_bufstart);
-            STRUCT_COPY(buffer, new_buffer);
-            buffer->flags     = PObj_is_string_FLAG | PObj_external_FLAG;
-
-            buffer->_bufstart = buffer->strstart = mem_gc_allocate_n_typed(INTERP,
-                                                    new_buffer->_buflen, char);
-            mem_sys_memcopy(buffer->_bufstart, new_buffer->_bufstart, new_buffer->_buflen);
+        if (buffer->bufused == 0) {
+            /* Always copy the encoding of the first string. The IO functions
+               assume that the concatenation of utf8 strings doesn't change
+               the encoding. */
+            buffer->encoding = s->encoding;
+        }
+        else {
+            enc = Parrot_str_rep_compatible(interp, buffer, s);
+
+            if (enc) {
+                buffer->encoding = enc;
+            }
+            else {
+                /* If strings are incompatible - convert them to utf8 */
+
+                if (s->encoding != Parrot_utf8_encoding_ptr)
+                    s = Parrot_utf8_encoding_ptr->to_encoding(interp, s);
 
-            SET_ATTR_buffer(INTERP, SELF, buffer);
+                if (buffer->encoding != Parrot_utf8_encoding_ptr) {
+                    /* Create new temporary string */
+                    STRING * new_buffer;
+
+                    new_buffer = Parrot_utf8_encoding_ptr->to_encoding(interp, buffer);
+                    total_size = new_buffer->bufused + s->bufused;
+
+                    if (total_size > buffer->_buflen) {
+                        /* Reallocate */
+                        total_size = calculate_capacity(INTERP, total_size);
+                        Parrot_gc_reallocate_string_storage(INTERP, buffer, total_size);
+                    }
+                    buffer->bufused  = new_buffer->bufused;
+                    buffer->encoding = new_buffer->encoding;
 
-            s      = Parrot_unicode_charset_ptr->to_charset(interp, s);
+                    mem_sys_memcopy(buffer->strstart, new_buffer->strstart,
+                            new_buffer->bufused);
+                }
+            }
         }
 
-        /* Calculate (possibly new) total size */
-        total_size = calculate_capacity(INTERP, buffer->bufused, s->bufused);
+        total_size = buffer->bufused + s->bufused;
 
         /* Reallocate if necessary */
-        if (total_size > Buffer_buflen(buffer)) {
-            /* Parrot_unicode_charset_ptr can produce NULL buffer */
-            buffer->_bufstart = buffer->strstart = mem_gc_realloc_n_typed(INTERP,
-                buffer->_bufstart, total_size, char);
-            buffer->_buflen   = total_size;
+        if (total_size > buffer->_buflen) {
+            /* Calculate (possibly new) total size */
+            total_size = calculate_capacity(INTERP, total_size);
+
+            Parrot_gc_reallocate_string_storage(INTERP, buffer, total_size);
+            buffer->_buflen = total_size;
         }
 
         /* Tack s on the end of buffer */
-        mem_sys_memcopy((void *)((ptrcast_t)buffer->strstart + buffer->bufused),
+        mem_sys_memcopy((void *)((ptrcast_t)buffer->_bufstart + buffer->bufused),
                 s->strstart, s->bufused);
 
         /* Update buffer */
         buffer->bufused += s->bufused;
+        buffer->strstart = (char *)buffer->_bufstart;
         buffer->strlen  += Parrot_str_length(INTERP, s);
         buffer->hashval = 0; /* hash is invalid */
 
@@ -218,26 +263,24 @@
         STRING * buffer;
 
         /* Calculate (possibly new) total size */
-        size_t total_size = calculate_capacity(INTERP, 0, s->bufused);
+        size_t total_size = calculate_capacity(INTERP, s->bufused);
 
         GET_ATTR_buffer(INTERP, SELF, buffer);
 
         /* Reallocate if necessary */
         if (total_size > Buffer_buflen(buffer)) {
-            buffer->_bufstart = buffer->strstart = mem_gc_realloc_n_typed(INTERP,
-                    buffer->_bufstart, total_size, char);
-            buffer->_buflen   = total_size;
+            Parrot_gc_reallocate_string_storage(INTERP, buffer, total_size);
+            buffer->strstart = (char*)buffer->_bufstart;
         }
 
         /* Tack s on the buffer */
-        mem_sys_memcopy((void *)((ptrcast_t)buffer->strstart),
+        mem_sys_memcopy((void *)((char*)buffer->_bufstart),
                 s->strstart, s->bufused);
 
         /* Update buffer */
         buffer->bufused  = s->bufused;
         buffer->strlen   = Parrot_str_length(INTERP, s);
         buffer->encoding = s->encoding;
-        buffer->charset  = s->charset;
     }
 
     VTABLE void set_pmc(PMC *s) {
@@ -415,17 +458,9 @@
 
 /*
 
-=item C<static size_t calculate_capacity(PARROT_INTERP, size_t current, size_t
-additional)>
+=item C<static size_t calculate_capacity(PARROT_INTERP, size_t needed)>
 
-Calculate capacity for string. Usually StringBuilders used for "large"
-strings. So capacity rounded up by next algorithm:
-  - By 128 bytes if total capacity less then 1KB
-  - By 1KB if total less than 4KB
-  - By 4KB if total less than 1MB
-  - By 1MB otherwise.
-
-This function is subject for tuning on real-world usage scenarios.
+Calculate capacity for string. We allocate double the amount needed.
 
 =back
 
@@ -434,22 +469,15 @@
 */
 
 static size_t
-calculate_capacity(SHIM_INTERP, size_t current, size_t additional)
+calculate_capacity(SHIM_INTERP, size_t needed)
 {
     ASSERT_ARGS(calculate_capacity)
-    size_t total_size = current + additional;
-    size_t chunk_size = 1024*1024;
-
-    if (total_size < 1024)
-        chunk_size = 128;
-    else if (total_size < 4096)
-        chunk_size = 1024;
-    else if (total_size < 1024*1024)
-        chunk_size = 4096;
 
-    total_size = (total_size / chunk_size + 1) * chunk_size;
+    needed *= 2;
+    /* round up to 16 */
+    needed  = (needed + 15) & ~15;
 
-    return total_size;
+    return needed;
 }
 
 /*

Modified: branches/html_cleanup/src/pmc/stringhandle.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/stringhandle.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/stringhandle.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -193,9 +193,10 @@
 
             GET_ATTR_encoding(INTERP, SELF, encoding);
             if (encoding_is_utf8(INTERP, encoding))
-                new_string = string_make(INTERP, "", 0, "unicode", 0);
+                new_string = Parrot_str_new_init(INTERP, "", 0,
+                        Parrot_utf8_encoding_ptr, 0);
             else
-                new_string = Parrot_str_new(INTERP, "", 0);
+                new_string = CONST_STRING(INTERP, "");
 
             SET_ATTR_stringhandle(INTERP, SELF, new_string);
         }
@@ -203,7 +204,7 @@
         /* Set a default mode of read-only. */
         GET_ATTR_mode(INTERP, SELF, open_mode);
         if (STRING_IS_NULL(open_mode)) {
-            open_mode = Parrot_str_new_constant(INTERP, "r");
+            open_mode = CONST_STRING(INTERP, "r");
             SET_ATTR_mode(INTERP, SELF, open_mode);
         }
 
@@ -215,21 +216,6 @@
 
 /*
 
-=item C<METHOD is_tty()>
-
-StringHandles are never tty's, returns false.
-
-=cut
-
-*/
-    METHOD is_tty() {
-        Parrot_warn_deprecated(INTERP,
-            "'is_tty' is deprecated, use 'isatty' instead - TT #1689");
-        RETURN(INTVAL 0);
-    }
-
-/*
-
 =item C<METHOD close()>
 
 Reset some core data for the StringHandle, but don't delete the string data, as
@@ -313,9 +299,10 @@
             STRING *encoding;
             GET_ATTR_encoding(INTERP, SELF, encoding);
             if (encoding_is_utf8(INTERP, encoding))
-                string_result = string_make(INTERP, "", 0, "unicode", 0);
+                string_result = Parrot_str_new_init(INTERP, "", 0,
+                        Parrot_utf8_encoding_ptr, 0);
             else
-                string_result = Parrot_str_new_constant(INTERP, "");
+                string_result = CONST_STRING(INTERP, "");
         }
 
         RETURN(STRING *string_result);

Modified: branches/html_cleanup/src/pmc/stringiterator.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/stringiterator.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/stringiterator.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -156,11 +156,11 @@
         GET_ATTR_str_val(INTERP, SELF, str_val);
         if (value == ITERATE_FROM_START) {
             SET_ATTR_reverse(INTERP, SELF, 0);
-            STRING_ITER_SET_POSITION(INTERP, str_val, iter, 0);
+            STRING_iter_set_position(INTERP, str_val, iter, 0);
         }
         else if (value == ITERATE_FROM_END) {
             SET_ATTR_reverse(INTERP, SELF, 1);
-            STRING_ITER_SET_POSITION(INTERP, str_val, iter, str_val->strlen);
+            STRING_iter_set_position(INTERP, str_val, iter, str_val->strlen);
         }
         else {
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
@@ -209,7 +209,7 @@
                 "StopIteration");
 
         ret = Parrot_pmc_new(INTERP, Parrot_get_ctx_HLL_type(interp, enum_class_String));
-        STRING_ITER_SKIP(INTERP, str_val, iter, 1);
+        STRING_iter_skip(INTERP, str_val, iter, 1);
         substr = Parrot_str_iter_substr(INTERP, str_val, &old_iter, iter);
         VTABLE_set_string_native(INTERP, ret, substr);
         return ret;
@@ -234,7 +234,7 @@
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "StopIteration");
 
-        STRING_ITER_SKIP(INTERP, str_val, iter, 1);
+        STRING_iter_skip(INTERP, str_val, iter, 1);
         return Parrot_str_iter_substr(INTERP, str_val, &old_iter, iter);
     }
 
@@ -256,7 +256,7 @@
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "StopIteration");
 
-        return STRING_ITER_GET_AND_ADVANCE(INTERP, str_val, iter);
+        return STRING_iter_get_and_advance(INTERP, str_val, iter);
     }
 
 /*
@@ -281,7 +281,7 @@
                 "StopIteration");
 
         ret = Parrot_pmc_new(INTERP, Parrot_get_ctx_HLL_type(interp, enum_class_String));
-        STRING_ITER_SKIP(INTERP, str_val, iter, -1);
+        STRING_iter_skip(INTERP, str_val, iter, -1);
         substr = Parrot_str_iter_substr(INTERP, str_val, iter, &old_iter);
         VTABLE_set_string_native(INTERP, ret, substr);
         return ret;
@@ -307,7 +307,7 @@
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "StopIteration");
 
-        STRING_ITER_SKIP(INTERP, str_val, iter, -1);
+        STRING_iter_skip(INTERP, str_val, iter, -1);
         return Parrot_str_iter_substr(INTERP, str_val, iter, &old_iter);
     }
 
@@ -330,8 +330,8 @@
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "StopIteration");
 
-        STRING_ITER_SKIP(INTERP, str_val, iter, -1);
-        return STRING_ITER_GET(INTERP, str_val, iter, 0);
+        STRING_iter_skip(INTERP, str_val, iter, -1);
+        return STRING_iter_get(INTERP, str_val, iter, 0);
     }
 
 /*
@@ -354,7 +354,7 @@
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "StopIteration");
 
-        return STRING_ITER_GET(INTERP, str_val, iter, idx);
+        return STRING_iter_get(INTERP, str_val, iter, idx);
     }
 
 /*
@@ -379,9 +379,9 @@
                 "StopIteration");
 
         if (idx != 0)
-            STRING_ITER_SKIP(INTERP, str_val, &iter, idx);
+            STRING_iter_skip(INTERP, str_val, &iter, idx);
         next_iter = iter;
-        STRING_ITER_SKIP(INTERP, str_val, &next_iter, 1);
+        STRING_iter_skip(INTERP, str_val, &next_iter, 1);
 
         return Parrot_str_iter_substr(INTERP, str_val, &iter, &next_iter);
     }

Modified: branches/html_cleanup/src/pmc/sub.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/sub.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/sub.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -19,6 +19,7 @@
 */
 
 #include "parrot/oplib/ops.h"
+#include "parrot/oplib/core_ops.h"
 #include "sub.str"
 
 /* HEADERIZER HFILE: none */
@@ -742,7 +743,7 @@
         INTVAL flags;
         int    i;
 
-        SUPER(info);
+        STATICSELF.init();
 
         PMC_get_sub(INTERP, SELF, sub);
 
@@ -863,14 +864,14 @@
         if (!sub->arg_info) {
             /* Get pointer into the bytecode where this sub starts. */
             const opcode_t *pc = sub->seg->base.data + sub->start_offs;
+            op_lib_t *core_ops = PARROT_GET_CORE_OPLIB(INTERP);
 
             /* Allocate structure to store argument information in. */
             sub->arg_info = mem_gc_allocate_zeroed_typed(INTERP,
                     Parrot_sub_arginfo);
 
             /* If the first instruction is a get_params... */
-            if (sub->seg->op_func_table[*pc]
-                == interp->op_func_table[PARROT_OP_get_params_pc]) {
+            if (OPCODE_IS(INTERP, sub->seg, *pc, core_ops, PARROT_OP_get_params_pc)) {
                 /* Get the signature (the next thing in the bytecode). */
                 PMC * const sig = PF_CONST(sub->seg, *(++pc)).u.key;
 

Modified: branches/html_cleanup/src/pmc/undef.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/undef.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/undef.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2004-2009, Parrot Foundation.
+Copyright (C) 2004-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -178,7 +178,7 @@
         Parrot_warn(INTERP, PARROT_WARNINGS_UNDEF_FLAG,
             "Stringifying an Undef PMC");
 
-        return Parrot_str_new_noinit(INTERP, enum_stringrep_one, 0);
+        return CONST_STRING(INTERP, "");
     }
 
 /*
@@ -212,22 +212,6 @@
 
 /*
 
-=item C<INTVAL logical_not()>
-
-Returns 1.
-
-=cut
-
-*/
-
-    VTABLE PMC *logical_not(PMC *dest) {
-        dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
-        VTABLE_set_bool(INTERP, dest, 1);
-        return dest;
-    }
-
-/*
-
 =item C<void share()>
 
 Unknown. (TODO)

Modified: branches/html_cleanup/src/pmc/unmanagedstruct.pmc
==============================================================================
--- branches/html_cleanup/src/pmc/unmanagedstruct.pmc	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc/unmanagedstruct.pmc	Wed Sep 22 03:35:47 2010	(r49232)
@@ -488,7 +488,8 @@
                other type or flag must be added.
                Need to provide some way to specify charset and encoding.
              */
-            return string_make(interp, cstr, len, "iso-8859-1", 0);
+            return Parrot_str_new_init(interp, cstr, len,
+                    Parrot_latin1_encoding_ptr, 0);
         }
         else
             return NULL;

Modified: branches/html_cleanup/src/pmc_freeze.c
==============================================================================
--- branches/html_cleanup/src/pmc_freeze.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/pmc_freeze.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -54,7 +54,7 @@
 Parrot_freeze(PARROT_INTERP, ARGIN(PMC *pmc))
 {
     ASSERT_ARGS(Parrot_freeze)
-    PMC * const image = Parrot_pmc_new(interp, enum_class_ImageIO);
+    PMC * const image = Parrot_pmc_new(interp, enum_class_ImageIOFreeze);
     VTABLE_set_pmc(interp, image, pmc);
     return VTABLE_get_string(interp, image);
 }
@@ -83,7 +83,7 @@
     STRING *image;
     DECL_CONST_CAST;
 
-    visitor  = Parrot_pmc_new(interp, enum_class_ImageIO);
+    visitor  = Parrot_pmc_new(interp, enum_class_ImageIOFreeze);
     VTABLE_set_pointer(interp, visitor,
         PARROT_const_cast(void *, (const void *)pf));
     VTABLE_set_pmc(interp, visitor, pmc);
@@ -199,7 +199,7 @@
     ASSERT_ARGS(Parrot_thaw)
 
     PMC        *result;
-    PMC * const info     = Parrot_pmc_new(interp, enum_class_ImageIO);
+    PMC * const info     = Parrot_pmc_new(interp, enum_class_ImageIOThaw);
     int         gc_block = 0;
 
     /*
@@ -251,7 +251,7 @@
     ASSERT_ARGS(Parrot_thaw_pbc)
     PackFile * const pf = ct->base.pf;
     STRING *image       = PF_fetch_buf(interp, pf, cursor);
-    PMC *info           = Parrot_pmc_new(interp, enum_class_ImageIO);
+    PMC *info           = Parrot_pmc_new(interp, enum_class_ImageIOThaw);
     VTABLE_set_pointer(interp, info, ct);
     VTABLE_set_string_native(interp, info, image);
     return VTABLE_get_pmc(interp, info);
@@ -318,15 +318,17 @@
 
     PMC * const  todo   = VTABLE_get_iter(interp, info);
     const INTVAL action = VTABLE_get_integer(interp, info);
-    const INTVAL e      = VTABLE_elements(interp, todo);
     INTVAL       i;
 
     /* can't cache upper limit, visit may append items */
     for (i = 0; i < VTABLE_elements(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");
+        if (PMC_IS_NULL(current))
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                    EXCEPTION_MALFORMED_PACKFILE,
+                    "NULL current PMC at %d in visit_loop_todo_list - %s",
+                    (int) i,
+                    action == VISIT_FREEZE_NORMAL ? "feeze" : "thaw");
 
         PARROT_ASSERT(current->vtable);
 

Modified: branches/html_cleanup/src/runcore/main.c
==============================================================================
--- branches/html_cleanup/src/runcore/main.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/runcore/main.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -36,28 +36,14 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void dynop_register_switch(PARROT_INTERP, size_t n_old, size_t n_new)
-        __attribute__nonnull__(1);
-
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static oplib_init_f get_dynamic_op_lib_init(SHIM_INTERP,
     ARGIN(const PMC *lib))
         __attribute__nonnull__(2);
 
-static void notify_func_table(PARROT_INTERP,
-    ARGIN(op_func_t *table),
-    int on)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-#define ASSERT_ARGS_dynop_register_switch __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_get_dynamic_op_lib_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(lib))
-#define ASSERT_ARGS_notify_func_table __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(table))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -219,10 +205,6 @@
 {
     ASSERT_ARGS(runops_int)
 
-    /* setup event function ptrs */
-    if (!interp->save_func_table)
-        Parrot_setup_event_func_ptrs(interp);
-
     interp->resume_offset = offset;
     interp->resume_flag  |= RESUME_RESTART;
 
@@ -250,47 +232,6 @@
 
 /*
 
-=item C<void Parrot_setup_event_func_ptrs(PARROT_INTERP)>
-
-Setup a C<func_table> containing pointers (or addresses) of the
-C<check_event__> opcode.
-
-TODO: Free it at destroy. Handle run-core changes.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_setup_event_func_ptrs(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_setup_event_func_ptrs)
-    const size_t       n         = interp->op_count;
-    const oplib_init_f init_func = get_core_op_lib_init(interp, interp->run_core);
-    op_lib_t * const   lib       = init_func(interp, 1);
-
-    /* remember op_func_table */
-    interp->save_func_table      = lib->op_func_table;
-
-    if (!lib->op_func_table)
-        return;
-
-    /* function or CG core - prepare func_table */
-    if (!interp->evc_func_table) {
-        size_t i;
-
-        interp->evc_func_table = mem_gc_allocate_n_zeroed_typed(interp, n, op_func_t);
-
-        for (i = 0; i < n; ++i)
-            interp->evc_func_table[i] = (op_func_t)
-                D2FPTR(((void**)lib->op_func_table)[CORE_OPS_check_events__]);
-    }
-}
-
-
-/*
-
 =item C<void Parrot_runcore_destroy(PARROT_INTERP)>
 
 Shuts down the runcores and deallocates any dynops memory.
@@ -326,15 +267,6 @@
         mem_gc_free(interp, interp->all_op_libs);
 
     interp->all_op_libs = NULL;
-
-    /* dynop libs */
-    if (interp->n_libs <= 0)
-        return;
-
-    mem_gc_free(interp, interp->op_info_table);
-    mem_gc_free(interp, interp->op_func_table);
-    interp->op_info_table = NULL;
-    interp->op_func_table = NULL;
 }
 
 
@@ -359,21 +291,12 @@
 dynop_register(PARROT_INTERP, ARGIN(PMC *lib_pmc))
 {
     ASSERT_ARGS(dynop_register)
-    op_lib_t *lib, *core;
-    oplib_init_f init_func;
-    op_func_t *new_func_table, *new_evc_func_table;
-    op_info_t *new_info_table;
-    size_t i, n_old, n_new, n_tot;
+    op_lib_t     *lib;
+    oplib_init_f  init_func;
 
     if (n_interpreters > 1) {
-        /* This is not supported because oplibs are always shared.
-         * If we mem_sys_reallocate() the op_func_table while another
-         * interpreter is running using that exact op_func_table,
-         * this will cause problems
-         * Also, the mapping from op name to op number is global even for
-         * dynops (!). The mapping is done by get_op in core_ops.c (even for
-         * dynops) and uses a global hash as a cache and relies on modifications
-         * to the static-scoped core_op_lib data structure to see dynops.
+        /* This is not supported yet because interp->all_op_libs
+         * and interp->op_hash are shared.
          */
         Parrot_ex_throw_from_c_args(interp, NULL, 1, "loading a new dynoplib while "
             "more than one thread is running is not supported.");
@@ -394,116 +317,33 @@
     /* if we are registering an op_lib variant, called from below the base
      * names of this lib and the previous one are the same */
     if (interp->n_libs >= 2
-    && (STREQ(interp->all_op_libs[interp->n_libs-2]->name, lib->name))) {
-        /* registering is handled below */
+    && (STREQ(interp->all_op_libs[interp->n_libs-2]->name, lib->name)))
         return;
-    }
-
-    /* when called from yyparse, we have to set up the evc_func_table */
-    Parrot_setup_event_func_ptrs(interp);
-
-    n_old = interp->op_count;
-    n_new = lib->op_count;
-    n_tot = n_old + n_new;
-    core  = PARROT_CORE_OPLIB_INIT(interp, 1);
-
-    PARROT_ASSERT(interp->op_count == core->op_count);
-
-    new_evc_func_table = mem_gc_realloc_n_typed_zeroed(interp,
-            interp->evc_func_table, n_tot, n_old, op_func_t);
-    if (core->flags & OP_FUNC_IS_ALLOCATED) {
-        new_func_table = mem_gc_realloc_n_typed_zeroed(interp,
-                core->op_func_table, n_tot, n_old, op_func_t);
-        new_info_table = mem_gc_realloc_n_typed_zeroed(interp,
-                core->op_info_table, n_tot, n_old, op_info_t);
-    }
-    else {
-        /* allocate new op_func and info tables */
-        new_func_table = mem_gc_allocate_n_zeroed_typed(interp, n_tot, op_func_t);
-        new_info_table = mem_gc_allocate_n_zeroed_typed(interp, n_tot, op_info_t);
-
-        /* copy old */
-        for (i = 0; i < n_old; ++i) {
-            new_func_table[i] = interp->op_func_table[i];
-            new_info_table[i] = interp->op_info_table[i];
-        }
-    }
-
-    /* add new */
-    for (i = n_old; i < n_tot; ++i) {
-        new_func_table[i] = ((op_func_t*)lib->op_func_table)[i - n_old];
-        new_info_table[i] = lib->op_info_table[i - n_old];
-
-        /*
-         * fill new ops of event checker func table
-         * if we are running a different core, entries are
-         * changed below
-         */
-        new_evc_func_table[i] = new_func_table[CORE_OPS_check_events__];
-    }
-
-    interp->evc_func_table  = new_evc_func_table;
-    interp->save_func_table = new_func_table;
-
-    /* deinit core, so that it gets rehashed */
-    (void) PARROT_CORE_OPLIB_INIT(interp, 0);
-
-    /* set table */
-    core->op_func_table = interp->op_func_table = new_func_table;
-    core->op_info_table = interp->op_info_table = new_info_table;
-    core->op_count      = interp->op_count      = n_tot;
-    core->flags         = OP_FUNC_IS_ALLOCATED | OP_INFO_IS_ALLOCATED;
 
-    /* done for plain core */
-    dynop_register_switch(interp, n_old, n_new);
+    parrot_hash_oplib(interp, lib);
 }
 
 
-
-
 /*
 
-=item C<static void dynop_register_switch(PARROT_INTERP, size_t n_old, size_t
-n_new)>
+=item C<void parrot_hash_oplib(PARROT_INTERP, op_lib_t *lib)>
 
-Used only at the end of dynop_register.  Sums the old and new op_counts
-storing the result into the operations count field of the interpreter
-object.
+Add the ops in C<lib> to the global name => op_info hash.
 
 =cut
 
 */
 
-static void
-dynop_register_switch(PARROT_INTERP, size_t n_old, size_t n_new)
-{
-    ASSERT_ARGS(dynop_register_switch)
-    op_lib_t * const lib = PARROT_CORE_OPLIB_INIT(interp, 1);
-    lib->op_count        = n_old + n_new;
-}
-
-
-/*
-
-=item C<static void notify_func_table(PARROT_INTERP, op_func_t *table, int on)>
-
-Tell the interpreter's running core about the new function table.
-
-=cut
-
-*/
-
-static void
-notify_func_table(PARROT_INTERP, ARGIN(op_func_t *table), int on)
+void
+parrot_hash_oplib(PARROT_INTERP, ARGIN(op_lib_t *lib))
 {
-    ASSERT_ARGS(notify_func_table)
-    const oplib_init_f init_func = get_core_op_lib_init(interp, interp->run_core);
-
-    init_func(interp, (long) table);
-
-    if (PARROT_RUNCORE_FUNC_TABLE_TEST(interp->run_core)) {
-        PARROT_ASSERT(table);
-        interp->op_func_table = table;
+    ASSERT_ARGS(parrot_hash_oplib)
+    int i;
+    for (i = 0; i < lib->op_count; i++) {
+        op_info_t *op = &lib->op_info_table[i];
+        parrot_hash_put(interp, interp->op_hash, (void *)op->full_name, (void *)op);
+        if (!parrot_hash_exists(interp, interp->op_hash, (void *)op->name))
+            parrot_hash_put(interp, interp->op_hash, (void *)op->name, (void *)op);
     }
 }
 
@@ -554,9 +394,30 @@
 {
     ASSERT_ARGS(enable_event_checking)
     PackFile_ByteCode *cs = interp->code;
+
     /* only save if we're not already event checking */
     if (cs->save_func_table == NULL)
         cs->save_func_table = cs->op_func_table;
+
+    /* ensure event checking table is big enough */
+    if (interp->evc_func_table_size < cs->op_count) {
+        int i;
+        op_lib_t *core_lib = get_core_op_lib_init(interp, interp->run_core)(interp, 1);
+
+        interp->evc_func_table = interp->evc_func_table ?
+                                    mem_gc_realloc_n_typed_zeroed(interp,
+                                        interp->evc_func_table, cs->op_count,
+                                        interp->evc_func_table_size, op_func_t) :
+                                    mem_gc_allocate_n_zeroed_typed(interp,
+                                        cs->op_count, op_func_t);
+
+        for (i = interp->evc_func_table_size; i < cs->op_count; i++)
+            interp->evc_func_table[i] = (op_func_t)
+                D2FPTR(((void**)core_lib->op_func_table)[CORE_OPS_check_events__]);
+
+        interp->evc_func_table_size = cs->op_count;
+    }
+
     /* put evc table in place */
     cs->op_func_table   = interp->evc_func_table;
 }

Modified: branches/html_cleanup/src/spf_render.c
==============================================================================
--- branches/html_cleanup/src/spf_render.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/spf_render.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -56,6 +56,14 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
+static void canonicalize_exponent(PARROT_INTERP,
+    ARGMOD(char *tc),
+    ARGIN(SpfInfo *info))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*tc);
+
 static void gen_sprintf_call(
     ARGOUT(char *out),
     ARGMOD(SpfInfo *info),
@@ -89,6 +97,10 @@
         FUNC_MODIFIES(*dest)
         FUNC_MODIFIES(*src);
 
+#define ASSERT_ARGS_canonicalize_exponent __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(tc) \
+    , PARROT_ASSERT_ARG(info))
 #define ASSERT_ARGS_gen_sprintf_call __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(out) \
     , PARROT_ASSERT_ARG(info))
@@ -292,6 +304,96 @@
     *p = '\0';
 }
 
+/*
+
+=item C<static void canonicalize_exponent(PARROT_INTERP, char *tc, SpfInfo
+*info)>
+
+   This function is called to canonicalize any exponent in a formatted
+   float. PARROT_SPRINTF_EXP_DIGITS specifies the standard number of
+   exponent digits that we want. Remember that the exponent has the
+   form '...Esddd ', where 's' is the sign, 'ddd' is some number of digits,
+   and there may be trailing spaces
+
+=cut
+
+*/
+
+static void
+canonicalize_exponent(PARROT_INTERP, ARGMOD(char *tc), ARGIN(SpfInfo *info))
+{
+    ASSERT_ARGS(canonicalize_exponent)
+
+    const size_t exp_digits = PARROT_SPRINTF_EXP_DIGITS;
+    size_t len      = strlen(tc),
+           last_pos = len,
+           non0_pos = len,
+           sign_pos = 0,
+           e_pos    = 0;
+    int i;
+
+    /* Scan the formatted number backward to find the positions of the
+       last digit, leftmost non-0 exponent digit, sign, and E. */
+
+    for (i = len-1; i >= 0 && e_pos == 0; --i) {
+        switch (tc[i]) {
+            case '1': case '2': case '3':
+            case '4': case '5': case '6':
+            case '7': case '8': case '9':   non0_pos = i;
+                                            /* fall through */
+
+            case '0':                       if (last_pos == len) last_pos = i;
+                                            break;
+
+            case '+': case '-':             sign_pos = i;
+                                            break;
+
+            case 'E': case 'e':             e_pos = i;
+                                            break;
+
+            default:                        break;
+        }
+    }
+
+    /* If there is an E, and it is followed by a sign, and there are
+       leading zeroes on the exponent, and there are more than the
+       standard number of exponent digits, then we have work to do. */
+
+    if (e_pos != 0 && sign_pos == e_pos + 1 &&
+        non0_pos > sign_pos + 1 &&
+        last_pos - sign_pos > exp_digits) {
+
+        /* Close up to eliminate excess exponent digits and
+           adjust the length. Don't forget to move the NUL. */
+
+        size_t keep = (last_pos - non0_pos + 1 > exp_digits)
+                        ? len - non0_pos
+                        : exp_digits + (len - last_pos - 1);
+
+        mem_sys_memmove(&tc[sign_pos+1], &tc[len - keep], keep+1);
+        len = sign_pos + 1 + keep;
+
+        /* If it's a fixed-width field and we're too short now,
+           we have more work to do. If the field is left-justified,
+           pad the number on the right. Otherwise pad the number on
+           the left, possibly with leading zeroes. */
+
+        if ((info->flags & FLAG_WIDTH) && len < info->width) {
+            if (info->flags & FLAG_MINUS) {
+                while (len < info->width) {
+                    strcat(tc, " ");
+                    ++len;
+                }
+            }
+            else {
+                size_t i;
+                mem_sys_memmove(&tc[info->width - len], &tc[0], len+1);
+                for (i = 0; i < info->width - len; ++i)
+                    tc[i] = (info->flags & FLAG_ZERO) ? '0' : ' ';
+            }
+        }
+    }
+}
 
 /*
 
@@ -317,7 +419,7 @@
     HUGEINTVAL num;
 
     /* start with a buffer; double the pattern length to avoid realloc #1 */
-    STRING *targ = Parrot_str_new_noinit(interp, enum_stringrep_one, pat_len * 2);
+    STRING *targ = Parrot_str_new_noinit(interp, pat_len * 2);
 
     /* ts is used almost universally as an intermediate target;
      * tc is used as a temporary buffer by Parrot_str_from_uint and
@@ -759,45 +861,9 @@
                                 Parrot_str_free_cstring(tempstr);
                             }
 
-#ifdef WIN32
-
-                            /* Microsoft defaults to three digits for
-                             * exponents, even when fewer digits would suffice.
-                             * For the sake of portability, we will here
-                             * attempt to hide that.  */
-                            if (ch == 'g' || ch == 'G'
-                             || ch == 'e' || ch == 'E') {
-                                const size_t tclen = strlen(tc);
-                                size_t j;
-                                for (j = 0; j < tclen; ++j) {
-                                    if ((tc[j] == 'e' || tc[j] == 'E')
-                                        && (tc[j+1] == '+' || tc[j+1] == '-')
-                                        && tc[j+2] == '0'
-                                        && isdigit((unsigned char)tc[j+3])
-                                        && isdigit((unsigned char)tc[j+4]))
-                                    {
-                                        mem_sys_memmove(&tc[j+2], &tc[j+3],
-                                            strlen(&tc[j+2]));
-
-                                        /* now fix any broken length */
-
-                                        if ((info.flags & FLAG_WIDTH)
-                                          && strlen(tc) < info.width) {
-                                            if (info.flags & FLAG_MINUS)
-                                                strcat(tc, " ");
-                                            else {
-                                                mem_sys_memmove(&tc[1], &tc[0],
-                                                    strlen(tc) + 1);
-                                                tc[0] = (info.flags & FLAG_ZERO) ? '0' : ' ';
-                                            }
-                                        }
-
-                                        /* only one fix required per string */
-                                        break;
-                                    }
-                                }
-                            }
-#endif /* WIN32 */
+                            if (ch == 'e' || ch == 'E' ||
+                                ch == 'g' || ch == 'G')
+                              canonicalize_exponent(interp, tc, &info);
 
                             targ = Parrot_str_concat(interp, targ, cstr2pstr(tc));
                             }

Modified: branches/html_cleanup/src/spf_vtable.c
==============================================================================
--- branches/html_cleanup/src/spf_vtable.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/spf_vtable.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -183,7 +183,7 @@
     /* char promoted to int */
     char ch = (char)va_arg(*arg, int);
 
-    return string_make(interp, &ch, 1, "iso-8859-1", 0);
+    return Parrot_str_new_init(interp, &ch, 1, Parrot_latin1_encoding_ptr, 0);
 }
 
 /*
@@ -452,7 +452,6 @@
 
     ++obj->index;
     s = VTABLE_get_string(interp, tmp);
-    /* XXX Parrot_str_copy like below? + adjusting bufused */
     return Parrot_str_substr(interp, s, 0, 1);
 }
 

Modified: branches/html_cleanup/src/string/api.c
==============================================================================
--- branches/html_cleanup/src/string/api.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/string/api.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -23,6 +23,8 @@
 
 */
 
+#include <stdio.h>
+
 #include "parrot/parrot.h"
 #include "private_cstring.h"
 #include "api.str"
@@ -35,7 +37,6 @@
 #define nonnull_encoding_name(s) (s) ? (s)->encoding->name : "null string"
 #define ASSERT_STRING_SANITY(s) \
     PARROT_ASSERT((s)->encoding); \
-    PARROT_ASSERT((s)->charset); \
     PARROT_ASSERT(!PObj_on_free_list_TEST(s))
 
 /* HEADERIZER HFILE: include/parrot/string_funcs.h */
@@ -46,14 +47,11 @@
 PARROT_INLINE
 PARROT_IGNORABLE_RESULT
 PARROT_CAN_RETURN_NULL
-static const CHARSET * string_rep_compatible(SHIM_INTERP,
+static const STR_VTABLE * string_rep_compatible(SHIM_INTERP,
     ARGIN(const STRING *a),
-    ARGIN(const STRING *b),
-    ARGOUT(const ENCODING **e))
+    ARGIN(const STRING *b))
         __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        __attribute__nonnull__(4)
-        FUNC_MODIFIES(*e);
+        __attribute__nonnull__(3);
 
 PARROT_DOES_NOT_RETURN
 PARROT_COLD
@@ -62,8 +60,7 @@
 
 #define ASSERT_ARGS_string_rep_compatible __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(a) \
-    , PARROT_ASSERT_ARG(b) \
-    , PARROT_ASSERT_ARG(e))
+    , PARROT_ASSERT_ARG(b))
 #define ASSERT_ARGS_throw_illegal_escape __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
@@ -137,15 +134,18 @@
         return;
     }
 
-    /* Set up the cstring cache, then load the basic encodings and charsets */
-    const_cstring_hash          = parrot_new_cstring_hash(interp);
+    /* Set up the cstring cache, then load the basic encodings */
+    const_cstring_hash          = parrot_create_hash_sized(interp,
+                                        enum_type_PMC,
+                                        Hash_key_type_cstring,
+                                        n_parrot_cstrings);
     interp->const_cstring_hash  = const_cstring_hash;
-    Parrot_charsets_encodings_init(interp);
+    Parrot_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,
+                       Parrot_default_encoding_ptr,
                        PObj_constant_FLAG);
 #endif
 
@@ -158,7 +158,7 @@
             Parrot_str_new_init(interp,
                 parrot_cstrings[i].string,
                 parrot_cstrings[i].len,
-                PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET,
+                Parrot_default_encoding_ptr,
                 PObj_external_FLAG|PObj_constant_FLAG);
         parrot_hash_put(interp, const_cstring_hash,
             PARROT_const_cast(char *, parrot_cstrings[i].string), (void *)s);
@@ -187,7 +187,7 @@
     if (!interp->parent_interpreter) {
         mem_internal_free(interp->const_cstring_table);
         interp->const_cstring_table = NULL;
-        Parrot_charsets_encodings_deinit(interp);
+        Parrot_deinit_encodings(interp);
         parrot_hash_destroy(interp, interp->const_cstring_hash);
     }
 }
@@ -195,8 +195,7 @@
 
 /*
 
-=item C<STRING * Parrot_str_new_noinit(PARROT_INTERP,
-parrot_string_representation_t representation, UINTVAL capacity)>
+=item C<STRING * Parrot_str_new_noinit(PARROT_INTERP, UINTVAL capacity)>
 
 Creates and returns an empty Parrot string.
 
@@ -207,19 +206,12 @@
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 STRING *
-Parrot_str_new_noinit(PARROT_INTERP,
-    parrot_string_representation_t representation, UINTVAL capacity)
+Parrot_str_new_noinit(PARROT_INTERP, UINTVAL capacity)
 {
     ASSERT_ARGS(Parrot_str_new_noinit)
     STRING * const s = Parrot_gc_new_string_header(interp, 0);
 
-    /* TODO adapt string creation functions */
-    if (representation != enum_stringrep_one)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_CHARTYPE,
-            "Unsupported representation");
-
-    s->charset  = PARROT_DEFAULT_CHARSET;
-    s->encoding = CHARSET_GET_PREFERRED_ENCODING(interp, s);
+    s->encoding = Parrot_default_encoding_ptr;
 
     Parrot_gc_allocate_string_storage(interp, s,
         (size_t)string_max_bytes(interp, s, capacity));
@@ -230,10 +222,10 @@
 
 /*
 
-=item C<static const CHARSET * string_rep_compatible(PARROT_INTERP, const STRING
-*a, const STRING *b, const ENCODING **e)>
+=item C<static const STR_VTABLE * string_rep_compatible(PARROT_INTERP, const
+STRING *a, const STRING *b)>
 
-Find the "lowest" possible charset and encoding for the given string. E.g.
+Find the "lowest" possible encoding for the given string. E.g.
 
   ascii <op> utf8 => utf8
                   => ascii, B<if> C<STRING *b> has ascii chars only.
@@ -247,66 +239,59 @@
 PARROT_INLINE
 PARROT_IGNORABLE_RESULT
 PARROT_CAN_RETURN_NULL
-static const CHARSET *
+static const STR_VTABLE *
 string_rep_compatible(SHIM_INTERP,
-    ARGIN(const STRING *a), ARGIN(const STRING *b), ARGOUT(const ENCODING **e))
+    ARGIN(const STRING *a), ARGIN(const STRING *b))
 {
     ASSERT_ARGS(string_rep_compatible)
 
-    if (a->encoding == b->encoding && a->charset == b->charset) {
-        *e = a->encoding;
-        return a->charset;
+    if (a->encoding == b->encoding) {
+        return a->encoding;
     }
 
     /* a table could possibly simplify the logic */
     if (a->encoding == Parrot_utf8_encoding_ptr
-    &&  b->charset  == Parrot_ascii_charset_ptr) {
+    &&  b->encoding == Parrot_ascii_encoding_ptr) {
         if (a->strlen == a->bufused) {
-            *e = Parrot_fixed_8_encoding_ptr;
-            return b->charset;
+            return b->encoding;
         }
-        *e = a->encoding;
-        return a->charset;
+        return a->encoding;
     }
 
     if (b->encoding == Parrot_utf8_encoding_ptr
-    &&  a->charset  == Parrot_ascii_charset_ptr) {
+    &&  a->encoding == Parrot_ascii_encoding_ptr) {
         if (b->strlen == b->bufused) {
-            *e = Parrot_fixed_8_encoding_ptr;
-            return a->charset;
+            return a->encoding;
         }
-        *e = b->encoding;
-        return b->charset;
+        return b->encoding;
     }
 
-    if (a->encoding != b->encoding)
+    /* Sanity check before dereferencing the encoding pointers */
+    if (a->encoding == NULL || b->encoding == NULL)
         return NULL;
 
-    if (a->encoding != Parrot_fixed_8_encoding_ptr)
+    if (STRING_max_bytes_per_codepoint(a) != 1 ||
+        STRING_max_bytes_per_codepoint(b) != 1)
         return NULL;
 
-    *e = Parrot_fixed_8_encoding_ptr;
-
-    if (a->charset == b->charset)
-        return a->charset;
-    if (b->charset == Parrot_ascii_charset_ptr)
-        return a->charset;
-    if (a->charset == Parrot_ascii_charset_ptr)
-        return b->charset;
-    if (a->charset == Parrot_binary_charset_ptr)
-        return a->charset;
-    if (b->charset == Parrot_binary_charset_ptr)
-        return b->charset;
+    if (b->encoding == Parrot_ascii_encoding_ptr)
+        return a->encoding;
+    if (a->encoding == Parrot_ascii_encoding_ptr)
+        return b->encoding;
+    if (a->encoding == Parrot_binary_encoding_ptr)
+        return a->encoding;
+    if (b->encoding == Parrot_binary_encoding_ptr)
+        return b->encoding;
 
     return NULL;
 }
 
 /*
 
-=item C<const CHARSET * Parrot_str_rep_compatible(PARROT_INTERP, const STRING
-*a, const STRING *b, const ENCODING **e)>
+=item C<const STR_VTABLE * Parrot_str_rep_compatible(PARROT_INTERP, const STRING
+*a, const STRING *b)>
 
-Find the "lowest" possible charset and encoding for the given string. E.g.
+Find the "lowest" possible encoding for the given string. E.g.
 
   ascii <op> utf8 => utf8
                   => ascii, B<if> C<STRING *b> has ascii chars only.
@@ -320,12 +305,12 @@
 PARROT_EXPORT
 PARROT_IGNORABLE_RESULT
 PARROT_CAN_RETURN_NULL
-const CHARSET *
+const STR_VTABLE *
 Parrot_str_rep_compatible(PARROT_INTERP,
-    ARGIN(const STRING *a), ARGIN(const STRING *b), ARGOUT(const ENCODING **e))
+    ARGIN(const STRING *a), ARGIN(const STRING *b))
 {
     ASSERT_ARGS(Parrot_str_rep_compatible)
-    return string_rep_compatible(interp, a, b, e);
+    return string_rep_compatible(interp, a, b);
 }
 
 /*
@@ -348,18 +333,18 @@
     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;
-
-    /* Allocate new chunk of memory */
-    Parrot_gc_allocate_string_storage(interp, result, alloc_size);
+    if (alloc_size) {
+        /* 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);
+    }
 
-    /* and copy it over */
-    mem_sys_memcopy(result->strstart, s->strstart, alloc_size);
+    result->bufused  = alloc_size;
+    result->strlen   = s->strlen;
+    result->hashval  = s->hashval;
+    result->encoding = s->encoding;
 
     return result;
 }
@@ -394,6 +379,9 @@
     /* Clear live flag. It might be set on constant strings */
     PObj_live_CLEAR(d);
 
+    /* Set the string copy flag */
+    PObj_is_string_copy_SET(d);
+
     /* Now check that buffer allocated from pool and affected by compacting */
     if (is_movable && Buffer_bufstart(s)) {
         /* If so, mark it as shared */
@@ -428,30 +416,28 @@
             ARGIN_NULLOK(const STRING *b))
 {
     ASSERT_ARGS(Parrot_str_concat)
-    const CHARSET   *cs;
-    const ENCODING  *enc = NULL;
-    STRING          *dest;
-    UINTVAL          total_length;
-
-    /* XXX should this be a CHARSET method? */
-
-    /* If B isn't real, we just bail */
-    const UINTVAL b_len = b ? Parrot_str_length(interp, b) : 0;
-    if (!b_len)
-        return STRING_IS_NULL(a) ? STRINGNULL : Parrot_str_copy(interp, a);
-
-    /* Is A real? */
-    if (STRING_IS_NULL(a) || Buffer_bufstart(a) == NULL)
-        return Parrot_str_copy(interp, b);
+    const STR_VTABLE *enc;
+    STRING           *dest;
+    UINTVAL           total_length;
+
+    if (STRING_IS_NULL(a)) {
+        if (STRING_IS_NULL(b))
+            return STRINGNULL;
+        else
+            return Parrot_str_copy(interp, b);
+    }
+    else {
+        if (STRING_IS_NULL(b))
+            return Parrot_str_copy(interp, a);
+    }
 
     ASSERT_STRING_SANITY(a);
     ASSERT_STRING_SANITY(b);
 
-    cs = string_rep_compatible(interp, a, b, &enc);
+    enc = string_rep_compatible(interp, a, b);
 
-    if (!cs) {
+    if (!enc) {
         /* upgrade strings for concatenation */
-        cs = Parrot_unicode_charset_ptr;
         if (a->encoding == Parrot_ucs4_encoding_ptr
             || b->encoding == Parrot_ucs4_encoding_ptr)
             enc = Parrot_ucs4_encoding_ptr;
@@ -463,32 +449,52 @@
         else
             enc = Parrot_utf8_encoding_ptr;
 
-        a = Parrot_unicode_charset_ptr->to_charset(interp, a);
-        b = Parrot_unicode_charset_ptr->to_charset(interp, b);
-
-        if (a->encoding != enc)
-            a = enc->to_encoding(interp, a);
-        if (b->encoding != enc)
-            b = enc->to_encoding(interp, b);
+        a = enc->to_encoding(interp, a);
+        b = enc->to_encoding(interp, b);
     }
     /* calc usable and total bytes */
     total_length = a->bufused + b->bufused;
 
-    dest = Parrot_str_new_noinit(interp, enum_stringrep_one, total_length);
-    PARROT_ASSERT(enc);
-    PARROT_ASSERT(cs);
-    dest->encoding = enc;
-    dest->charset  = cs;
+    if (PObj_is_growable_TESTALL(a)
+    &&  a->strstart + total_length <=
+        (char *)Buffer_bufstart(a) + Buffer_buflen(a)) {
+        /* String a is growable and there's enough space in the buffer */
+        DECL_CONST_CAST;
+
+        dest = Parrot_str_copy(interp, a);
 
-    /* Copy A first */
-    mem_sys_memcopy(dest->strstart, a->strstart, a->bufused);
+        /* Switch string copy flags */
+        PObj_is_string_copy_SET(PARROT_const_cast(STRING *, a));
+        PObj_is_string_copy_CLEAR(dest);
+
+        /* Append b */
+        mem_sys_memcopy(dest->strstart + dest->bufused,
+                b->strstart, b->bufused);
 
-    /* Tack B on the end of A */
-    mem_sys_memcopy((void *)((ptrcast_t)dest->strstart + a->bufused),
-            b->strstart, b->bufused);
+        dest->encoding = enc;
+        dest->hashval = 0;
+    }
+    else {
+        if (4 * b->bufused < a->bufused) {
+            /* Preallocate more memory if we're appending a short string to
+               a long string */
+            total_length += total_length >> 1;
+        }
+
+        dest = Parrot_str_new_noinit(interp, total_length);
+        PARROT_ASSERT(enc);
+        dest->encoding = enc;
+
+        /* 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)dest->strstart + a->bufused),
+                b->strstart, b->bufused);
+    }
 
     dest->bufused = a->bufused + b->bufused;
-    dest->strlen  = a->strlen + b_len;
+    dest->strlen  = a->strlen + b->strlen;
 
     return dest;
 }
@@ -517,7 +523,7 @@
     const UINTVAL buff_length = (len > 0) ? len : buffer ? strlen(buffer) : 0;
 
     return Parrot_str_new_init(interp, buffer, buff_length,
-        PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET, 0);
+        Parrot_default_encoding_ptr, 0);
 }
 
 
@@ -550,8 +556,7 @@
     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;
+    result->encoding      = Parrot_binary_encoding_ptr;
 
     Buffer_buflen(buffer)   = 0;
     Buffer_bufstart(buffer) = NULL;
@@ -562,37 +567,6 @@
 
 /*
 
-=item C<const char* string_primary_encoding_for_representation(PARROT_INTERP,
-parrot_string_representation_t representation)>
-
-Returns the primary encoding for the specified representation.
-
-This is needed for packfile unpacking, unless we just always use UTF-8 or BOCU.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-PARROT_OBSERVER
-const char*
-string_primary_encoding_for_representation(PARROT_INTERP,
-    parrot_string_representation_t representation)
-{
-    ASSERT_ARGS(string_primary_encoding_for_representation)
-    if (representation == enum_stringrep_one)
-        return "ascii";
-
-    Parrot_ex_throw_from_c_args(interp, NULL,
-        EXCEPTION_INVALID_STRING_REPRESENTATION,
-        "string_primary_encoding_for_representation: "
-        "invalid string representation");
-}
-
-
-/*
-
 =item C<STRING * Parrot_str_new_constant(PARROT_INTERP, const char *buffer)>
 
 Creates and returns a constant Parrot string.
@@ -617,7 +591,7 @@
         return s;
 
     s = Parrot_str_new_init(interp, buffer, strlen(buffer),
-                       PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET,
+                       Parrot_default_encoding_ptr,
                        PObj_external_FLAG|PObj_constant_FLAG);
 
     parrot_hash_put(interp, cstring_cache,
@@ -630,12 +604,12 @@
 /*
 
 =item C<STRING * string_make(PARROT_INTERP, const char *buffer, UINTVAL len,
-const char *charset_name, UINTVAL flags)>
+const char *encoding_name, UINTVAL flags)>
 
 Creates and returns a new Parrot string using C<len> bytes of string data read
 from C<buffer>.
 
-The value of C<charset_name> specifies the string's representation.
+The value of C<encoding_name> specifies the string's representation.
 The currently recognised values are:
 
     'iso-8859-1'
@@ -646,7 +620,7 @@
 The encoding is implicitly guessed; C<unicode> implies the C<utf-8> encoding,
 and the other three assume C<fixed-8> encoding.
 
-If C<charset> is unspecified, the default charset 'ascii' will be used.
+If C<encoding_name> is unspecified, the default encoding 'ascii' will be used.
 
 The value of C<flags> is optionally one or more C<PObj_*> flags C<OR>-ed
 together.
@@ -660,74 +634,28 @@
 PARROT_CANNOT_RETURN_NULL
 STRING *
 string_make(PARROT_INTERP, ARGIN_NULLOK(const char *buffer),
-        UINTVAL len, ARGIN_NULLOK(const char *charset_name), UINTVAL flags)
+        UINTVAL len, ARGIN_NULLOK(const char *encoding_name), UINTVAL flags)
 {
     ASSERT_ARGS(string_make)
-    const CHARSET *charset;
+    const STR_VTABLE *encoding;
 
-    if (charset_name) {
-        charset = Parrot_find_charset(interp, charset_name);
-        if (!charset)
+    if (encoding_name) {
+        encoding = Parrot_find_encoding(interp, encoding_name);
+        if (!encoding)
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
-                "Can't make '%s' charset strings", charset_name);
+                "Can't make '%s' encoding strings", encoding_name);
     }
     else
-        charset = Parrot_get_charset(interp, 0);
+        encoding = Parrot_default_encoding_ptr;
 
-    return Parrot_str_new_init(interp, buffer, len,
-        charset->preferred_encoding, charset, flags);
-}
-
-
-/*
-
-=item C<STRING * string_make_from_charset(PARROT_INTERP, const char *buffer,
-UINTVAL len, INTVAL charset_nr, UINTVAL flags)>
-
-Creates and returns a new Parrot string using C<len> bytes of string data read
-from C<buffer>.
-
-The value of C<charset_name> specifies the string's representation.  It must be
-a valid charset identifier.
-
-    'iso-8859-1'
-    'ascii'
-    'binary'
-    'unicode'
-
-The encoding is implicitly guessed; C<unicode> implies the C<utf-8> encoding,
-and the other three assume C<fixed-8> encoding.
-
-The value of C<flags> is optionally one or more C<PObj_*> flags C<OR>-ed
-together.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-STRING *
-string_make_from_charset(PARROT_INTERP, ARGIN_NULLOK(const char *buffer),
-    UINTVAL len, INTVAL charset_nr, UINTVAL flags)
-{
-    ASSERT_ARGS(string_make_from_charset)
-    const CHARSET *charset = Parrot_get_charset(interp, charset_nr);
-
-    if (!charset)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
-            "Invalid charset number '%d' specified", charset_nr);
-
-    return Parrot_str_new_init(interp, buffer, len,
-        charset->preferred_encoding, charset, flags);
+    return Parrot_str_new_init(interp, buffer, len, encoding, flags);
 }
 
 
 /*
 
 =item C<STRING * Parrot_str_new_init(PARROT_INTERP, const char *buffer, UINTVAL
-len, const ENCODING *encoding, const CHARSET *charset, UINTVAL flags)>
+len, const STR_VTABLE *encoding, UINTVAL flags)>
 
 Given a buffer, its length, an encoding, a character set, and STRING flags,
 creates and returns a new string.  Don't call this directly.
@@ -741,13 +669,12 @@
 PARROT_CANNOT_RETURN_NULL
 STRING *
 Parrot_str_new_init(PARROT_INTERP, ARGIN_NULLOK(const char *buffer), UINTVAL len,
-        ARGIN(const ENCODING *encoding), ARGIN(const CHARSET *charset), UINTVAL flags)
+        ARGIN(const STR_VTABLE *encoding), UINTVAL flags)
 {
     ASSERT_ARGS(Parrot_str_new_init)
     DECL_CONST_CAST;
     STRING * const s = Parrot_gc_new_string_header(interp, flags);
     s->encoding      = encoding;
-    s->charset       = charset;
 
     if (flags & PObj_external_FLAG) {
         /*
@@ -762,23 +689,23 @@
         Buffer_bufstart(s) = s->strstart = PARROT_const_cast(char *, buffer);
         Buffer_buflen(s)   = s->bufused  = len;
 
-        if (encoding == Parrot_fixed_8_encoding_ptr)
+        if (encoding->max_bytes_per_codepoint == 1)
             s->strlen = len;
         else
-            s->strlen = CHARSET_CODEPOINTS(interp, s);
+            s->strlen = STRING_scan(interp, s);
 
         return s;
     }
 
     Parrot_gc_allocate_string_storage(interp, s, len);
 
-    if (buffer) {
+    if (buffer && len) {
         mem_sys_memcopy(s->strstart, buffer, len);
         s->bufused = len;
-        if (encoding == Parrot_fixed_8_encoding_ptr)
+        if (encoding->max_bytes_per_codepoint == 1)
             s->strlen = len;
         else
-            s->strlen = CHARSET_CODEPOINTS(interp, s);
+            s->strlen = STRING_scan(interp, s);
     }
     else
         s->strlen = s->bufused = 0;
@@ -836,7 +763,7 @@
 {
     ASSERT_ARGS(Parrot_str_indexed)
     ASSERT_STRING_SANITY(s);
-    return (INTVAL)CHARSET_GET_CODEPOINT(interp, s, idx);
+    return (INTVAL)STRING_ord(interp, s, idx);
 }
 
 
@@ -884,7 +811,7 @@
         STRING *src    = PARROT_const_cast(STRING *, s);
         STRING *search = PARROT_const_cast(STRING *, s2);
 
-        return CHARSET_INDEX(interp, src, search, (UINTVAL)start);
+        return STRING_index(interp, src, search, (UINTVAL)start);
     }
 }
 
@@ -952,17 +879,13 @@
 string_chr(PARROT_INTERP, UINTVAL character)
 {
     ASSERT_ARGS(string_chr)
-    if (character > 0xff)
-        return Parrot_unicode_charset_ptr->string_from_codepoint(interp,
-                character);
 
+    if (character > 0xff)
+        return Parrot_utf8_encoding_ptr->chr(interp, character);
     else if (character > 0x7f)
-        return Parrot_iso_8859_1_charset_ptr->string_from_codepoint(interp,
-                character);
-
+        return Parrot_latin1_encoding_ptr->chr(interp, character);
     else
-        return Parrot_ascii_charset_ptr->string_from_codepoint(interp,
-                 character);
+        return Parrot_ascii_encoding_ptr->chr(interp, character);
 }
 
 
@@ -1013,7 +936,7 @@
 {
     ASSERT_ARGS(string_max_bytes)
     PARROT_ASSERT(s->encoding);
-    return ENCODING_MAX_BYTES_PER_CODEPOINT(interp, s) * nchars;
+    return STRING_max_bytes_per_codepoint(s) * nchars;
 }
 
 
@@ -1035,7 +958,7 @@
     ASSERT_ARGS(Parrot_str_repeat)
     STRING * const dest = Parrot_str_new_init(interp, NULL,
                         s->bufused * num,
-                        s->encoding, s->charset, 0);
+                        s->encoding, 0);
     if (num > 0) {
         /* copy s into dest num times */
         UINTVAL length = s->bufused;
@@ -1076,8 +999,9 @@
 {
     ASSERT_ARGS(Parrot_str_substr)
 
-    UINTVAL true_length;
-    UINTVAL true_offset = (UINTVAL)offset;
+    UINTVAL       true_length;
+    UINTVAL       true_offset = (UINTVAL)offset;
+    const UINTVAL src_length  = Parrot_str_length(interp, src);
 
     if (STRING_IS_NULL(src))
         Parrot_ex_throw_from_c_args(interp, NULL,
@@ -1086,24 +1010,27 @@
     ASSERT_STRING_SANITY(src);
 
     /* Allow regexes to return $' easily for "aaa" =~ /aaa/ */
-    if (offset == (INTVAL)Parrot_str_length(interp, src) || length < 1)
-        return Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
+    if (true_offset == src_length || length < 1)
+        return CONST_STRING(interp, "");
 
     if (offset < 0)
-        true_offset = (UINTVAL)(src->strlen + offset);
+        true_offset = src_length + offset;
 
     /* 0 based... */
-    if (src->strlen == 0 || true_offset > src->strlen - 1)
+    if (src_length == 0 || true_offset > src_length - 1)
         Parrot_ex_throw_from_c_args(interp, NULL,
             EXCEPTION_SUBSTR_OUT_OF_STRING,
             "Cannot take substr outside string");
 
     true_length = (UINTVAL)length;
 
-    if (true_length > (src->strlen - true_offset))
-        true_length = (UINTVAL)(src->strlen - true_offset);
+    if (true_length > (src_length - true_offset))
+        true_length = (UINTVAL)(src_length - true_offset);
 
-    return CHARSET_GET_CODEPOINTS(interp, src, true_offset, true_length);
+    if (true_length == src_length && !offset)
+        return (STRING *)src;
+    else
+        return STRING_substr(interp, src, true_offset, true_length);
 }
 
 /*
@@ -1177,12 +1104,12 @@
     }
 
     STRING_ITER_INIT(interp, &search_iter);
-    c0 = STRING_ITER_GET_AND_ADVANCE(interp, search, &search_iter);
+    c0 = STRING_iter_get_and_advance(interp, search, &search_iter);
     search_start = search_iter;
     next_start = *start;
 
     while (start->charpos + len <= src->strlen) {
-        UINTVAL c1 = STRING_ITER_GET_AND_ADVANCE(interp, src, &next_start);
+        UINTVAL c1 = STRING_iter_get_and_advance(interp, src, &next_start);
 
         if (c1 == c0) {
             UINTVAL c2;
@@ -1191,8 +1118,8 @@
             do {
                 if (search_iter.charpos >= len)
                     return start->charpos;
-                c1 = STRING_ITER_GET_AND_ADVANCE(interp, src, end);
-                c2 = STRING_ITER_GET_AND_ADVANCE(interp, search, &search_iter);
+                c1 = STRING_iter_get_and_advance(interp, src, end);
+                c2 = STRING_iter_get_and_advance(interp, search, &search_iter);
             } while (c1 == c2);
 
             search_iter = search_start;
@@ -1238,12 +1165,11 @@
     INTVAL offset, INTVAL length, ARGIN(const STRING *rep))
 {
     ASSERT_ARGS(Parrot_str_replace)
-    String_iter     iter;
-    const CHARSET  *cs;
-    const ENCODING *enc;
-    STRING         *dest        = NULL;
-    UINTVAL         true_offset = (UINTVAL)offset;
-    UINTVAL         true_length = (UINTVAL)length;
+    String_iter       iter;
+    const STR_VTABLE *enc;
+    STRING           *dest        = NULL;
+    UINTVAL           true_offset = (UINTVAL)offset;
+    UINTVAL           true_length = (UINTVAL)length;
 
     UINTVAL         start_byte, end_byte, start_char, end_char;
     INTVAL          buf_size;
@@ -1270,24 +1196,25 @@
         true_length = (UINTVAL)(src->strlen - true_offset);
 
     /* may have different reps..... */
-    cs = string_rep_compatible(interp, src, rep, &enc);
+    enc = string_rep_compatible(interp, src, rep);
 
-    if (!cs) {
-        src = Parrot_utf16_encoding_ptr->to_encoding(interp, src);
-        rep = Parrot_utf16_encoding_ptr->to_encoding(interp, rep);
-        /* Remember selected charset and encoding */
+    if (!enc) {
+        if (src->encoding != Parrot_utf8_encoding_ptr)
+            src = Parrot_utf8_encoding_ptr->to_encoding(interp, src);
+        if (rep->encoding != Parrot_utf8_encoding_ptr)
+            rep = Parrot_utf8_encoding_ptr->to_encoding(interp, rep);
+        /* Remember selected encoding */
         enc = src->encoding;
-        cs  = src->charset;
     }
 
     /* get byte position of the part that will be replaced */
     STRING_ITER_INIT(interp, &iter);
 
-    STRING_ITER_SET_POSITION(interp, src, &iter, true_offset);
+    STRING_iter_set_position(interp, src, &iter, true_offset);
     start_byte = iter.bytepos;
     start_char = iter.charpos;
 
-    STRING_ITER_SKIP(interp, src, &iter, true_length);
+    STRING_iter_skip(interp, src, &iter, true_length);
     end_byte   = iter.bytepos;
     end_char   = iter.charpos;
 
@@ -1300,9 +1227,8 @@
     /* Now do the replacement */
     dest = Parrot_gc_new_string_header(interp, 0);
 
-    /* Set encoding and charset to compatible */
+    /* Set encoding to compatible */
     dest->encoding = enc;
-    dest->charset  = cs;
 
     /* Clear COW flag. We own buffer */
     PObj_get_FLAGS(dest) = PObj_is_string_FLAG
@@ -1374,7 +1300,7 @@
         return chopped;
     }
 
-    if (chopped->encoding == Parrot_fixed_8_encoding_ptr) {
+    if (STRING_max_bytes_per_codepoint(chopped) == 1) {
         chopped->bufused = new_length;
     }
     else if (chopped->encoding == Parrot_ucs2_encoding_ptr) {
@@ -1385,7 +1311,7 @@
         String_iter iter;
 
         STRING_ITER_INIT(interp, &iter);
-        STRING_ITER_SET_POSITION(interp, s, &iter, new_length);
+        STRING_iter_set_position(interp, s, &iter, new_length);
         chopped->bufused = iter.bytepos;
     }
 
@@ -1424,7 +1350,7 @@
     ASSERT_STRING_SANITY(s1);
     ASSERT_STRING_SANITY(s2);
 
-    return CHARSET_COMPARE(interp, s1, s2);
+    return STRING_compare(interp, s1, s2);
 }
 
 
@@ -1497,7 +1423,7 @@
      * both strings are non-null
      * both strings have same length
      */
-    return CHARSET_COMPARE(interp, s1, s2) == 0;
+    return STRING_compare(interp, s1, s2) == 0;
 }
 
 
@@ -1523,13 +1449,13 @@
     STRING *res;
     size_t  minlen;
 
-    /* we could also trans_charset to iso-8859-1 */
-    if (s1 && s1->encoding != Parrot_fixed_8_encoding_ptr)
+    /* we could also trans_encoding to iso-8859-1 */
+    if (s1 && STRING_max_bytes_per_codepoint(s1) != 1)
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
             "string bitwise_and (%s/%s) unsupported",
             s1->encoding->name, nonnull_encoding_name(s2));
 
-    if (s2 && s2->encoding != Parrot_fixed_8_encoding_ptr)
+    if (s2 && STRING_max_bytes_per_codepoint(s2) != 1)
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
             "string bitwise_and (%s/%s) unsupported",
             nonnull_encoding_name(s1), s2->encoding->name);
@@ -1541,7 +1467,7 @@
         minlen = 0;
 
     res = Parrot_str_new_init(interp, NULL, minlen,
-            Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
+            Parrot_binary_encoding_ptr, 0);
 
     if (STRING_IS_NULL(s1) || STRING_IS_NULL(s2)) {
         res->bufused = 0;
@@ -1665,7 +1591,7 @@
     size_t  maxlen = 0;
 
     if (!STRING_IS_NULL(s1)) {
-        if (s1->encoding != Parrot_fixed_8_encoding_ptr)
+        if (STRING_max_bytes_per_codepoint(s1) != 1)
             Parrot_ex_throw_from_c_args(interp, NULL,
                 EXCEPTION_INVALID_ENCODING,
                 "string bitwise_or (%s/%s) unsupported",
@@ -1675,7 +1601,7 @@
     }
 
     if (!STRING_IS_NULL(s2)) {
-        if (s2->encoding != Parrot_fixed_8_encoding_ptr)
+        if (STRING_max_bytes_per_codepoint(s2) != 1)
             Parrot_ex_throw_from_c_args(interp, NULL,
                 EXCEPTION_INVALID_ENCODING,
                 "string bitwise_or (%s/%s) unsupported",
@@ -1686,7 +1612,7 @@
     }
 
     res = Parrot_str_new_init(interp, NULL, maxlen,
-            Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
+            Parrot_binary_encoding_ptr, 0);
 
     if (!maxlen) {
         res->bufused = 0;
@@ -1731,7 +1657,7 @@
     size_t  maxlen = 0;
 
     if (!STRING_IS_NULL(s1)) {
-        if (s1->encoding != Parrot_fixed_8_encoding_ptr)
+        if (STRING_max_bytes_per_codepoint(s1) != 1)
             Parrot_ex_throw_from_c_args(interp, NULL,
                 EXCEPTION_INVALID_ENCODING,
                 "string bitwise_xor (%s/%s) unsupported",
@@ -1741,7 +1667,7 @@
     }
 
     if (!STRING_IS_NULL(s2)) {
-        if (s2->encoding != Parrot_fixed_8_encoding_ptr)
+        if (STRING_max_bytes_per_codepoint(s2) != 1)
             Parrot_ex_throw_from_c_args(interp, NULL,
                 EXCEPTION_INVALID_ENCODING,
                 "string bitwise_xor (%s/%s) unsupported",
@@ -1752,7 +1678,7 @@
     }
 
     res = Parrot_str_new_init(interp, NULL, maxlen,
-            Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
+            Parrot_binary_encoding_ptr, 0);
 
     if (!maxlen) {
         res->bufused = 0;
@@ -1808,11 +1734,11 @@
     size_t  len;
 
     if (!STRING_IS_NULL(s)) {
-        if (s->encoding != Parrot_fixed_8_encoding_ptr)
+        if (STRING_max_bytes_per_codepoint(s) != 1)
             Parrot_ex_throw_from_c_args(interp, NULL,
                 EXCEPTION_INVALID_ENCODING,
-                "string bitwise_not (%s/%s) unsupported",
-                s->encoding->name, s->encoding->name);
+                "string bitwise_not (%s) unsupported",
+                s->encoding->name);
 
         len = s->bufused;
     }
@@ -1820,7 +1746,7 @@
         len = 0;
 
     res = Parrot_str_new_init(interp, NULL, len,
-            Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
+            Parrot_binary_encoding_ptr, 0);
 
     if (!len) {
         res->bufused = 0;
@@ -1961,59 +1887,34 @@
         int                 sign      = 1;
         UINTVAL             i         = 0;
         String_iter         iter;
-        number_parse_state  state = parse_start;
+        INTVAL              count = (INTVAL)s->strlen;
+        UINTVAL             c;
 
         STRING_ITER_INIT(interp, &iter);
 
-        while (state != parse_end && iter.charpos < s->strlen) {
-            const UINTVAL c = STRING_ITER_GET_AND_ADVANCE(interp, s, &iter);
-            /* Check for overflow */
-            if (c > 255)
-                break;
-
-            switch (state) {
-              case parse_start:
-                if (isdigit((unsigned char)c)) {
-                    const UINTVAL nextval = c - '0';
-                    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);
-                    state = parse_before_dot;
-                }
-                else if (c == '-') {
-                    sign      = -1;
-                    state = parse_before_dot;
-                }
-                else if (c == '+')
-                    state = parse_before_dot;
-                else if (isspace((unsigned char)c))
-                    ; /* Do nothing */
-                else
-                    state = parse_end;
-
-                break;
-
-              case parse_before_dot:
-                if (isdigit((unsigned char)c)) {
-                    const UINTVAL nextval = c - '0';
-                    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);
-                }
-                else
-                    state = parse_end;
-                break;
-
-              default:
-                /* Pacify compiler */
+        c = count-- > 0 ? STRING_iter_get_and_advance(interp, s, &iter) : 0;
+        while (c == ' ')
+            c = count-- > 0 ? STRING_iter_get_and_advance(interp, s, &iter) : 0;
+        switch (c) {
+          case '-':
+            sign = -1;
+          case '+':
+            c = count-- > 0 ? STRING_iter_get_and_advance(interp, s, &iter) : 0;
+            break;
+          default:
+            ; /* nothing */
+        }
+        while (c) {
+            const UINTVAL nextval = c - (UINTVAL)'0';
+            if (nextval > 9)
                 break;
-            }
+            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);
+            c = count-- > 0 ? STRING_iter_get_and_advance(interp, s, &iter) : 0;
         }
 
         if (sign == 1 && i > (UINTVAL)PARROT_INTVAL_MAX)
@@ -2065,7 +1966,7 @@
 
     /* Handcrafted FSM to read float value */
     while (state != parse_end && iter.charpos < s->strlen) {
-        const UINTVAL c = STRING_ITER_GET_AND_ADVANCE(interp, s, &iter);
+        const UINTVAL c = STRING_iter_get_and_advance(interp, s, &iter);
         /* Check for overflow */
         if (c > 255)
             break;
@@ -2432,15 +2333,8 @@
     size_t hashval = interp->hash_seed;
 
     if (!STRING_IS_NULL(s)) {
-        if (s->strlen) {
-            if (s->encoding->hash)
-                hashval = ENCODING_HASH(interp, s, hashval);
-            else if (s->charset->compute_hash)
-                hashval = CHARSET_COMPUTE_HASH(interp, s, hashval);
-            else {
-                exit_fatal(1, "String subsystem not properly initialized");
-            }
-        }
+        if (s->strlen)
+            hashval = STRING_hash(interp, s, hashval);
 
         s->hashval = hashval;
     }
@@ -2492,10 +2386,12 @@
         ARGIN_NULLOK(const STRING *src), UINTVAL limit)
 {
     ASSERT_ARGS(Parrot_str_escape_truncate)
-    STRING *result, *hex;
-    UINTVAL i, len, charlen;
-    String_iter iter;
-    unsigned char *dp;
+    STRING      *result;
+    UINTVAL      i, len, charlen;
+    String_iter  iter;
+    char         hex_buf[16];
+    int          hex_len;
+    char        *dp;
 
     if (STRING_IS_NULL(src))
         return STRINGNULL;
@@ -2513,22 +2409,23 @@
 
     /* create ascii result */
     result = Parrot_str_new_init(interp, NULL, charlen,
-            Parrot_fixed_8_encoding_ptr, Parrot_ascii_charset_ptr, 0);
+            Parrot_ascii_encoding_ptr, 0);
 
     /* more work TODO */
     STRING_ITER_INIT(interp, &iter);
-    dp = (unsigned char *)result->strstart;
+    dp = result->strstart;
 
     for (i = 0; len > 0; --len) {
-        UINTVAL c = STRING_ITER_GET_AND_ADVANCE(interp, src, &iter);
+        unsigned c = STRING_iter_get_and_advance(interp, src, &iter);
         if (c < 0x7f) {
             /* process ASCII chars */
             if (i >= charlen - 2) {
                 /* resize - still len codepoints to go */
                 charlen += len * 2 + 16;
+                result->bufused = i;
                 Parrot_gc_reallocate_string_storage(interp, result, charlen);
                 /* start can change */
-                dp = (unsigned char *)result->strstart;
+                dp = result->strstart;
             }
             switch (c) {
               case '\\':
@@ -2570,28 +2467,34 @@
                 break;
             }
             if (c >= 0x20) {
-                dp[i++]         = (unsigned char)c;
-                result->bufused = result->strlen = i;
+                dp[i++] = c;
                 continue;
             }
         }
 
         /* escape by appending either \uhhhh or \x{hh...} */
-        result->bufused = result->strlen = i;
 
         if (c < 0x0100 || c >= 0x10000)
-            hex = Parrot_sprintf_c(interp, "\\x{%x}", c);
+            hex_len = snprintf(hex_buf, 15, "\\x{%x}", c);
         else
-            hex = Parrot_sprintf_c(interp, "\\u%04x", c);
+            hex_len = snprintf(hex_buf, 15, "\\u%04x", c);
 
-        result = Parrot_str_concat(interp, result, hex);
+        if (hex_len < 0)
+            hex_len = 0;
 
-        /* adjust our insert idx */
-        i += hex->strlen;
+        if (i + hex_len > charlen) {
+            /* resize - still len codepoints to go */
+            charlen += len * 2 + 16;
+            result->bufused = i;
+            Parrot_gc_reallocate_string_storage(interp, result, charlen);
+            /* start can change */
+            dp = result->strstart;
+        }
 
-        /* and usable len */
-        charlen = Buffer_buflen(result);
-        dp      = (unsigned char *)result->strstart;
+        mem_sys_memcopy(dp + i, hex_buf, hex_len);
+
+        /* adjust our insert idx */
+        i += hex_len;
 
         PARROT_ASSERT(i <= charlen);
     }
@@ -2623,12 +2526,11 @@
 /*
 
 =item C<STRING * Parrot_str_unescape_string(PARROT_INTERP, const STRING *src,
-const CHARSET *charset, const ENCODING *encoding, UINTVAL flags)>
+const STR_VTABLE *encoding, UINTVAL flags)>
 
 EXPERIMENTAL, see TT #1628
 
-Unescapes the src string returnning a new string with the charset
-and encoding specified.
+Unescapes the src string returnning a new string with the encoding specified.
 
 
 =cut
@@ -2639,8 +2541,7 @@
 PARROT_CANNOT_RETURN_NULL
 STRING *
 Parrot_str_unescape_string(PARROT_INTERP, ARGIN(const STRING *src),
-        ARGIN(const CHARSET *charset),
-        ARGIN(const ENCODING *encoding),
+        ARGIN(const STR_VTABLE *encoding),
         UINTVAL flags)
 {
     ASSERT_ARGS(Parrot_str_unescape_string)
@@ -2654,7 +2555,6 @@
     char digbuf[9];
     int pending;
 
-    result->charset = charset;
     result->encoding = encoding;
     reserved = string_max_bytes(interp, result, srclen);
     Parrot_gc_allocate_string_storage(interp, result, reserved);
@@ -2663,14 +2563,15 @@
     STRING_ITER_INIT(interp, &itersrc);
     STRING_ITER_INIT(interp, &iterdest);
     while (itersrc.bytepos < srclen) {
-        INTVAL c = STRING_ITER_GET_AND_ADVANCE(interp, src, &itersrc);
+        INTVAL c = STRING_iter_get_and_advance(interp, src, &itersrc);
         INTVAL next;
 
         do {
             pending = 0;
             next = c;
             if (c == '\\') {
-                c = STRING_ITER_GET_AND_ADVANCE(interp, src, &itersrc);
+                if (itersrc.bytepos >= srclen) break;
+                c = STRING_iter_get_and_advance(interp, src, &itersrc);
                 switch (c) {
                 /* Common one char sequences */
                 case 'a': next = '\a'; break;
@@ -2683,7 +2584,8 @@
                 case 'e': next = '\x1B'; break;
                 /* Escape character */
                 case 'c':
-                    c = STRING_ITER_GET_AND_ADVANCE(interp, src, &itersrc);
+                    if (itersrc.bytepos >= srclen) break;
+                    c = STRING_iter_get_and_advance(interp, src, &itersrc);
                     /* This assumes ascii-alike encoding */
                     if (c < 'A' || c > 'Z')
                         throw_illegal_escape(interp);
@@ -2691,11 +2593,12 @@
                     break;
                 case 'x':
                     digcount = 0;
-                    c = STRING_ITER_GET_AND_ADVANCE(interp, src, &itersrc);
+                    if (itersrc.bytepos >= srclen) break;
+                    c = STRING_iter_get_and_advance(interp, src, &itersrc);
                     if (c == '{') {
                         /* \x{h..h} 1..8 hex digits */
                         while (itersrc.bytepos < srclen) {
-                            c = STRING_ITER_GET_AND_ADVANCE(interp, src, &itersrc);
+                            c = STRING_iter_get_and_advance(interp, src, &itersrc);
                             if (c == '}')
                                 break;
                             if (!isxdigit(c))
@@ -2719,7 +2622,7 @@
                                 pending = 0;
                                 break;
                             }
-                            c = STRING_ITER_GET_AND_ADVANCE(interp, src, &itersrc);
+                            c = STRING_iter_get_and_advance(interp, src, &itersrc);
                         }
                     }
                     if (digcount == 0)
@@ -2730,7 +2633,8 @@
                 case 'u':
                     /* \uhhhh 4 hex digits */
                     for (digcount = 0; digcount < 4; ++digcount) {
-                        c = STRING_ITER_GET_AND_ADVANCE(interp, src, &itersrc);
+                        if (itersrc.bytepos >= srclen) break;
+                        c = STRING_iter_get_and_advance(interp, src, &itersrc);
                         if (!isxdigit(c))
                             throw_illegal_escape(interp);
                         digbuf[digcount] = c;
@@ -2741,7 +2645,8 @@
                 case 'U':
                     /* \Uhhhhhhhh 8 hex digits */
                     for (digcount = 0; digcount < 8; ++digcount) {
-                        c = STRING_ITER_GET_AND_ADVANCE(interp, src, &itersrc);
+                        if (itersrc.bytepos >= srclen) break;
+                        c = STRING_iter_get_and_advance(interp, src, &itersrc);
                         if (!isxdigit(c))
                             throw_illegal_escape(interp);
                         digbuf[digcount] = c;
@@ -2754,21 +2659,22 @@
                     /* \ooo 1..3 oct digits */
                     digbuf[0] = c;
                     for (digcount = 1; digcount < 3; ++digcount) {
-                        c = STRING_ITER_GET_AND_ADVANCE(interp, src, &itersrc);
+                        if (itersrc.bytepos >= srclen) break;
+                        c = STRING_iter_get_and_advance(interp, src, &itersrc);
                         if (c < '0' || c > '7')
                             break;
                         digbuf[digcount] = c;
                     }
                     digbuf[digcount] = '\0';
                     next = strtol(digbuf, NULL, 8);
-                    if (digcount < 3)
+                    if (itersrc.bytepos < srclen && digcount < 3)
                         pending = 1;
                     break;
                 default:
                     next = c;
                 }
             }
-            STRING_ITER_SET_AND_ADVANCE(interp, result, &iterdest, next);
+            STRING_iter_set_and_advance(interp, result, &iterdest, next);
         } while (pending);
     }
     result->bufused = iterdest.bytepos;
@@ -2803,9 +2709,8 @@
 {
     ASSERT_ARGS(Parrot_str_unescape)
 
-    STRING         *result;
-    const CHARSET  *charset;
-    const ENCODING *encoding = NULL;
+    STRING           *result;
+    const STR_VTABLE *encoding;
 
     /* does the encoding have a character set? */
     const char     *p        = enc_char ? strchr(enc_char, ':') : NULL;
@@ -2824,25 +2729,17 @@
         #define MAX_ENCODING_NAME_ALLOWED 63
         char   buffer[MAX_ENCODING_NAME_ALLOWED + 1];
         size_t l = p - enc_char;
-        charset  = NULL;
 
         if (l < MAX_ENCODING_NAME_ALLOWED) {
             memcpy(buffer, enc_char, l);
             buffer[l] = '\0';
-            encoding  = Parrot_find_encoding(interp, buffer);
         }
-        if (!encoding)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
-                "Can't make '%s' encoding strings", enc_char);
-
-        charset = Parrot_find_charset(interp, p + 1);
-        if (!charset)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
-                "Can't make '%s' charset strings", p + 1);
+        else {
+            buffer[0] = '\0';
+        }
 
-        result   = Parrot_str_new_init(interp, cstring, clength,
-                        encoding, charset, flags);
-        encoding = Parrot_fixed_8_encoding_ptr;
+        result   = string_make(interp, cstring, clength, buffer, flags);
+        encoding = Parrot_ascii_encoding_ptr;
     }
     else {
         result   = string_make(interp, cstring, clength, enc_char, flags);
@@ -2881,9 +2778,9 @@
 
     /* Force validating the string */
     if (encoding != result->encoding)
-        result->strlen = CHARSET_CODEPOINTS(interp, result);
+        result->strlen = STRING_scan(interp, result);
 
-    if (!CHARSET_VALIDATE(interp, result))
+    if (!STRING_validate(interp, result))
         Parrot_ex_throw_from_c_args(interp, NULL,
             EXCEPTION_INVALID_STRING_REPRESENTATION, "Malformed string");
 
@@ -2913,7 +2810,7 @@
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
             "Can't upcase NULL string");
     else {
-        STRING * const res = CHARSET_UPCASE(interp, s);
+        STRING * const res = STRING_upcase(interp, s);
         res->hashval = 0;
         return res;
     }
@@ -2943,7 +2840,7 @@
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
             "Can't downcase NULL string");
     else {
-        STRING * const res = CHARSET_DOWNCASE(interp, s);
+        STRING * const res = STRING_downcase(interp, s);
         res->hashval = 0;
         return res;
     }
@@ -2973,7 +2870,7 @@
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
             "Can't titlecase NULL string");
     else {
-        STRING * const res = CHARSET_TITLECASE(interp, s);
+        STRING * const res = STRING_titlecase(interp, s);
         res->hashval = 0;
         return res;
     }
@@ -3064,7 +2961,7 @@
     if (!Parrot_str_byte_length(interp, s))
         return 0;
 
-    return CHARSET_IS_CCLASS(interp, flags, s, offset);
+    return STRING_is_cclass(interp, flags, s, offset);
 }
 
 
@@ -3091,7 +2988,7 @@
     if (STRING_IS_NULL(s))
         return -1;
 
-    return CHARSET_FIND_CCLASS(interp, flags, s, offset, count);
+    return STRING_find_cclass(interp, flags, s, offset, count);
 }
 
 
@@ -3120,7 +3017,7 @@
     if (STRING_IS_NULL(s))
         return -1;
 
-    return CHARSET_FIND_NOT_CCLASS(interp, flags, s, offset, count);
+    return STRING_find_not_cclass(interp, flags, s, offset, count);
 }
 
 
@@ -3144,21 +3041,8 @@
         INTVAL charset_nr)
 {
     ASSERT_ARGS(Parrot_str_change_charset)
-    const CHARSET *new_charset;
-
-    if (STRING_IS_NULL(src))
-        return STRINGNULL;
-
-    new_charset = Parrot_get_charset(interp, charset_nr);
 
-    if (!new_charset)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_CHARTYPE,
-                "charset #%d not found", (int) charset_nr);
-
-    if (new_charset == src->charset)
-        return src;
-
-    return new_charset->to_charset(interp, src);
+    return Parrot_str_change_encoding(interp, src, charset_nr);
 }
 
 
@@ -3167,8 +3051,7 @@
 =item C<STRING* Parrot_str_change_encoding(PARROT_INTERP, STRING *src, INTVAL
 encoding_nr)>
 
-Converts C<src> to the given charset or encoding and returns the result as a
-new string.
+Converts C<src> to the given encoding and returns the result as a new string.
 
 =cut
 
@@ -3182,7 +3065,7 @@
         INTVAL encoding_nr)
 {
     ASSERT_ARGS(Parrot_str_change_encoding)
-    const ENCODING *new_encoding;
+    const STR_VTABLE *new_encoding;
 
     if (STRING_IS_NULL(src))
         return STRINGNULL;
@@ -3222,9 +3105,9 @@
         return NULL;
 
     if (!src->strlen)
-        return Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
+        return CONST_STRING(interp, "");
 
-    return CHARSET_COMPOSE(interp, src);
+    return STRING_compose(interp, src);
 }
 
 
@@ -3246,107 +3129,39 @@
 Parrot_str_join(PARROT_INTERP, ARGIN_NULLOK(STRING *j), ARGIN(PMC *ar))
 {
     ASSERT_ARGS(Parrot_str_join)
-    STRING  **chunks;
-    STRING   *res;
-    STRING   *s;
-    char     *pos;
-    const int ar_len       = VTABLE_elements(interp, ar);
-    int       total_length = 0;
-    int       transcoded   = 0;
-    int       i;
-
-    if (ar_len == 0)
-        return Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
-
-    if (STRING_IS_NULL(j))
-        j = Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
-
-    chunks = (STRING **)Parrot_gc_allocate_fixed_size_storage(interp,
-        ar_len * sizeof (STRING *));
-
-    for (i = 0; i < ar_len; ++i) {
-        STRING *next = VTABLE_get_string_keyed_int(interp, ar, i);
 
-        if (STRING_IS_NULL(next)) {
-            chunks[i] = STRINGNULL;
-            continue;
-        }
-
-        if (next->encoding != j->encoding) {
-            const ENCODING *e = j->encoding;
-
-            string_rep_compatible(interp, next, j, &e);
-            if (e == Parrot_fixed_8_encoding_ptr)
-                e = Parrot_utf8_encoding_ptr;
-            j           = e->to_encoding(interp, j);
-            transcoded  = 1;
-        }
-
-        chunks[i]     = next;
-        total_length += next->bufused;
+    if (STRING_IS_NULL(j)) {
+        PMC *sb = Parrot_pmc_new_init(interp, enum_class_StringBuilder, ar);
+        return VTABLE_get_string(interp, sb);
     }
-
-    /* with the right charset, transcode any strings if necessary */
-    if (transcoded) {
-        const CHARSET  *c = j->charset;
-        const ENCODING *e = j->encoding;
-
-        for (i = 0; i < ar_len; ++i) {
-            STRING *s = chunks[i];
-
-            if (STRING_IS_NULL(s))
-                continue;
-
-            if (s->encoding != e || s->charset != c) {
-                STRING *new_s = e->to_encoding(interp, s);
-                chunks[i]     = new_s;
-                total_length += new_s->bufused - s->bufused;
-            }
+    else {
+        PMC      *sb;
+        STRING   *first;
+        const int count = VTABLE_elements(interp, ar);
+        INTVAL    length, j_length;
+        int       i;
+
+        if (count == 0)
+            return Parrot_str_new_noinit(interp, 0);
+
+        first    = VTABLE_get_string_keyed_int(interp, ar, 0);
+        length   = Parrot_str_byte_length(interp, first);
+        j_length = Parrot_str_byte_length(interp, j);
+
+        /* it's an approximiation, but it doesn't hurt */
+        sb       = Parrot_pmc_new_init_int(interp, enum_class_StringBuilder,
+                    (length + j_length) * count);
+
+        VTABLE_push_string(interp, sb, first);
+
+        for (i = 1; i < count; ++i) {
+            VTABLE_push_string(interp, sb, j);
+            VTABLE_push_string(interp, sb,
+                VTABLE_get_string_keyed_int(interp, ar, i));
         }
-    }
-
-    /* add the length of the separator, now that it's transcoded */
-    total_length += j->bufused * ar_len;
-
-    res = Parrot_gc_new_string_header(interp, 0);
-    Parrot_gc_allocate_string_storage(interp, res, total_length);
 
-    res->charset  = j->charset;
-    res->encoding = j->encoding;
-
-    /* Iterate over chunks and append it to res */
-    pos = res->strstart;
-
-    /* Copy first chunk */
-    s = chunks[0];
-    if (!STRING_IS_NULL(s)) {
-        mem_sys_memcopy(pos, s->strstart, s->bufused);
-        pos += s->bufused;
+        return VTABLE_get_string(interp, sb);
     }
-
-    for (i = 1; i < ar_len; ++i) {
-        STRING *next = chunks[i];
-
-        if (STRING_IS_NULL(next))
-            continue;
-
-        mem_sys_memcopy(pos, j->strstart, j->bufused);
-        pos += j->bufused;
-
-        mem_sys_memcopy(pos, next->strstart, next->bufused);
-        pos += next->bufused;
-
-        /* We can consume all buffer and pos will be next-after-end of buffer */
-        PARROT_ASSERT(pos <= res->strstart + Buffer_buflen(res) + 1);
-    }
-
-    res->bufused  = pos - res->strstart;
-    res->strlen = CHARSET_CODEPOINTS(interp, res);
-
-    Parrot_gc_free_fixed_size_storage(interp, ar_len * sizeof (STRING *),
-        chunks);
-
-    return res;
 }
 
 
@@ -3394,7 +3209,7 @@
         do {
             const String_iter old_iter = iter;
 
-            STRING_ITER_SKIP(interp, str, &iter, 1);
+            STRING_iter_skip(interp, str, &iter, 1);
             tstr = Parrot_str_iter_substr(interp, str, &old_iter, &iter);
             VTABLE_set_string_keyed_int(interp, res, old_iter.charpos, tstr);
         } while (iter.charpos < slen);
@@ -3466,7 +3281,8 @@
     if (minus)
         *--p = '-';
 
-    return string_make(interp, p, (UINTVAL)(tail - p), NULL, 0);
+    return Parrot_str_new_init(interp, p, (UINTVAL)(tail - p),
+            Parrot_default_encoding_ptr, 0);
 }
 
 

Deleted: branches/html_cleanup/src/string/charset.c
==============================================================================
--- branches/html_cleanup/src/string/charset.c	Wed Sep 22 03:35:47 2010	(r49231)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,640 +0,0 @@
-/*
-Copyright (C) 2004-2009, Parrot Foundation.
-$Id$
-
-=head1 NAME
-
-src/string/charset.c - global charset functions
-
-=head1 DESCRIPTION
-
-These are Parrot's generic charset handling functions
-
-=over 4
-
-=cut
-
-*/
-
-#define PARROT_NO_EXTERN_CHARSET_PTRS
-#include "parrot/parrot.h"
-
-#include "encoding/fixed_8.h"
-#include "encoding/utf8.h"
-#include "encoding/utf16.h"
-#include "encoding/ucs2.h"
-#include "encoding/ucs4.h"
-
-#include "charset/ascii.h"
-#include "charset/binary.h"
-#include "charset/iso-8859-1.h"
-#include "charset/unicode.h"
-
-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(const CHARSET *to);
-    NOTNULL(charset_converter_t func);
-} To_converter;
-
-typedef struct One_charset {
-    NOTNULL(CHARSET *charset);
-    STRING          *name;
-    To_converter    *to_converters;
-    int              n_converters;
-} One_charset;
-
-typedef struct All_charsets {
-    One_charset *set;
-    int          n_charsets;
-} All_charsets;
-
-static All_charsets *all_charsets;
-
-/* HEADERIZER HFILE: include/parrot/charset.h */
-
-/* HEADERIZER BEGIN: static */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-static void Parrot_str_internal_register_charset_names(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-static INTVAL register_charset(PARROT_INTERP,
-    ARGIN(const char *charsetname),
-    ARGIN(CHARSET *charset))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-static void register_static_converters(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-#define ASSERT_ARGS_Parrot_str_internal_register_charset_names \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_register_charset __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(charsetname) \
-    , PARROT_ASSERT_ARG(charset))
-#define ASSERT_ARGS_register_static_converters __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: static */
-
-/*
-
-=item C<CHARSET * Parrot_new_charset(PARROT_INTERP)>
-
-Allocates a new C<CHARSET> structure from the system.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-PARROT_MALLOC
-CHARSET *
-Parrot_new_charset(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_new_charset)
-    return mem_gc_allocate_zeroed_typed(interp, CHARSET);
-}
-
-/*
-
-=item C<void Parrot_charsets_encodings_deinit(PARROT_INTERP)>
-
-Deinitializes (unloads) the charset system. Frees all charsets and the array
-that holds the charsets back to the system.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_charsets_encodings_deinit(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_charsets_encodings_deinit)
-    int i;
-    const int n = all_charsets->n_charsets;
-
-    for (i = 0; i < n; ++i) {
-        if (all_charsets->set[i].n_converters)
-            mem_gc_free(interp, all_charsets->set[i].to_converters);
-        mem_gc_free(interp, all_charsets->set[i].charset);
-    }
-    mem_gc_free(interp, all_charsets->set);
-    mem_gc_free(interp, all_charsets);
-    all_charsets = NULL;
-    parrot_deinit_encodings(interp);
-}
-
-/*
-
-=item C<const CHARSET * Parrot_find_charset(PARROT_INTERP, const char
-*charsetname)>
-
-Searches through the list of charsets for the charset given by C<charsetname>.
-Returns the charset if it is found, NULL otherwise.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_PURE_FUNCTION
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-const CHARSET *
-Parrot_find_charset(SHIM_INTERP, ARGIN(const char *charsetname))
-{
-    ASSERT_ARGS(Parrot_find_charset)
-    int i;
-    const int n = all_charsets->n_charsets;
-
-    for (i = 0; i < n; ++i) {
-        if (STREQ(all_charsets->set[i].charset->name, charsetname))
-            return all_charsets->set[i].charset;
-    }
-
-    return NULL;
-}
-
-/*
-
-=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).
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-const CHARSET *
-Parrot_load_charset(PARROT_INTERP, ARGIN(const char *charsetname))
-{
-    ASSERT_ARGS(Parrot_load_charset)
-    UNUSED(charsetname);
-
-    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
-        "Can't load charsets yet");
-}
-
-/*
-
-=item C<INTVAL Parrot_charset_number(PARROT_INTERP, const STRING *charsetname)>
-
-Return the number of the charset or -1 if not found.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-INTVAL
-Parrot_charset_number(PARROT_INTERP, ARGIN(const STRING *charsetname))
-{
-    ASSERT_ARGS(Parrot_charset_number)
-    int i;
-    const int n = all_charsets->n_charsets;
-
-    for (i = 0; i < n; ++i) {
-        if (Parrot_str_equal(interp, all_charsets->set[i].name, charsetname))
-            return i;
-    }
-    return -1;
-}
-
-/*
-
-=item C<INTVAL Parrot_charset_number_of_str(PARROT_INTERP, const STRING *src)>
-
-Return the number of the charset of the given string or -1 if not found.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_PURE_FUNCTION
-PARROT_WARN_UNUSED_RESULT
-INTVAL
-Parrot_charset_number_of_str(SHIM_INTERP, ARGIN(const STRING *src))
-{
-    ASSERT_ARGS(Parrot_charset_number_of_str)
-    int i;
-    const int n = all_charsets->n_charsets;
-
-    for (i = 0; i < n; ++i) {
-        if (src->charset == all_charsets->set[i].charset)
-            return i;
-    }
-    return -1;
-}
-
-/*
-
-=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>.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_PURE_FUNCTION
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-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 STRINGNULL;
-    return all_charsets->set[number_of_charset].name;
-}
-
-/*
-
-=item C<const CHARSET * Parrot_get_charset(PARROT_INTERP, INTVAL
-number_of_charset)>
-
-Returns the charset given by the INTVAL index C<number_of_charset>.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_PURE_FUNCTION
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-const CHARSET *
-Parrot_get_charset(SHIM_INTERP, INTVAL number_of_charset)
-{
-    ASSERT_ARGS(Parrot_get_charset)
-    if (number_of_charset < 0 || number_of_charset >= all_charsets->n_charsets)
-        return NULL;
-    return all_charsets->set[number_of_charset].charset;
-}
-
-/*
-
-=item C<const char * Parrot_charset_c_name(PARROT_INTERP, INTVAL
-number_of_charset)>
-
-Returns a NULL-terminated C string with the name of the charset given by
-INTVAL index C<number_of_charset>.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_PURE_FUNCTION
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-const char *
-Parrot_charset_c_name(SHIM_INTERP, INTVAL number_of_charset)
-{
-    ASSERT_ARGS(Parrot_charset_c_name)
-    if (number_of_charset < 0 || number_of_charset >= all_charsets->n_charsets)
-        return NULL;
-    return all_charsets->set[number_of_charset].charset->name;
-}
-
-/*
-
-=item C<static INTVAL register_charset(PARROT_INTERP, const char *charsetname,
-CHARSET *charset)>
-
-Adds a new charset C<charset> with name <charsetname> to the list of
-all charsets. Returns 0 and does nothing if a charset with that name
-already exists. Returns 1 otherwise.
-
-=cut
-
-*/
-
-static INTVAL
-register_charset(PARROT_INTERP, ARGIN(const char *charsetname),
-        ARGIN(CHARSET *charset))
-{
-    ASSERT_ARGS(register_charset)
-    int i;
-    const int n = all_charsets->n_charsets;
-
-    for (i = 0; i < n; ++i) {
-        if (STREQ(all_charsets->set[i].charset->name, charsetname))
-            return 0;
-    }
-    /*
-     * TODO
-     * this needs either a LOCK or we just forbid dynamic
-     * loading of charsets from inside threads
-     */
-    if (!n)
-        all_charsets->set = mem_gc_allocate_zeroed_typed(interp, One_charset);
-    else
-        all_charsets->set = mem_gc_realloc_n_typed_zeroed(interp,
-                all_charsets->set, n + 1, n, One_charset);
-
-    ++all_charsets->n_charsets;
-    all_charsets->set[n].charset      = charset;
-    all_charsets->set[n].n_converters = 0;
-
-    return 1;
-}
-
-/*
-
-=item C<static void Parrot_str_internal_register_charset_names(PARROT_INTERP)>
-
-Helper function for initializing characterset names. We can't create the
-STRING names until the default encodings and charsets are already initted,
-so the name generation is split into a second init stage.
-
-=cut
-
-*/
-
-static void
-Parrot_str_internal_register_charset_names(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_str_internal_register_charset_names)
-    int n;
-    for (n = 0; n < all_charsets->n_charsets; ++n)
-        all_charsets->set[n].name =
-            Parrot_str_new_constant(interp, all_charsets->set[n].charset->name);
-}
-
-/*
-
-=item C<static void register_static_converters(PARROT_INTERP)>
-
-Registers several standard converters between common charsets, including:
-
-    ISO 8859_1 -> ascii
-    ISO 8859_1 -> bin
-    ascii -> bin
-    ascii -> ISO 8859_1
-
-=cut
-
-*/
-
-static void
-register_static_converters(PARROT_INTERP)
-{
-    ASSERT_ARGS(register_static_converters)
-    Parrot_register_charset_converter(interp,
-            Parrot_iso_8859_1_charset_ptr, Parrot_ascii_charset_ptr,
-            charset_cvt_iso_8859_1_to_ascii);
-    Parrot_register_charset_converter(interp,
-            Parrot_iso_8859_1_charset_ptr, Parrot_binary_charset_ptr,
-            charset_cvt_ascii_to_binary);
-
-    Parrot_register_charset_converter(interp,
-            Parrot_ascii_charset_ptr, Parrot_binary_charset_ptr,
-            charset_cvt_ascii_to_binary);
-    Parrot_register_charset_converter(interp,
-            Parrot_ascii_charset_ptr, Parrot_iso_8859_1_charset_ptr,
-            charset_cvt_ascii_to_iso_8859_1);
-}
-
-/*
-
-=item C<INTVAL Parrot_register_charset(PARROT_INTERP, const char *charsetname,
-CHARSET *charset)>
-
-Register a new charset C<charset> with name C<charsetname>. Charset may only
-be one of the 4 following names:
-
-    binary
-    iso-8859-1
-    unicode
-    ascii
-
-Attempts to register other charsets are ignored. Returns 0 if the registration
-failed, for any reason.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-INTVAL
-Parrot_register_charset(PARROT_INTERP, ARGIN(const char *charsetname),
-        ARGIN(CHARSET *charset))
-{
-    ASSERT_ARGS(Parrot_register_charset)
-    if (!all_charsets) {
-        all_charsets             = mem_gc_allocate_zeroed_typed(interp, All_charsets);
-        all_charsets->set        = NULL;
-        all_charsets->n_charsets = 0;
-    }
-
-    if (STREQ("binary", charsetname)) {
-        Parrot_binary_charset_ptr = charset;
-        return register_charset(interp, charsetname, charset);
-    }
-
-    if (STREQ("iso-8859-1", charsetname)) {
-        Parrot_iso_8859_1_charset_ptr = charset;
-        return register_charset(interp, charsetname, charset);
-    }
-
-    if (STREQ("unicode", charsetname)) {
-        Parrot_unicode_charset_ptr = charset;
-        return register_charset(interp, charsetname, charset);
-    }
-
-    if (STREQ("ascii", charsetname)) {
-        if (!Parrot_default_charset_ptr)
-            Parrot_default_charset_ptr = charset;
-
-        Parrot_ascii_charset_ptr = charset;
-        return register_charset(interp, charsetname, charset);
-    }
-
-    return 0;
-}
-
-/*
-
-=item C<void Parrot_charsets_encodings_init(PARROT_INTERP)>
-
-Creates the initial charsets and encodings, and registers the initial
-charset converters.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_charsets_encodings_init(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_charsets_encodings_init)
-    /* the order is crucial here:
-     * 1) encodings, default = fixed_8
-     * 2) charsets   default = ascii */
-    Parrot_encoding_fixed_8_init(interp);
-    Parrot_encoding_utf8_init(interp);
-    Parrot_encoding_ucs2_init(interp);
-    Parrot_encoding_utf16_init(interp);
-    Parrot_encoding_ucs4_init(interp);
-
-    Parrot_charset_ascii_init(interp);
-    Parrot_charset_iso_8859_1_init(interp);
-    Parrot_charset_binary_init(interp);
-    Parrot_charset_unicode_init(interp);
-
-    /* Now that the plugins are registered, we can create STRING
-     * names for them.  */
-    Parrot_str_internal_register_encoding_names(interp);
-    Parrot_str_internal_register_charset_names(interp);
-
-    /* now install charset converters */
-    register_static_converters(interp);
-}
-
-/*
-
-=item C<INTVAL Parrot_make_default_charset(PARROT_INTERP, const char
-*charsetname, const CHARSET *charset)>
-
-Sets the current default charset to C<charset> with name C<charsetname>.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-INTVAL
-Parrot_make_default_charset(SHIM_INTERP, SHIM(const char *charsetname),
-        ARGIN(const CHARSET *charset))
-{
-    ASSERT_ARGS(Parrot_make_default_charset)
-    Parrot_default_charset_ptr = charset;
-    return 1;
-}
-
-/*
-
-=item C<const CHARSET * Parrot_default_charset(PARROT_INTERP)>
-
-Returns the default charset.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_PURE_FUNCTION
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-const CHARSET *
-Parrot_default_charset(SHIM_INTERP)
-{
-    ASSERT_ARGS(Parrot_default_charset)
-    return Parrot_default_charset_ptr;
-}
-
-/*
-
-=item C<charset_converter_t Parrot_find_charset_converter(PARROT_INTERP, const
-CHARSET *lhs, const CHARSET *rhs)>
-
-Finds a converter from charset C<lhs> to charset C<rhs>.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_PURE_FUNCTION
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-charset_converter_t
-Parrot_find_charset_converter(SHIM_INTERP,
-        ARGIN(const CHARSET *lhs), ARGIN(const CHARSET *rhs))
-{
-    ASSERT_ARGS(Parrot_find_charset_converter)
-    int i;
-    const int n = all_charsets->n_charsets;
-
-    for (i = 0; i < n; ++i) {
-        if (lhs == all_charsets->set[i].charset) {
-            const One_charset * const left = all_charsets->set + i;
-            const int nc = left->n_converters;
-            int j;
-
-            for (j = 0; j < nc; ++j) {
-                if (left->to_converters[j].to == rhs)
-                    return left->to_converters[j].func;
-            }
-        }
-    }
-    return NULL;
-}
-
-/*
-
-=item C<void Parrot_register_charset_converter(PARROT_INTERP, const CHARSET
-*lhs, const CHARSET *rhs, charset_converter_t func)>
-
-Registers a converter C<func> from charset C<lhs> to C<rhs>.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_register_charset_converter(PARROT_INTERP,
-        ARGIN(const CHARSET *lhs), ARGIN(const CHARSET *rhs),
-        ARGIN(charset_converter_t func))
-{
-    ASSERT_ARGS(Parrot_register_charset_converter)
-    int i;
-    const int n = all_charsets->n_charsets;
-
-    for (i = 0; i < n; ++i) {
-        if (lhs == all_charsets->set[i].charset) {
-            One_charset * const left = all_charsets->set + i;
-            const int nc = left->n_converters++;
-
-            if (nc) {
-                left->to_converters = mem_gc_realloc_n_typed_zeroed(interp,
-                        left->to_converters, nc + 1, nc, To_converter);
-            }
-            else
-                left->to_converters = mem_gc_allocate_zeroed_typed(interp, To_converter);
-            left->to_converters[nc].to = rhs;
-            left->to_converters[nc].func = func;
-        }
-    }
-}
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Deleted: branches/html_cleanup/src/string/charset/ascii.h
==============================================================================
--- branches/html_cleanup/src/string/charset/ascii.h	Wed Sep 22 03:35:47 2010	(r49231)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,128 +0,0 @@
-/* ascii.h
- *  Copyright (C) 2004-2007, Parrot Foundation.
- *  SVN Info
- *     $Id$
- *  Overview:
- *     This is the header for the ascii charset functions
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
- */
-
-#ifndef PARROT_CHARSET_ASCII_H_GUARD
-#define PARROT_CHARSET_ASCII_H_GUARD
-
-/*
- * common functions for ascii-ish charsets
- */
-
-/* HEADERIZER BEGIN: src/string/charset/ascii.c */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-PARROT_WARN_UNUSED_RESULT
-INTVAL ascii_compare(PARROT_INTERP,
-    ARGIN(const STRING *lhs),
-    ARGIN(const STRING *rhs))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-PARROT_PURE_FUNCTION
-size_t ascii_compute_hash(SHIM_INTERP,
-    ARGIN(const STRING *src),
-    size_t seed)
-        __attribute__nonnull__(2);
-
-PARROT_WARN_UNUSED_RESULT
-INTVAL ascii_cs_index(PARROT_INTERP,
-    ARGIN(const STRING *src),
-    ARGIN(const STRING *search_string),
-    UINTVAL offset)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-PARROT_WARN_UNUSED_RESULT
-INTVAL ascii_cs_rindex(PARROT_INTERP,
-    ARGIN(const STRING *src),
-    ARGIN(const STRING *search_string),
-    UINTVAL offset)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-STRING * ascii_get_graphemes(PARROT_INTERP,
-    ARGIN(const STRING *src),
-    UINTVAL offset,
-    UINTVAL count)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-STRING * charset_cvt_ascii_to_binary(PARROT_INTERP,
-    ARGIN(const STRING *src))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-STRING * charset_cvt_ascii_to_iso_8859_1(PARROT_INTERP,
-    ARGIN(const STRING *src))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_WARN_UNUSED_RESULT
-INTVAL mixed_cs_index(PARROT_INTERP,
-    ARGIN(const STRING *src),
-    ARGIN(const STRING *search),
-    UINTVAL offs)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-void Parrot_charset_ascii_init(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-#define ASSERT_ARGS_ascii_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(lhs) \
-    , PARROT_ASSERT_ARG(rhs))
-#define ASSERT_ARGS_ascii_compute_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_ascii_cs_index __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src) \
-    , PARROT_ASSERT_ARG(search_string))
-#define ASSERT_ARGS_ascii_cs_rindex __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src) \
-    , PARROT_ASSERT_ARG(search_string))
-#define ASSERT_ARGS_ascii_get_graphemes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_charset_cvt_ascii_to_binary __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_charset_cvt_ascii_to_iso_8859_1 \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_mixed_cs_index __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src) \
-    , PARROT_ASSERT_ARG(search))
-#define ASSERT_ARGS_Parrot_charset_ascii_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: src/string/charset/ascii.c */
-
-#endif /* PARROT_CHARSET_ASCII_H_GUARD */
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Deleted: branches/html_cleanup/src/string/charset/binary.h
==============================================================================
--- branches/html_cleanup/src/string/charset/binary.h	Wed Sep 22 03:35:47 2010	(r49231)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,34 +0,0 @@
-/* binary.h
- *  Copyright (C) 2004-2007, Parrot Foundation.
- *  SVN Info
- *     $Id$
- *  Overview:
- *     This is the header for the binary charset functions
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
- */
-
-#ifndef PARROT_CHARSET_BINARY_H_GUARD
-#define PARROT_CHARSET_BINARY_H_GUARD
-
-/* HEADERIZER BEGIN: src/string/charset/binary.c */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-void Parrot_charset_binary_init(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-#define ASSERT_ARGS_Parrot_charset_binary_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: src/string/charset/binary.c */
-
-#endif /* PARROT_CHARSET_BINARY_H_GUARD */
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Deleted: branches/html_cleanup/src/string/charset/iso-8859-1.h
==============================================================================
--- branches/html_cleanup/src/string/charset/iso-8859-1.h	Wed Sep 22 03:35:47 2010	(r49231)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,46 +0,0 @@
-/* iso_8859_1.h
- *  Copyright (C) 2004-2007, Parrot Foundation.
- *  SVN Info
- *     $Id$
- *  Overview:
- *     This is the header for the iso_8859-1 charset functions
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
- */
-
-#ifndef PARROT_CHARSET_ISO_8859_1_H_GUARD
-#define PARROT_CHARSET_ISO_8859_1_H_GUARD
-
-/* HEADERIZER BEGIN: src/string/charset/iso-8859-1.c */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-STRING * charset_cvt_iso_8859_1_to_ascii(PARROT_INTERP,
-    ARGIN(const STRING *src))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-void Parrot_charset_iso_8859_1_init(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-#define ASSERT_ARGS_charset_cvt_iso_8859_1_to_ascii \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_Parrot_charset_iso_8859_1_init \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: src/string/charset/iso-8859-1.c */
-
-#endif /* PARROT_CHARSET_ISO_8859_1_H_GUARD */
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Deleted: branches/html_cleanup/src/string/charset/tables.c
==============================================================================
--- branches/html_cleanup/src/string/charset/tables.c	Wed Sep 22 03:35:47 2010	(r49231)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,93 +0,0 @@
-/* $Id$
- * Copyright (C) 2005-2007, Parrot Foundation.
- *
- * DO NOT EDIT THIS FILE DIRECTLY!
- * please update the tools/dev/gen_charset_tables.pl script instead.
- *
- * Created by gen_charset_tables.pl 19534 2007-07-02 02:12:08Z petdance
- *  Overview:
- *     This file contains various charset tables.
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
- */
-
-/* HEADERIZER HFILE: none */
-
-
-#include "tables.h"
-const INTVAL Parrot_iso_8859_1_typetable[256] = {
-0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, /* 0-7 */
-0x0200, 0x0320, 0x1220, 0x0220, 0x1220, 0x1220, 0x0200, 0x0200, /* 8-15 */
-0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, /* 16-23 */
-0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, /* 24-31 */
-0x0160, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, /* 32-39 */
-0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, /* 40-47 */
-0x28d8, 0x28d8, 0x28d8, 0x28d8, 0x28d8, 0x28d8, 0x28d8, 0x28d8, /* 48-55 */
-0x28d8, 0x28d8, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, /* 56-63 */
-0x04c0, 0x28d5, 0x28d5, 0x28d5, 0x28d5, 0x28d5, 0x28d5, 0x28c5, /* 64-71 */
-0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, /* 72-79 */
-0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, /* 80-87 */
-0x28c5, 0x28c5, 0x28c5, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x24c0, /* 88-95 */
-0x04c0, 0x28d6, 0x28d6, 0x28d6, 0x28d6, 0x28d6, 0x28d6, 0x28c6, /* 96-103 */
-0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, /* 104-111 */
-0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, /* 112-119 */
-0x28c6, 0x28c6, 0x28c6, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x0200, /* 120-127 */
-0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x1220, 0x0200, 0x0200, /* 128-135 */
-0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, /* 136-143 */
-0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, /* 144-151 */
-0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, /* 152-159 */
-0x04e0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, /* 160-167 */
-0x04c0, 0x04c0, 0x28c4, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, /* 168-175 */
-0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x28c6, 0x04c0, 0x04c0, /* 176-183 */
-0x04c0, 0x04c0, 0x28c4, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, /* 184-191 */
-0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, /* 192-199 */
-0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, /* 200-207 */
-0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x04c0, /* 208-215 */
-0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c6, /* 216-223 */
-0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, /* 224-231 */
-0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, /* 232-239 */
-0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x04c0, /* 240-247 */
-0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, /* 248-255 */
-};
-const INTVAL Parrot_ascii_typetable[256] = {
-0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, /* 0-7 */
-0x0200, 0x0320, 0x1220, 0x0220, 0x1220, 0x1220, 0x0200, 0x0200, /* 8-15 */
-0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, /* 16-23 */
-0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, /* 24-31 */
-0x0160, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, /* 32-39 */
-0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, /* 40-47 */
-0x28d8, 0x28d8, 0x28d8, 0x28d8, 0x28d8, 0x28d8, 0x28d8, 0x28d8, /* 48-55 */
-0x28d8, 0x28d8, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, /* 56-63 */
-0x04c0, 0x28d5, 0x28d5, 0x28d5, 0x28d5, 0x28d5, 0x28d5, 0x28c5, /* 64-71 */
-0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, /* 72-79 */
-0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, /* 80-87 */
-0x28c5, 0x28c5, 0x28c5, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x24c0, /* 88-95 */
-0x04c0, 0x28d6, 0x28d6, 0x28d6, 0x28d6, 0x28d6, 0x28d6, 0x28c6, /* 96-103 */
-0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, /* 104-111 */
-0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, /* 112-119 */
-0x28c6, 0x28c6, 0x28c6, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x0200, /* 120-127 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1020, 0x0000, 0x0000, /* 128-135 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 136-143 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 144-151 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 152-159 */
-0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 160-167 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 168-175 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 176-183 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 184-191 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 192-199 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 200-207 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 208-215 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 216-223 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 224-231 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 232-239 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 240-247 */
-0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 248-255 */
-};
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Deleted: branches/html_cleanup/src/string/charset/tables.h
==============================================================================
--- branches/html_cleanup/src/string/charset/tables.h	Wed Sep 22 03:35:47 2010	(r49231)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,36 +0,0 @@
-/* $Id$
- * Copyright (C) 2005-2007, Parrot Foundation.
- *
- * DO NOT EDIT THIS FILE DIRECTLY!
- * please update the tools/dev/gen_charset_tables.pl script instead.
- *
- * Created by gen_charset_tables.pl 19534 2007-07-02 02:12:08Z petdance
- *  Overview:
- *     This file contains various charset tables.
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
- */
-
-/* HEADERIZER HFILE: none */
-
-
-#ifndef PARROT_CHARSET_TABLES_H_GUARD
-#define PARROT_CHARSET_TABLES_H_GUARD
-#include "parrot/cclass.h"
-#include "parrot/parrot.h"
-#define WHITESPACE  enum_cclass_whitespace
-#define WORDCHAR    enum_cclass_word
-#define PUNCTUATION enum_cclass_punctuation
-#define DIGIT       enum_cclass_numeric
-extern const INTVAL Parrot_iso_8859_1_typetable[256];
-extern const INTVAL Parrot_ascii_typetable[256];
-#endif /* PARROT_CHARSET_TABLES_H_GUARD */
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */
-

Deleted: branches/html_cleanup/src/string/charset/unicode.h
==============================================================================
--- branches/html_cleanup/src/string/charset/unicode.h	Wed Sep 22 03:35:47 2010	(r49231)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,40 +0,0 @@
-/* unicode.h
- *  Copyright (C) 2005-2007, Parrot Foundation.
- *  SVN Info
- *     $Id$
- *  Overview:
- *     This is the header for the unicode charset functions
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
- */
-
-#ifndef PARROT_CHARSET_UNICODE_H_GUARD
-#define PARROT_CHARSET_UNICODE_H_GUARD
-
-/*
- * init function
- */
-
-
-/* HEADERIZER BEGIN: src/string/charset/unicode.c */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-void Parrot_charset_unicode_init(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-#define ASSERT_ARGS_Parrot_charset_unicode_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: src/string/charset/unicode.c */
-
-
-#endif /* PARROT_CHARSET_UNICODE_H_GUARD */
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/html_cleanup/src/string/encoding.c
==============================================================================
--- branches/html_cleanup/src/string/encoding.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/string/encoding.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -16,50 +16,28 @@
 
 */
 
-#define PARROT_NO_EXTERN_ENCODING_PTRS
-#include "parrot/parrot.h"
+#include "parrot/encoding.h"
+
+STR_VTABLE *Parrot_default_encoding_ptr = NULL;
+
+static STR_VTABLE **encodings;
+static int          n_encodings;
+/* for backwards compatibility */
+static STRING      *unicode_str;
+static STRING      *fixed_8_str;
 
 /* HEADERIZER HFILE: include/parrot/encoding.h */
 
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static INTVAL register_encoding(PARROT_INTERP,
-    ARGIN(const char *encodingname),
-    ARGIN(ENCODING *encoding))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-#define ASSERT_ARGS_register_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(encodingname) \
-    , PARROT_ASSERT_ARG(encoding))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
-ENCODING *Parrot_default_encoding_ptr = NULL;
-ENCODING *Parrot_fixed_8_encoding_ptr = NULL;
-ENCODING *Parrot_utf8_encoding_ptr    = NULL;
-ENCODING *Parrot_ucs2_encoding_ptr    = NULL;
-ENCODING *Parrot_utf16_encoding_ptr   = NULL;
-ENCODING *Parrot_ucs4_encoding_ptr    = NULL;
-
-typedef struct One_encoding {
-    NOTNULL(ENCODING *encoding);
-    STRING  *name;
-} One_encoding;
-
-typedef struct All_encodings {
-    int n_encodings;
-    One_encoding *enc;
-} All_encodings;
-
-static All_encodings *all_encodings;
 
 /*
 
-=item C<void parrot_deinit_encodings(PARROT_INTERP)>
+=item C<void Parrot_deinit_encodings(PARROT_INTERP)>
 
 Deinitialize encodings and free all memory used by them.
 
@@ -68,25 +46,20 @@
 */
 
 void
-parrot_deinit_encodings(PARROT_INTERP)
+Parrot_deinit_encodings(PARROT_INTERP)
 {
-    ASSERT_ARGS(parrot_deinit_encodings)
-    const int n = all_encodings->n_encodings;
-    int i;
+    ASSERT_ARGS(Parrot_deinit_encodings)
 
-    for (i = 0; i < n; ++i) {
-        mem_gc_free(interp, all_encodings->enc[i].encoding);
-    }
-    mem_gc_free(interp, all_encodings->enc);
-    mem_gc_free(interp, all_encodings);
-    all_encodings = NULL;
+    mem_gc_free(interp, encodings);
+    encodings   = NULL;
+    n_encodings = 0;
 }
 
 /*
 
-=item C<ENCODING * Parrot_new_encoding(PARROT_INTERP)>
+=item C<STR_VTABLE * Parrot_new_encoding(PARROT_INTERP)>
 
-Allocates the memory for a new C<ENCODING> from the system.
+Allocates the memory for a new string vtable from the system.
 
 =cut
 
@@ -95,16 +68,16 @@
 PARROT_EXPORT
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
-ENCODING *
+STR_VTABLE *
 Parrot_new_encoding(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_new_encoding)
-    return mem_gc_allocate_typed(interp, ENCODING);
+    return mem_gc_allocate_typed(interp, STR_VTABLE);
 }
 
 /*
 
-=item C<const ENCODING * Parrot_find_encoding(PARROT_INTERP, const char
+=item C<const STR_VTABLE * Parrot_find_encoding(PARROT_INTERP, const char
 *encodingname)>
 
 Finds an encoding with the name C<encodingname>. Returns the encoding
@@ -118,22 +91,27 @@
 PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
-const ENCODING *
+const STR_VTABLE *
 Parrot_find_encoding(SHIM_INTERP, ARGIN(const char *encodingname))
 {
     ASSERT_ARGS(Parrot_find_encoding)
-    const int n = all_encodings->n_encodings;
+    const int n = n_encodings;
     int i;
 
     for (i = 0; i < n; ++i)
-        if (STREQ(all_encodings->enc[i].encoding->name, encodingname))
-            return all_encodings->enc[i].encoding;
+        if (STREQ(encodings[i]->name, encodingname))
+            return encodings[i];
+
+    /* backwards compatibility */
+    if (strcmp(encodingname, "unicode") == 0)
+        return Parrot_utf8_encoding_ptr;
+
     return NULL;
 }
 
 /*
 
-=item C<const ENCODING * Parrot_load_encoding(PARROT_INTERP, const char
+=item C<const STR_VTABLE * Parrot_load_encoding(PARROT_INTERP, const char
 *encodingname)>
 
 Loads an encoding. Currently throws an exception because we cannot load
@@ -154,7 +132,7 @@
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
 PARROT_CANNOT_RETURN_NULL
-const ENCODING *
+const STR_VTABLE *
 Parrot_load_encoding(PARROT_INTERP, ARGIN(const char *encodingname))
 {
     ASSERT_ARGS(Parrot_load_encoding)
@@ -181,13 +159,28 @@
 Parrot_encoding_number(PARROT_INTERP, ARGIN(const STRING *encodingname))
 {
     ASSERT_ARGS(Parrot_encoding_number)
-    const int n = all_encodings->n_encodings;
+    const int n = n_encodings;
     int i;
 
     for (i = 0; i < n; ++i) {
-        if (Parrot_str_equal(interp, all_encodings->enc[i].name, encodingname))
+        if (Parrot_str_equal(interp, encodings[i]->name_str, encodingname))
             return i;
     }
+
+    /* backwards compatibility */
+    if (Parrot_str_equal(interp, encodingname, unicode_str)) {
+        for (i = 0; i < n; ++i) {
+            if (STREQ(encodings[i]->name, "utf8"))
+                return i;
+        }
+    }
+    else if (Parrot_str_equal(interp, encodingname, fixed_8_str)) {
+        for (i = 0; i < n; ++i) {
+            if (STREQ(encodings[i]->name, "ascii"))
+                return i;
+        }
+    }
+
     return -1;
 }
 
@@ -197,6 +190,8 @@
 
 Return the number of the encoding of the given string or -1 if not found.
 
+This could be converted to a macro.
+
 =cut
 
 */
@@ -208,14 +203,8 @@
 Parrot_encoding_number_of_str(SHIM_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(Parrot_encoding_number_of_str)
-    const int n = all_encodings->n_encodings;
-    int i;
 
-    for (i = 0; i < n; ++i) {
-        if (src->encoding == all_encodings->enc[i].encoding)
-            return i;
-    }
-    return -1;
+    return src->encoding->num;
 }
 
 /*
@@ -225,6 +214,8 @@
 Returns the name of a character encoding based on the INTVAL index
 C<number_of_encoding> to the All_encodings array.
 
+This could be converted to a macro.
+
 =cut
 
 */
@@ -237,15 +228,15 @@
 Parrot_encoding_name(SHIM_INTERP, INTVAL number_of_encoding)
 {
     ASSERT_ARGS(Parrot_encoding_name)
-    if (number_of_encoding >= all_encodings->n_encodings ||
+    if (number_of_encoding >= n_encodings ||
         number_of_encoding < 0)
         return NULL;
-    return all_encodings->enc[number_of_encoding].name;
+    return encodings[number_of_encoding]->name_str;
 }
 
 /*
 
-=item C<const ENCODING* Parrot_get_encoding(PARROT_INTERP, INTVAL
+=item C<const STR_VTABLE* Parrot_get_encoding(PARROT_INTERP, INTVAL
 number_of_encoding)>
 
 Returns the encoding given by the INTVAL index C<number_of_encoding>.
@@ -258,14 +249,14 @@
 PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
-const ENCODING*
+const STR_VTABLE*
 Parrot_get_encoding(SHIM_INTERP, INTVAL number_of_encoding)
 {
     ASSERT_ARGS(Parrot_get_encoding)
-    if (number_of_encoding >= all_encodings->n_encodings ||
+    if (number_of_encoding >= n_encodings ||
         number_of_encoding < 0)
         return NULL;
-    return all_encodings->enc[number_of_encoding].encoding;
+    return encodings[number_of_encoding];
 }
 
 /*
@@ -288,50 +279,10 @@
 Parrot_encoding_c_name(SHIM_INTERP, INTVAL number_of_encoding)
 {
     ASSERT_ARGS(Parrot_encoding_c_name)
-    if (number_of_encoding >= all_encodings->n_encodings ||
+    if (number_of_encoding >= n_encodings ||
         number_of_encoding < 0)
         return NULL;
-    return all_encodings->enc[number_of_encoding].encoding->name;
-}
-
-/*
-
-=item C<static INTVAL register_encoding(PARROT_INTERP, const char *encodingname,
-ENCODING *encoding)>
-
-Registers a new character encoding C<encoding> with the given name
-C<encodingname>. Returns 1 if successful, returns 0 otherwise.
-
-=cut
-
-*/
-
-static INTVAL
-register_encoding(PARROT_INTERP, ARGIN(const char *encodingname),
-        ARGIN(ENCODING *encoding))
-{
-    ASSERT_ARGS(register_encoding)
-    const int n = all_encodings->n_encodings;
-    int i;
-
-    for (i = 0; i < n; ++i) {
-        if (STREQ(all_encodings->enc[i].encoding->name, encodingname))
-            return 0;
-    }
-    /*
-     * TODO
-     * this needs either a LOCK or we just forbid dynamic
-     * loading of encodings from inside threads
-     */
-    if (!n)
-        all_encodings->enc = mem_gc_allocate_zeroed_typed(interp, One_encoding);
-    else
-        all_encodings->enc = mem_gc_realloc_n_typed_zeroed(interp,
-                all_encodings->enc, n + 1, n, One_encoding);
-    ++all_encodings->n_encodings;
-    all_encodings->enc[n].encoding = encoding;
-
-    return 1;
+    return encodings[number_of_encoding]->name;
 }
 
 /*
@@ -339,7 +290,7 @@
 =item C<void Parrot_str_internal_register_encoding_names(PARROT_INTERP)>
 
 Helper function for initializing characterset encoding names. We can't create
-the STRING names until the default encodings and charsets are already initted,
+the STRING names until the default encodings are already initted,
 so the name generation is split into a second init stage.
 
 =cut
@@ -352,15 +303,16 @@
 {
     ASSERT_ARGS(Parrot_str_internal_register_encoding_names)
     int n;
-    for (n = 0; n < all_encodings->n_encodings; ++n)
-        all_encodings->enc[n].name =
-            Parrot_str_new_constant(interp, all_encodings->enc[n].encoding->name);
+    for (n = 0; n < n_encodings; ++n)
+        encodings[n]->name_str =
+            Parrot_str_new_constant(interp, encodings[n]->name);
+    unicode_str = Parrot_str_new_constant(interp, "unicode");
+    fixed_8_str = Parrot_str_new_constant(interp, "fixed_8");
 }
 
 /*
 
-=item C<INTVAL Parrot_register_encoding(PARROT_INTERP, const char *encodingname,
-ENCODING *encoding)>
+=item C<INTVAL Parrot_register_encoding(PARROT_INTERP, STR_VTABLE *encoding)>
 
 Registers a character encoding C<encoding> with name C<encodingname>.
 Only allows one of 5 possibilities: fixed_8, utf8, utf16, ucs2 and ucs4.
@@ -371,46 +323,65 @@
 
 PARROT_EXPORT
 INTVAL
-Parrot_register_encoding(PARROT_INTERP, ARGIN(const char *encodingname),
-        ARGIN(ENCODING *encoding))
+Parrot_register_encoding(PARROT_INTERP, ARGIN(STR_VTABLE *encoding))
 {
     ASSERT_ARGS(Parrot_register_encoding)
-    if (!all_encodings) {
-        all_encodings = mem_gc_allocate_zeroed_typed(interp, All_encodings);
-        all_encodings->n_encodings = 0;
-        all_encodings->enc = NULL;
-    }
-    if (STREQ("fixed_8", encodingname)) {
-        Parrot_fixed_8_encoding_ptr = encoding;
-        if (!Parrot_default_encoding_ptr) {
-            Parrot_default_encoding_ptr = encoding;
+    int i;
+    int n = n_encodings;
 
-        }
-        return register_encoding(interp, encodingname, encoding);
-    }
-    if (STREQ("utf8", encodingname)) {
-        Parrot_utf8_encoding_ptr = encoding;
-        return register_encoding(interp, encodingname, encoding);
-    }
-    if (STREQ("utf16", encodingname)) {
-        Parrot_utf16_encoding_ptr = encoding;
-        return register_encoding(interp, encodingname, encoding);
-    }
-    if (STREQ("ucs2", encodingname)) {
-        Parrot_ucs2_encoding_ptr = encoding;
-        return register_encoding(interp, encodingname, encoding);
-    }
-    if (STREQ("ucs4", encodingname)) {
-        Parrot_ucs4_encoding_ptr = encoding;
-        return register_encoding(interp, encodingname, encoding);
+    for (i = 0; i < n_encodings; ++i) {
+        if (STREQ(encodings[i]->name, encoding->name))
+            return 0;
     }
-    return 0;
+
+    if (!n)
+        encodings = mem_gc_allocate_zeroed_typed(interp, STR_VTABLE *);
+    else
+        encodings = mem_gc_realloc_n_typed_zeroed(interp,
+                encodings, n + 1, n, STR_VTABLE *);
+
+    encoding->num = n;
+    encodings[n]  = encoding;
+    ++n_encodings;
+
+    return 1;
+}
+
+/*
+
+=item C<void Parrot_encodings_init(PARROT_INTERP)>
+
+Creates the initial encodings.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+void
+Parrot_encodings_init(PARROT_INTERP)
+{
+    ASSERT_ARGS(Parrot_encodings_init)
+
+    Parrot_register_encoding(interp, Parrot_ascii_encoding_ptr);
+    Parrot_register_encoding(interp, Parrot_latin1_encoding_ptr);
+    Parrot_register_encoding(interp, Parrot_binary_encoding_ptr);
+    Parrot_register_encoding(interp, Parrot_utf8_encoding_ptr);
+    Parrot_register_encoding(interp, Parrot_utf16_encoding_ptr);
+    Parrot_register_encoding(interp, Parrot_ucs2_encoding_ptr);
+    Parrot_register_encoding(interp, Parrot_ucs4_encoding_ptr);
+
+    Parrot_default_encoding_ptr = Parrot_ascii_encoding_ptr;
+
+    /* Now that the plugins are registered, we can create STRING
+     * names for them.  */
+    Parrot_str_internal_register_encoding_names(interp);
 }
 
 /*
 
 =item C<INTVAL Parrot_make_default_encoding(PARROT_INTERP, const char
-*encodingname, ENCODING *encoding)>
+*encodingname, STR_VTABLE *encoding)>
 
 Sets the default encoding to C<encoding> with name C<encodingname>.
 
@@ -421,7 +392,7 @@
 PARROT_EXPORT
 INTVAL
 Parrot_make_default_encoding(SHIM_INTERP, SHIM(const char *encodingname),
-        ARGIN(ENCODING *encoding))
+        ARGIN(STR_VTABLE *encoding))
 {
     ASSERT_ARGS(Parrot_make_default_encoding)
     Parrot_default_encoding_ptr = encoding;
@@ -430,7 +401,7 @@
 
 /*
 
-=item C<const ENCODING * Parrot_default_encoding(PARROT_INTERP)>
+=item C<const STR_VTABLE * Parrot_default_encoding(PARROT_INTERP)>
 
 Gets the default encoding.
 
@@ -442,39 +413,13 @@
 PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-const ENCODING *
+const STR_VTABLE *
 Parrot_default_encoding(SHIM_INTERP)
 {
     ASSERT_ARGS(Parrot_default_encoding)
     return Parrot_default_encoding_ptr;
 }
 
-/*
-
-=item C<encoding_converter_t Parrot_find_encoding_converter(PARROT_INTERP,
-ENCODING *lhs, ENCODING *rhs)>
-
-Finds a converter from encoding C<rhs> to C<lhs>. Not yet implemented, so
-throws an exception.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_DOES_NOT_RETURN
-encoding_converter_t
-Parrot_find_encoding_converter(PARROT_INTERP, ARGIN(ENCODING *lhs), ARGIN(ENCODING *rhs))
-{
-    ASSERT_ARGS(Parrot_find_encoding_converter)
-    UNUSED(lhs);
-    UNUSED(rhs);
-
-    /* XXX Apparently unwritten https://trac.parrot.org/parrot/wiki/StringsTasklist */
-    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
-        "Can't find encoding converters yet.");
-}
-
 
 /*
  * Local variables:

Copied: branches/html_cleanup/src/string/encoding/ascii.c (from r49200, trunk/src/string/encoding/ascii.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/html_cleanup/src/string/encoding/ascii.c	Wed Sep 22 03:35:47 2010	(r49232, copy of r49200, trunk/src/string/encoding/ascii.c)
@@ -0,0 +1,554 @@
+/*
+Copyright (C) 2004-2010, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/string/encoding/ascii.c
+
+=head1 DESCRIPTION
+
+This file implements encoding functions for ASCII strings.
+
+=over 4
+
+=cut
+
+*/
+
+#include "parrot/parrot.h"
+#include "shared.h"
+#include "tables.h"
+
+/* HEADERIZER HFILE: none */
+
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static STRING * ascii_chr(PARROT_INTERP, UINTVAL codepoint)
+        __attribute__nonnull__(1);
+
+PARROT_CANNOT_RETURN_NULL
+static STRING* ascii_downcase(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+static STRING* ascii_downcase_first(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+static INTVAL ascii_find_cclass(PARROT_INTERP,
+    INTVAL flags,
+    ARGIN(const STRING *src),
+    UINTVAL offset,
+    UINTVAL count)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3);
+
+static INTVAL ascii_find_not_cclass(PARROT_INTERP,
+    INTVAL flags,
+    ARGIN(const STRING *src),
+    UINTVAL offset,
+    UINTVAL count)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+static INTVAL ascii_is_cclass(PARROT_INTERP,
+    INTVAL flags,
+    ARGIN(const STRING *src),
+    UINTVAL offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3);
+
+PARROT_CANNOT_RETURN_NULL
+static STRING* ascii_titlecase(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+static STRING* ascii_titlecase_first(PARROT_INTERP,
+    ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+static STRING * ascii_to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+static STRING* ascii_upcase(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+static STRING* ascii_upcase_first(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+static UINTVAL ascii_validate(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_ascii_chr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_ascii_downcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_ascii_downcase_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_ascii_find_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_ascii_find_not_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_ascii_is_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_ascii_titlecase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_ascii_titlecase_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_ascii_to_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_ascii_upcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_ascii_upcase_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_ascii_validate __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
+
+/*
+
+=item C<static STRING * ascii_to_encoding(PARROT_INTERP, const STRING *src)>
+
+Converts STRING C<src> to ASCII charset STRING C<dest>.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static STRING *
+ascii_to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(ascii_to_encoding)
+    STRING        *dest;
+
+    if (STRING_max_bytes_per_codepoint(src) == 1) {
+        unsigned char * const src_buf  = (unsigned char *)src->strstart;
+        UINTVAL offs;
+
+        for (offs = 0; offs < src->strlen; ++offs) {
+            UINTVAL c = src_buf[offs];
+            if (c >= 0x80)
+                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LOSSY_CONVERSION,
+                    "lossy conversion to ascii");
+        }
+
+        dest           = Parrot_str_clone(interp, src);
+        dest->encoding = Parrot_ascii_encoding_ptr;
+    }
+    else {
+        String_iter iter;
+        unsigned char *p;
+        const UINTVAL len = src->strlen;
+
+        dest = Parrot_str_new_init(interp, NULL, len,
+                Parrot_ascii_encoding_ptr, 0);
+        p    = (unsigned char *)dest->strstart;
+        STRING_ITER_INIT(interp, &iter);
+
+        while (iter.charpos < len) {
+            const UINTVAL c = STRING_iter_get_and_advance(interp, src, &iter);
+            if (c >= 0x80)
+                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LOSSY_CONVERSION,
+                        "can't convert unicode string to ascii");
+            *p++ = c;
+        }
+
+        dest->bufused = len;
+        dest->strlen  = len;
+    }
+
+    return dest;
+}
+
+/*
+
+=item C<static STRING * ascii_chr(PARROT_INTERP, UINTVAL codepoint)>
+
+Creates a new STRING object from a single codepoint C<codepoint>. Returns
+the new STRING.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static STRING *
+ascii_chr(PARROT_INTERP, UINTVAL codepoint)
+{
+    ASSERT_ARGS(ascii_chr)
+    char real_codepoint = (char)codepoint;
+    return Parrot_str_new_init(interp, &real_codepoint, 1,
+            Parrot_ascii_encoding_ptr, 0);
+}
+
+/*
+
+=item C<static UINTVAL ascii_validate(PARROT_INTERP, const STRING *src)>
+
+Verifies that the given string is valid ASCII. Returns 1 if it is ASCII,
+returns 0 otherwise.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+static UINTVAL
+ascii_validate(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(ascii_validate)
+    String_iter iter;
+    const UINTVAL length = Parrot_str_length(interp, src);
+
+    STRING_ITER_INIT(interp, &iter);
+    while (iter.charpos < length) {
+        const UINTVAL codepoint = STRING_iter_get_and_advance(interp, src, &iter);
+        if (codepoint >= 0x80)
+            return 0;
+    }
+    return 1;
+}
+
+/*
+
+=item C<static INTVAL ascii_is_cclass(PARROT_INTERP, INTVAL flags, const STRING
+*src, UINTVAL offset)>
+
+Returns Boolean.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+static INTVAL
+ascii_is_cclass(PARROT_INTERP, INTVAL flags, ARGIN(const STRING *src), UINTVAL offset)
+{
+    ASSERT_ARGS(ascii_is_cclass)
+    UINTVAL codepoint;
+
+    if (offset >= src->strlen)
+        return 0;
+    codepoint = STRING_ord(interp, src, offset);
+
+    if (codepoint >= sizeof (Parrot_ascii_typetable) / sizeof (Parrot_ascii_typetable[0])) {
+        return 0;
+    }
+    return (Parrot_ascii_typetable[codepoint] & flags) ? 1 : 0;
+}
+
+/*
+
+=item C<static INTVAL ascii_find_cclass(PARROT_INTERP, INTVAL flags, const
+STRING *src, UINTVAL offset, UINTVAL count)>
+
+Find a character in the given character class.  Delegates to the find_cclass
+method of the encoding plugin.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+static INTVAL
+ascii_find_cclass(PARROT_INTERP, INTVAL flags, ARGIN(const STRING *src), UINTVAL offset,
+                    UINTVAL count)
+{
+    ASSERT_ARGS(ascii_find_cclass)
+    const unsigned char *contents = (const unsigned char *)src->strstart;
+    UINTVAL pos = offset;
+    UINTVAL end = offset + count;
+
+    end = src->strlen < end ? src->strlen : end;
+    for (; pos < end; ++pos) {
+        if ((Parrot_ascii_typetable[contents[pos]] & flags) != 0) {
+            return pos;
+        }
+    }
+    return end;
+}
+
+/*
+
+=item C<static INTVAL ascii_find_not_cclass(PARROT_INTERP, INTVAL flags, const
+STRING *src, UINTVAL offset, UINTVAL count)>
+
+Returns C<INTVAL>.
+
+=cut
+
+*/
+
+static INTVAL
+ascii_find_not_cclass(PARROT_INTERP,
+                INTVAL flags, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
+{
+    ASSERT_ARGS(ascii_find_not_cclass)
+    const unsigned char *contents = (const unsigned char *)src->strstart;
+    UINTVAL pos = offset;
+    UINTVAL end = offset + count;
+
+    end = src->strlen < end ? src->strlen : end;
+    for (; pos < end; ++pos) {
+        if ((Parrot_ascii_typetable[contents[pos]] & flags) == 0) {
+            return pos;
+        }
+    }
+    return end;
+}
+
+/*
+
+=item C<static STRING* ascii_upcase(PARROT_INTERP, const STRING *src)>
+
+Converts the STRING C<src> to all uppercase.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+ascii_upcase(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(ascii_upcase)
+    STRING * const result = Parrot_str_clone(interp, src);
+    const UINTVAL n = src->strlen;
+
+    if (n) {
+        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 STRING* ascii_downcase(PARROT_INTERP, const STRING *src)>
+
+Converts the STRING C<src> to all lower-case.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+ascii_downcase(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(ascii_downcase)
+    STRING       *result = Parrot_str_clone(interp, src);
+    const UINTVAL n      = src->strlen;
+
+    if (n) {
+        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 STRING* ascii_titlecase(PARROT_INTERP, const STRING *src)>
+
+Converts the STRING given by C<src> to title case, where
+the first character is upper case and all the rest of the characters
+are lower-case.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+ascii_titlecase(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(ascii_titlecase)
+    STRING       *result = Parrot_str_clone(interp, src);
+    const UINTVAL n      = src->strlen;
+
+    if (n) {
+        char * const buffer = result->strstart;
+        UINTVAL offset;
+
+        buffer[0] = (char)toupper((unsigned char)buffer[0]);
+        for (offset = 1; offset < n; ++offset) {
+            buffer[offset] = (char)tolower((unsigned char)buffer[offset]);
+        }
+    }
+
+    return result;
+}
+
+/*
+
+=item C<static STRING* ascii_upcase_first(PARROT_INTERP, const STRING *src)>
+
+Sets the first character in the STRING C<src> to upper case,
+but doesn't modify the rest of the string.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+ascii_upcase_first(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(ascii_upcase_first)
+    STRING * const result = Parrot_str_clone(interp, src);
+
+    if (result->strlen > 0) {
+        char * const buffer = result->strstart;
+        buffer[0] = (char)toupper((unsigned char)buffer[0]);
+    }
+
+    return result;
+}
+
+/*
+
+=item C<static STRING* ascii_downcase_first(PARROT_INTERP, const STRING *src)>
+
+Sets the first character of the STRING C<src> to lowercase,
+but doesn't modify the rest of the characters.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+ascii_downcase_first(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(ascii_downcase_first)
+    STRING * const result = Parrot_str_clone(interp, src);
+
+    if (result->strlen > 0) {
+        char * const buffer = result->strstart;
+        buffer[0] = (char)tolower((unsigned char)buffer[0]);
+    }
+
+    return result;
+}
+
+/*
+
+=item C<static STRING* ascii_titlecase_first(PARROT_INTERP, const STRING *src)>
+
+Converts the first letter of STRING C<src> to upper case,
+but doesn't modify the rest of the string.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+ascii_titlecase_first(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(ascii_titlecase_first)
+    STRING * const result = Parrot_str_clone(interp, src);
+
+    if (result->strlen > 0) {
+        char * const buffer = result->strstart;
+        buffer[0] = (char)toupper((unsigned char)buffer[0]);
+    }
+
+    return result;
+}
+
+static STR_VTABLE Parrot_ascii_encoding = {
+    0,
+    "ascii",
+    NULL,
+    1, /* Max bytes per codepoint */
+
+    ascii_to_encoding,
+    ascii_chr,
+
+    fixed8_equal,
+    fixed8_compare,
+    fixed8_index,
+    fixed8_rindex,
+    fixed8_hash,
+    ascii_validate,
+
+    fixed8_scan,
+    fixed8_ord,
+    fixed8_substr,
+
+    ascii_is_cclass,
+    ascii_find_cclass,
+    ascii_find_not_cclass,
+
+    encoding_get_graphemes,
+    fixed8_compose,
+    encoding_decompose,
+
+    ascii_upcase,
+    ascii_downcase,
+    ascii_titlecase,
+    ascii_upcase_first,
+    ascii_downcase_first,
+    ascii_titlecase_first,
+
+    fixed8_iter_get,
+    fixed8_iter_skip,
+    fixed8_iter_get_and_advance,
+    fixed8_iter_set_and_advance,
+    fixed8_iter_set_position
+};
+
+STR_VTABLE *Parrot_ascii_encoding_ptr = &Parrot_ascii_encoding;
+
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */
+

Copied: branches/html_cleanup/src/string/encoding/binary.c (from r49200, trunk/src/string/encoding/binary.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/html_cleanup/src/string/encoding/binary.c	Wed Sep 22 03:35:47 2010	(r49232, copy of r49200, trunk/src/string/encoding/binary.c)
@@ -0,0 +1,275 @@
+/*
+Copyright (C) 2004-2010, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/string/encoding/binary.c
+
+=head1 DESCRIPTION
+
+This file implements encoding functions for binary strings.
+
+=over 4
+
+=cut
+
+*/
+
+#include "parrot/parrot.h"
+#include "shared.h"
+
+/* HEADERIZER HFILE: none */
+
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_CANNOT_RETURN_NULL
+static STRING* binary_change_case(PARROT_INTERP, SHIM(const STRING *src))
+        __attribute__nonnull__(1);
+
+PARROT_CANNOT_RETURN_NULL
+static STRING * binary_chr(PARROT_INTERP, UINTVAL codepoint)
+        __attribute__nonnull__(1);
+
+static INTVAL binary_find_cclass(SHIM_INTERP,
+    SHIM(INTVAL flags),
+    SHIM(const STRING *src),
+    UINTVAL offset,
+    UINTVAL count);
+
+static INTVAL binary_find_not_cclass(SHIM_INTERP,
+    SHIM(INTVAL flags),
+    SHIM(const STRING *src),
+    UINTVAL offset,
+    UINTVAL count);
+
+static INTVAL binary_is_cclass(SHIM_INTERP,
+    SHIM(INTVAL flags),
+    SHIM(const STRING *src),
+    SHIM(UINTVAL offset));
+
+PARROT_CANNOT_RETURN_NULL
+static STRING* binary_to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static UINTVAL binary_validate(SHIM_INTERP, SHIM(const STRING *src));
+#define ASSERT_ARGS_binary_change_case __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_binary_chr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_binary_find_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_binary_find_not_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_binary_is_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_binary_to_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_binary_validate __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
+#ifdef EXCEPTION
+#  undef EXCEPTION
+#endif
+
+#define EXCEPTION(err, str) \
+    Parrot_ex_throw_from_c_args(interp, NULL, (err), (str))
+
+
+/*
+
+=item C<static STRING* binary_to_encoding(PARROT_INTERP, const STRING *src)>
+
+Converts the STRING C<src> to STRING C<dest> in binary mode.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+binary_to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(binary_to_encoding)
+    STRING      *dest;
+
+    dest           = Parrot_str_clone(interp, src);
+    dest->encoding = Parrot_binary_encoding_ptr;
+    dest->strlen   = dest->bufused;
+    dest->hashval  = 0;
+
+    return dest;
+}
+
+
+/*
+
+=item C<static STRING * binary_chr(PARROT_INTERP, UINTVAL codepoint)>
+
+Creates a new STRING object from a single codepoint C<codepoint>. Returns
+the new STRING.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static STRING *
+binary_chr(PARROT_INTERP, UINTVAL codepoint)
+{
+    ASSERT_ARGS(binary_chr)
+    char real_codepoint = (char)codepoint;
+    return Parrot_str_new_init(interp, &real_codepoint, 1,
+            Parrot_binary_encoding_ptr, 0);
+}
+
+
+/*
+
+=item C<static UINTVAL binary_validate(PARROT_INTERP, const STRING *src)>
+
+Returns 1. All sequential data is valid binary data.
+
+=cut
+
+*/
+
+/* Binary's always valid */
+static UINTVAL
+binary_validate(SHIM_INTERP, SHIM(const STRING *src))
+{
+    ASSERT_ARGS(binary_validate)
+    return 1;
+}
+
+
+/*
+
+=item C<static INTVAL binary_is_cclass(PARROT_INTERP, INTVAL flags, const STRING
+*src, UINTVAL offset)>
+
+Returns Boolean.
+
+=cut
+
+*/
+
+static INTVAL
+binary_is_cclass(SHIM_INTERP, SHIM(INTVAL flags), SHIM(const STRING *src), SHIM(UINTVAL offset))
+{
+    ASSERT_ARGS(binary_is_cclass)
+    return 0;
+}
+
+
+/*
+
+=item C<static INTVAL binary_find_cclass(PARROT_INTERP, INTVAL flags, const
+STRING *src, UINTVAL offset, UINTVAL count)>
+
+Find a character in the given character class.
+
+=cut
+
+*/
+
+static INTVAL
+binary_find_cclass(SHIM_INTERP, SHIM(INTVAL flags),
+            SHIM(const STRING *src), UINTVAL offset, UINTVAL count)
+{
+    ASSERT_ARGS(binary_find_cclass)
+    return offset + count;
+}
+
+
+/*
+
+=item C<static INTVAL binary_find_not_cclass(PARROT_INTERP, INTVAL flags, const
+STRING *src, UINTVAL offset, UINTVAL count)>
+
+Returns C<INTVAL>.
+
+=cut
+
+*/
+
+static INTVAL
+binary_find_not_cclass(SHIM_INTERP, SHIM(INTVAL flags),
+               SHIM(const STRING *src), UINTVAL offset, UINTVAL count)
+{
+    ASSERT_ARGS(binary_find_not_cclass)
+    return offset;
+}
+
+
+/*
+
+=item C<static STRING* binary_change_case(PARROT_INTERP, const STRING *src)>
+
+Throws an exception because we cannot change case of a binary string.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+binary_change_case(PARROT_INTERP, SHIM(const STRING *src))
+{
+    ASSERT_ARGS(binary_change_case)
+    EXCEPTION(EXCEPTION_INVALID_CHARTYPE, "Can't change case of binary data");
+}
+
+
+static STR_VTABLE Parrot_binary_encoding = {
+    0,
+    "binary",
+    NULL,
+    1, /* Max bytes per codepoint */
+
+    binary_to_encoding,
+    binary_chr,
+
+    fixed8_equal,
+    fixed8_compare,
+    fixed8_index,
+    fixed8_rindex,
+    fixed8_hash,
+    binary_validate,
+
+    fixed8_scan,
+    fixed8_ord,
+    fixed8_substr,
+
+    binary_is_cclass,
+    binary_find_cclass,
+    binary_find_not_cclass,
+
+    encoding_get_graphemes,
+    fixed8_compose,
+    encoding_decompose,
+
+    binary_change_case,
+    binary_change_case,
+    binary_change_case,
+    binary_change_case,
+    binary_change_case,
+    binary_change_case,
+
+    fixed8_iter_get,
+    fixed8_iter_skip,
+    fixed8_iter_get_and_advance,
+    fixed8_iter_set_and_advance,
+    fixed8_iter_set_position
+};
+
+STR_VTABLE *Parrot_binary_encoding_ptr = &Parrot_binary_encoding;
+
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Deleted: branches/html_cleanup/src/string/encoding/fixed_8.h
==============================================================================
--- branches/html_cleanup/src/string/encoding/fixed_8.h	Wed Sep 22 03:35:47 2010	(r49231)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,34 +0,0 @@
-/* fixed_8.h
- *  Copyright (C) 2004-2007, Parrot Foundation.
- *  SVN Info
- *     $Id$
- *  Overview:
- *     This is the header for the 8-bit fixed-width encoding
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
- */
-
-#ifndef PARROT_ENCODING_FIXED_8_H_GUARD
-#define PARROT_ENCODING_FIXED_8_H_GUARD
-
-/* HEADERIZER BEGIN: src/string/encoding/fixed_8.c */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-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 = (\
-       PARROT_ASSERT_ARG(interp))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: src/string/encoding/fixed_8.c */
-
-#endif /* PARROT_ENCODING_FIXED_8_H_GUARD */
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Copied: branches/html_cleanup/src/string/encoding/latin1.c (from r49200, trunk/src/string/encoding/latin1.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/html_cleanup/src/string/encoding/latin1.c	Wed Sep 22 03:35:47 2010	(r49232, copy of r49200, trunk/src/string/encoding/latin1.c)
@@ -0,0 +1,580 @@
+/*
+Copyright (C) 2004-2010, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/string/encoding/latin1.c
+
+=head1 DESCRIPTION
+
+This file implements encoding functions for ISO-8859-1 strings.
+
+=over 4
+
+=cut
+
+*/
+
+#include "parrot/parrot.h"
+#include "shared.h"
+#include "tables.h"
+
+/* HEADERIZER HFILE: none */
+
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_CANNOT_RETURN_NULL
+static STRING * latin1_chr(PARROT_INTERP, UINTVAL codepoint)
+        __attribute__nonnull__(1);
+
+PARROT_CANNOT_RETURN_NULL
+static STRING* latin1_downcase(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+static STRING* latin1_downcase_first(PARROT_INTERP,
+    ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static INTVAL latin1_find_cclass(PARROT_INTERP,
+    INTVAL flags,
+    ARGIN(const STRING *src),
+    UINTVAL offset,
+    UINTVAL count)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3);
+
+static INTVAL latin1_find_not_cclass(PARROT_INTERP,
+    INTVAL flags,
+    ARGIN(const STRING *src),
+    UINTVAL offset,
+    UINTVAL count)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3);
+
+static INTVAL latin1_is_cclass(PARROT_INTERP,
+    INTVAL flags,
+    ARGIN(const STRING *src),
+    UINTVAL offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3);
+
+PARROT_CANNOT_RETURN_NULL
+static STRING* latin1_titlecase(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+static STRING* latin1_titlecase_first(PARROT_INTERP,
+    ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static STRING * latin1_to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+static STRING* latin1_upcase(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+static STRING* latin1_upcase_first(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static UINTVAL latin1_validate(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_latin1_chr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_latin1_downcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_latin1_downcase_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_latin1_find_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_latin1_find_not_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_latin1_is_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_latin1_titlecase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_latin1_titlecase_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_latin1_to_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_latin1_upcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_latin1_upcase_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_latin1_validate __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
+
+/*
+
+=item C<static STRING * latin1_to_encoding(PARROT_INTERP, const STRING *src)>
+
+Converts the STRING C<src> to an ISO-8859-1 STRING C<dest>.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static STRING *
+latin1_to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(latin1_to_encoding)
+    STRING      *dest;
+
+    if (STRING_max_bytes_per_codepoint(src) == 1) {
+        dest           = Parrot_str_clone(interp, src);
+        dest->encoding = Parrot_latin1_encoding_ptr;
+    }
+    else {
+        String_iter  iter;
+        unsigned char *p;
+        const UINTVAL len = src->strlen;
+
+        dest = Parrot_str_new_init(interp, NULL, len,
+                Parrot_latin1_encoding_ptr, 0);
+        p    = (unsigned char *)dest->strstart;
+        STRING_ITER_INIT(interp, &iter);
+
+        while (iter.charpos < len) {
+            const UINTVAL c = STRING_iter_get_and_advance(interp, src, &iter);
+            if (c >= 0x100)
+                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LOSSY_CONVERSION,
+                    "lossy conversion to iso-8559-1");
+            *p++ = c;
+        }
+
+        dest->bufused = len;
+        dest->strlen  = len;
+    }
+
+    return dest;
+}
+
+
+/*
+
+=item C<static STRING * latin1_chr(PARROT_INTERP, UINTVAL codepoint)>
+
+Creates a new STRING from the single codepoint C<codepoint>.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static STRING *
+latin1_chr(PARROT_INTERP, UINTVAL codepoint)
+{
+    ASSERT_ARGS(latin1_chr)
+    char real_codepoint = (char)codepoint;
+    PARROT_ASSERT(codepoint < 0x100);
+    return Parrot_str_new_init(interp, &real_codepoint, 1,
+            Parrot_latin1_encoding_ptr, 0);
+}
+
+
+/*
+
+=item C<static UINTVAL latin1_validate(PARROT_INTERP, const STRING *src)>
+
+Returns 1 if the STRING C<src> is a valid ISO-8859-1 STRING. Returns 0 otherwise.
+
+=cut
+
+*/
+
+static UINTVAL
+latin1_validate(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(latin1_validate)
+    INTVAL offset;
+    const INTVAL length =  Parrot_str_length(interp, src);
+
+    for (offset = 0; offset < length; ++offset) {
+        const UINTVAL codepoint = STRING_ord(interp, src, offset);
+        if (codepoint >= 0x100)
+            return 0;
+    }
+    return 1;
+}
+
+
+/*
+
+=item C<static INTVAL latin1_is_cclass(PARROT_INTERP, INTVAL flags, const STRING
+*src, UINTVAL offset)>
+
+Returns Boolean.
+
+=cut
+
+*/
+
+static INTVAL
+latin1_is_cclass(PARROT_INTERP, INTVAL flags, ARGIN(const STRING *src), UINTVAL offset)
+{
+    ASSERT_ARGS(latin1_is_cclass)
+    UINTVAL codepoint;
+
+    if (offset >= src->strlen) return 0;
+    codepoint = STRING_ord(interp, src, offset);
+
+    if (codepoint >= sizeof (Parrot_ascii_typetable) /
+                     sizeof (Parrot_ascii_typetable[0])) {
+        return 0;
+    }
+    return (Parrot_iso_8859_1_typetable[codepoint] & flags) ? 1 : 0;
+}
+
+
+/*
+
+=item C<static INTVAL latin1_find_cclass(PARROT_INTERP, INTVAL flags, const
+STRING *src, UINTVAL offset, UINTVAL count)>
+
+Find a character in the given character class.  Delegates to the find_cclass
+method of the encoding plugin.
+
+=cut
+
+*/
+
+static INTVAL
+latin1_find_cclass(PARROT_INTERP, INTVAL flags,
+                ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
+{
+    ASSERT_ARGS(latin1_find_cclass)
+    const unsigned char *contents = (const unsigned char *)src->strstart;
+    UINTVAL pos = offset;
+    UINTVAL end = offset + count;
+
+    end = src->strlen < end ? src->strlen : end;
+    for (; pos < end; ++pos) {
+        if ((Parrot_iso_8859_1_typetable[contents[pos]] & flags) != 0) {
+            return pos;
+        }
+    }
+    return end;
+}
+
+
+/*
+
+=item C<static INTVAL latin1_find_not_cclass(PARROT_INTERP, INTVAL flags, const
+STRING *src, UINTVAL offset, UINTVAL count)>
+
+Returns C<INTVAL>.
+
+=cut
+
+*/
+
+static INTVAL
+latin1_find_not_cclass(PARROT_INTERP, INTVAL flags,
+                ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
+{
+    ASSERT_ARGS(latin1_find_not_cclass)
+    const unsigned char *contents = (const unsigned char *)src->strstart;
+    UINTVAL pos = offset;
+    UINTVAL end = offset + count;
+
+    end = src->strlen < end ? src->strlen : end;
+    for (; pos < end; ++pos) {
+        if ((Parrot_iso_8859_1_typetable[contents[pos]] & flags) == 0) {
+            return pos;
+        }
+    }
+    return end;
+}
+
+
+/*
+
+=item C<static STRING* latin1_upcase(PARROT_INTERP, const STRING *src)>
+
+Convert all graphemes in the STRING C<src> to upper case, for those
+graphemes that support cases.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+latin1_upcase(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(latin1_upcase)
+    unsigned char *buffer;
+    UINTVAL        offset = 0;
+    STRING        *result = Parrot_str_clone(interp, src);
+
+    if (!result->strlen)
+        return result;
+
+    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;
+        else
+            c = toupper((unsigned char)c);
+        buffer[offset] = (unsigned char)c;
+    }
+
+    return result;
+}
+
+
+/*
+
+=item C<static STRING* latin1_downcase(PARROT_INTERP, const STRING *src)>
+
+Converts all graphemes in STRING C<src> to lower-case, for those graphemes
+that support cases.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+latin1_downcase(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(latin1_downcase)
+    unsigned char *buffer;
+    UINTVAL        offset = 0;
+    STRING        *result = Parrot_str_clone(interp, src);
+
+    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 STRING* latin1_titlecase(PARROT_INTERP, const STRING *src)>
+
+Converts the graphemes in STRING C<src> to title case, for those graphemes
+that support cases.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+latin1_titlecase(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(latin1_titlecase)
+    unsigned char *buffer;
+    unsigned int   c;
+    UINTVAL        offset;
+    STRING        *result = Parrot_str_clone(interp, src);
+
+    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;
+
+    for (offset = 1; offset < result->strlen; ++offset) {
+        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 STRING* latin1_upcase_first(PARROT_INTERP, const STRING *src)>
+
+Converts the first grapheme in STRING C<src> to upper case, if it
+supports cases.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+latin1_upcase_first(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(latin1_upcase_first)
+    unsigned char *buffer;
+    unsigned int   c;
+    STRING        *result = Parrot_str_clone(interp, src);
+
+    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 STRING* latin1_downcase_first(PARROT_INTERP, const STRING *src)>
+
+Converts the first character of the STRING C<src> to lower case, if the
+grapheme supports lower case.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+latin1_downcase_first(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(latin1_downcase_first)
+    unsigned char *buffer;
+    unsigned int   c;
+    STRING        *result = Parrot_str_clone(interp, src);
+
+    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 STRING* latin1_titlecase_first(PARROT_INTERP, const STRING *src)>
+
+Converts the first grapheme in STRING C<src> to title case, if the grapheme
+supports case.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+latin1_titlecase_first(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(latin1_titlecase_first)
+    return latin1_upcase_first(interp, src);
+}
+
+
+static STR_VTABLE Parrot_latin1_encoding = {
+    0,
+    "iso-8859-1",
+    NULL,
+    1, /* Max bytes per codepoint */
+
+    latin1_to_encoding,
+    latin1_chr,
+
+    fixed8_equal,
+    fixed8_compare,
+    fixed8_index,
+    fixed8_rindex,
+    fixed8_hash,
+    latin1_validate,
+
+    fixed8_scan,
+    fixed8_ord,
+    fixed8_substr,
+
+    latin1_is_cclass,
+    latin1_find_cclass,
+    latin1_find_not_cclass,
+
+    encoding_get_graphemes,
+    fixed8_compose,
+    encoding_decompose,
+
+    latin1_upcase,
+    latin1_downcase,
+    latin1_titlecase,
+    latin1_upcase_first,
+    latin1_downcase_first,
+    latin1_titlecase_first,
+
+    fixed8_iter_get,
+    fixed8_iter_skip,
+    fixed8_iter_get_and_advance,
+    fixed8_iter_set_and_advance,
+    fixed8_iter_set_position
+};
+
+STR_VTABLE *Parrot_latin1_encoding_ptr = &Parrot_latin1_encoding;
+
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Copied: branches/html_cleanup/src/string/encoding/shared.c (from r49200, trunk/src/string/encoding/shared.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/html_cleanup/src/string/encoding/shared.c	Wed Sep 22 03:35:47 2010	(r49232, copy of r49200, trunk/src/string/encoding/shared.c)
@@ -0,0 +1,1389 @@
+/*
+Copyright (C) 2004-2010, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/string/encoding/shared.c
+
+=head1 DESCRIPTION
+
+This file implements general encoding functions for strings.
+
+Functions starting with encoding_ work with any type of string.
+Functions starting with fixed8_ work with fixed8 strings.
+Functions starting with unicode_ work with unicode strings.
+
+=over 4
+
+=cut
+
+*/
+
+#include "parrot/parrot.h"
+#include "tables.h"
+#include "shared.h"
+
+#if PARROT_HAS_ICU
+#  include <unicode/ucnv.h>
+#  include <unicode/utypes.h>
+#  include <unicode/uchar.h>
+#  include <unicode/ustring.h>
+#  include <unicode/unorm.h>
+#endif
+
+/* HEADERIZER HFILE: src/string/encoding/shared.h */
+
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static int u_iscclass(PARROT_INTERP, UINTVAL codepoint, INTVAL flags)
+        __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_u_iscclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
+#define UNIMPL Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED, \
+    "unimpl fixed_8")
+
+
+/*
+
+=item C<INTVAL encoding_equal(PARROT_INTERP, const STRING *lhs, const STRING
+*rhs)>
+
+Compares two STRINGs, C<lhs> and C<rhs>. If STRING C<lhs> == C<rhs>,
+returns 1. If C<lhs> != C<rhs> returns 0.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL
+encoding_equal(PARROT_INTERP, ARGIN(const STRING *lhs), ARGIN(const STRING *rhs))
+{
+    ASSERT_ARGS(encoding_equal)
+    String_iter l_iter, r_iter;
+    const UINTVAL len = STRING_length(lhs);
+
+    if (len != STRING_length(rhs))
+        return 0;
+    if (len == 0)
+        return 1;
+    if (lhs == rhs)
+        return 1;
+    if (lhs->hashval && rhs->hashval && lhs->hashval != rhs->hashval)
+        return 0;
+    if (lhs->encoding == rhs->encoding)
+        return memcmp(lhs->strstart, rhs->strstart, STRING_byte_length(lhs)) == 0;
+
+    STRING_ITER_INIT(interp, &l_iter);
+    STRING_ITER_INIT(interp, &r_iter);
+
+    while (l_iter.charpos < len) {
+        const UINTVAL cl = STRING_iter_get_and_advance(interp, lhs, &l_iter);
+        const UINTVAL cr = STRING_iter_get_and_advance(interp, rhs, &r_iter);
+
+        if (cl != cr)
+            return 0;
+    }
+
+    return 1;
+}
+
+
+/*
+
+=item C<INTVAL encoding_compare(PARROT_INTERP, const STRING *lhs, const STRING
+*rhs)>
+
+Compares two STRINGs, C<lhs> and C<rhs>. Returns -1 if C<lhs> < C<rhs>. Returns
+0 if C<lhs> = C<rhs>. Returns 1 if C<lhs> > C<rhs>.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL
+encoding_compare(PARROT_INTERP, ARGIN(const STRING *lhs), ARGIN(const STRING *rhs))
+{
+    ASSERT_ARGS(encoding_compare)
+    String_iter l_iter, r_iter;
+    UINTVAL min_len, l_len, r_len;
+
+    STRING_ITER_INIT(interp, &l_iter);
+    STRING_ITER_INIT(interp, &r_iter);
+
+    l_len = lhs->strlen;
+    r_len = rhs->strlen;
+
+    min_len = l_len > r_len ? r_len : l_len;
+
+    while (l_iter.charpos < min_len) {
+        const UINTVAL cl = STRING_iter_get_and_advance(interp, lhs, &l_iter);
+        const UINTVAL cr = STRING_iter_get_and_advance(interp, rhs, &r_iter);
+
+        if (cl != cr)
+            return cl < cr ? -1 : 1;
+    }
+
+    if (l_len < r_len)
+        return -1;
+
+    if (l_len > r_len)
+        return 1;
+
+    return 0;
+}
+
+
+/*
+
+=item C<INTVAL encoding_index(PARROT_INTERP, const STRING *src, const STRING
+*search, UINTVAL offs)>
+
+Searches for the first instance of STRING C<search> in STRING C<src>.
+returns the position where the substring is found if it is indeed found.
+Returns -1 otherwise. Operates on different types of strings, not just
+ASCII.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL
+encoding_index(PARROT_INTERP, ARGIN(const STRING *src), ARGIN(const STRING *search),
+    UINTVAL offs)
+{
+    ASSERT_ARGS(encoding_index)
+    String_iter start, end;
+
+    STRING_ITER_INIT(interp, &start);
+    STRING_iter_set_position(interp, src, &start, offs);
+
+    return Parrot_str_iter_index(interp, src, &start, &end, search);
+}
+
+
+/*
+
+=item C<INTVAL encoding_rindex(PARROT_INTERP, const STRING *src, const STRING
+*search_string, UINTVAL offset)>
+
+Finds the last index of substring C<search_string> in STRING C<src>,
+starting from C<offset>. Not implemented.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL
+encoding_rindex(PARROT_INTERP, SHIM(const STRING *src),
+        SHIM(const STRING *search_string), SHIM(UINTVAL offset))
+{
+    ASSERT_ARGS(encoding_rindex)
+    /* TODO: https://trac.parrot.org/parrot/wiki/StringsTasklist Implement this. */
+    UNIMPL;
+}
+
+
+/*
+
+=item C<size_t encoding_hash(PARROT_INTERP, const STRING *src, size_t seed)>
+
+Computes the hash of the given STRING C<src> with starting seed value C<seed>.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+size_t
+encoding_hash(PARROT_INTERP, ARGIN(const STRING *src), size_t seed)
+{
+    ASSERT_ARGS(encoding_hash)
+    String_iter iter;
+    size_t      hashval = seed;
+
+    STRING_ITER_INIT(interp, &iter);
+
+    while (iter.charpos < src->strlen) {
+        const UINTVAL c = STRING_iter_get_and_advance(interp, src, &iter);
+        hashval += hashval << 5;
+        hashval += c;
+    }
+
+    return hashval;
+}
+
+
+/*
+
+=item C<static int u_iscclass(PARROT_INTERP, UINTVAL codepoint, INTVAL flags)>
+
+Returns Boolean.
+
+=cut
+
+*/
+
+static int
+u_iscclass(PARROT_INTERP, UINTVAL codepoint, INTVAL flags)
+{
+    ASSERT_ARGS(u_iscclass)
+#if PARROT_HAS_ICU
+    UNUSED(interp);
+            /* XXX which one
+               return u_charDigitValue(codepoint);
+               */
+    if ((flags & enum_cclass_uppercase)    && u_isupper(codepoint))  return 1;
+    if ((flags & enum_cclass_lowercase)    && u_islower(codepoint))  return 1;
+    if ((flags & enum_cclass_alphabetic)   && u_isalpha(codepoint))  return 1;
+    if ((flags & enum_cclass_numeric)      && u_isdigit(codepoint))  return 1;
+    if ((flags & enum_cclass_hexadecimal)  && u_isxdigit(codepoint)) return 1;
+    if ((flags & enum_cclass_whitespace)   && u_isspace(codepoint))  return 1;
+    if ((flags & enum_cclass_printing)     && u_isprint(codepoint))  return 1;
+    if ((flags & enum_cclass_graphical)    && u_isgraph(codepoint))  return 1;
+    if ((flags & enum_cclass_blank)        && u_isblank(codepoint))  return 1;
+    if ((flags & enum_cclass_control)      && u_iscntrl(codepoint))  return 1;
+    if ((flags & enum_cclass_alphanumeric) && u_isalnum(codepoint))  return 1;
+    if ((flags & enum_cclass_word)         &&
+        (u_isalnum(codepoint) || codepoint == '_'))                  return 1;
+
+    return 0;
+#else
+    if (codepoint < 256)
+        return (Parrot_iso_8859_1_typetable[codepoint] & flags) ? 1 : 0;
+
+    if (flags == enum_cclass_any)
+        return 1;
+
+    /* All codepoints from u+0100 to u+02af are alphabetic, so we
+     * cheat on the WORD and ALPHABETIC properties to include these
+     * (and incorrectly exclude all others).  This is a stopgap until
+     * ICU is everywhere, or we have better non-ICU unicode support. */
+    if (flags == enum_cclass_word || flags == enum_cclass_alphabetic)
+        return (codepoint < 0x2b0);
+
+    if (flags & enum_cclass_whitespace) {
+        /* from http://www.unicode.org/Public/UNIDATA/PropList.txt */
+        switch (codepoint) {
+          case 0x1680: case 0x180e: case 0x2000: case 0x2001:
+          case 0x2002: case 0x2003: case 0x2004: case 0x2005:
+          case 0x2006: case 0x2007: case 0x2008: case 0x2009:
+          case 0x200a: case 0x2028: case 0x2029: case 0x202f:
+          case 0x205f: case 0x3000:
+            return 1;
+          default:
+            break;
+        }
+    }
+
+    if (flags & enum_cclass_numeric) {
+        /* from http://www.unicode.org/Public/UNIDATA/UnicodeData.txt */
+        if (codepoint >= 0x0660 && codepoint <= 0x0669) return 1;
+        if (codepoint >= 0x06f0 && codepoint <= 0x06f9) return 1;
+        if (codepoint >= 0x07c0 && codepoint <= 0x07c9) return 1;
+        if (codepoint >= 0x0966 && codepoint <= 0x096f) return 1;
+        if (codepoint >= 0x09e6 && codepoint <= 0x09ef) return 1;
+        if (codepoint >= 0x0a66 && codepoint <= 0x0a6f) return 1;
+        if (codepoint >= 0x0ae6 && codepoint <= 0x0aef) return 1;
+        if (codepoint >= 0x0b66 && codepoint <= 0x0b6f) return 1;
+        if (codepoint >= 0x0be6 && codepoint <= 0x0bef) return 1;
+        if (codepoint >= 0x0c66 && codepoint <= 0x0c6f) return 1;
+        if (codepoint >= 0x0ce6 && codepoint <= 0x0cef) return 1;
+        if (codepoint >= 0x0d66 && codepoint <= 0x0d6f) return 1;
+        if (codepoint >= 0x0e50 && codepoint <= 0x0e59) return 1;
+        if (codepoint >= 0x0ed0 && codepoint <= 0x0ed9) return 1;
+        if (codepoint >= 0x0f20 && codepoint <= 0x0f29) return 1;
+        if (codepoint >= 0x1040 && codepoint <= 0x1049) return 1;
+        if (codepoint >= 0x17e0 && codepoint <= 0x17e9) return 1;
+        if (codepoint >= 0x1810 && codepoint <= 0x1819) return 1;
+        if (codepoint >= 0x1946 && codepoint <= 0x194f) return 1;
+        if (codepoint >= 0x19d0 && codepoint <= 0x19d9) return 1;
+        if (codepoint >= 0x1b50 && codepoint <= 0x1b59) return 1;
+        if (codepoint >= 0xff10 && codepoint <= 0xff19) return 1;
+    }
+
+    if (flags & ~(enum_cclass_whitespace | enum_cclass_numeric | enum_cclass_newline))
+        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
+            "no ICU lib loaded");
+
+    return 0;
+#endif
+}
+
+
+/*
+
+=item C<UINTVAL encoding_scan(PARROT_INTERP, const STRING *src)>
+
+Returns the number of codepoints in string C<src>.
+
+=cut
+
+*/
+
+UINTVAL
+encoding_scan(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(encoding_scan)
+    String_iter iter;
+    /*
+     * this is used to initially calculate src->strlen,
+     * therefore we must scan the whole string
+     */
+    STRING_ITER_INIT(interp, &iter);
+    while (iter.bytepos < src->bufused)
+        STRING_iter_get_and_advance(interp, src, &iter);
+    return iter.charpos;
+}
+
+
+/*
+
+=item C<STRING * encoding_substr(PARROT_INTERP, const STRING *src, UINTVAL
+offset, UINTVAL count)>
+
+Returns the codepoints in string C<src> at position C<offset> and length
+C<count>.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+STRING *
+encoding_substr(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
+{
+    ASSERT_ARGS(encoding_substr)
+
+    STRING * const return_string = Parrot_str_copy(interp, src);
+    String_iter    iter;
+    UINTVAL        start;
+
+    STRING_ITER_INIT(interp, &iter);
+
+    if (offset)
+        STRING_iter_set_position(interp, src, &iter, offset);
+
+    start                   = iter.bytepos;
+    return_string->strstart = (char *)return_string->strstart + start;
+
+    if (count)
+        STRING_iter_set_position(interp, src, &iter, offset + count);
+
+    return_string->bufused  = iter.bytepos - start;
+    return_string->strlen   = count;
+    return_string->hashval  = 0;
+
+    return return_string;
+}
+
+
+/*
+
+=item C<INTVAL encoding_is_cclass(PARROT_INTERP, INTVAL flags, const STRING
+*src, UINTVAL offset)>
+
+Returns Boolean.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL
+encoding_is_cclass(PARROT_INTERP, INTVAL flags, ARGIN(const STRING *src), UINTVAL offset)
+{
+    ASSERT_ARGS(encoding_is_cclass)
+    UINTVAL codepoint;
+
+    if (offset >= src->strlen)
+        return 0;
+
+    codepoint = STRING_ord(interp, src, offset);
+
+    if (codepoint >= 256)
+        return u_iscclass(interp, codepoint, flags) != 0;
+
+    return (Parrot_iso_8859_1_typetable[codepoint] & flags) ? 1 : 0;
+}
+
+
+/*
+
+=item C<INTVAL encoding_find_cclass(PARROT_INTERP, INTVAL flags, const STRING
+*src, UINTVAL offset, UINTVAL count)>
+
+Find a character in the given character class.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL
+encoding_find_cclass(PARROT_INTERP, INTVAL flags, ARGIN(const STRING *src),
+        UINTVAL offset, UINTVAL count)
+{
+    ASSERT_ARGS(encoding_find_cclass)
+    String_iter iter;
+    UINTVAL     codepoint;
+    UINTVAL     end = offset + count;
+
+    STRING_ITER_INIT(interp, &iter);
+    STRING_iter_set_position(interp, src, &iter, offset);
+
+    end = src->strlen < end ? src->strlen : end;
+
+    while (iter.charpos < end) {
+        codepoint = STRING_iter_get_and_advance(interp, src, &iter);
+        if (codepoint >= 256) {
+            if (u_iscclass(interp, codepoint, flags))
+                    return iter.charpos - 1;
+        }
+        else {
+            if (Parrot_iso_8859_1_typetable[codepoint] & flags)
+                return iter.charpos - 1;
+        }
+    }
+
+    return end;
+}
+
+
+/*
+
+=item C<INTVAL encoding_find_not_cclass(PARROT_INTERP, INTVAL flags, const
+STRING *src, UINTVAL offset, UINTVAL count)>
+
+Returns C<INTVAL>.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL
+encoding_find_not_cclass(PARROT_INTERP, INTVAL flags, ARGIN(const STRING *src),
+        UINTVAL offset, UINTVAL count)
+{
+    ASSERT_ARGS(encoding_find_not_cclass)
+    String_iter iter;
+    UINTVAL     codepoint;
+    UINTVAL     end = offset + count;
+    int         bit;
+
+    if (offset > src->strlen) {
+        /* XXX: Throw in this case? */
+        return offset + count;
+    }
+
+    STRING_ITER_INIT(interp, &iter);
+
+    if (offset)
+        STRING_iter_set_position(interp, src, &iter, offset);
+
+    end = src->strlen < end ? src->strlen : end;
+
+    if (flags == enum_cclass_any)
+        return end;
+
+    while (iter.charpos < end) {
+        codepoint = STRING_iter_get_and_advance(interp, src, &iter);
+        if (codepoint >= 256) {
+            for (bit = enum_cclass_uppercase;
+                    bit <= enum_cclass_word ; bit <<= 1) {
+                if ((bit & flags) && !u_iscclass(interp, codepoint, bit))
+                    return iter.charpos - 1;
+            }
+        }
+        else {
+            if (!(Parrot_iso_8859_1_typetable[codepoint] & flags))
+                return iter.charpos - 1;
+        }
+    }
+
+    return end;
+}
+
+
+/*
+
+=item C<STRING * encoding_get_graphemes(PARROT_INTERP, const STRING *src,
+UINTVAL offset, UINTVAL count)>
+
+Retrieves the graphemes for the STRING C<src>, starting at
+C<offset> and ending at C<offset + count>. Returns codepoints for now.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+STRING *
+encoding_get_graphemes(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
+{
+    ASSERT_ARGS(encoding_get_graphemes)
+    return STRING_substr(interp, src, offset, count);
+}
+
+
+/*
+
+=item C<STRING* encoding_decompose(PARROT_INTERP, const STRING *src)>
+
+Decompose function. This function is not yet implemented.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+STRING*
+encoding_decompose(PARROT_INTERP, SHIM(const STRING *src))
+{
+    ASSERT_ARGS(encoding_decompose)
+    /* TODO: https://trac.parrot.org/parrot/wiki/StringsTasklist Implement this. */
+    UNIMPL;
+}
+
+
+/*
+
+=item C<INTVAL fixed8_equal(PARROT_INTERP, const STRING *lhs, const STRING
+*rhs)>
+
+Compares a fixed8 string with another string. If STRING C<lhs> == C<rhs>,
+returns 1. If C<lhs> != C<rhs> returns 0.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL
+fixed8_equal(PARROT_INTERP, ARGIN(const STRING *lhs), ARGIN(const STRING *rhs))
+{
+    ASSERT_ARGS(fixed8_equal)
+    const UINTVAL len = STRING_length(lhs);
+
+    if (len != STRING_length(rhs))
+        return 0;
+    if (len == 0)
+        return 1;
+    if (lhs == rhs)
+        return 1;
+    if (lhs->hashval && rhs->hashval && lhs->hashval != rhs->hashval)
+        return 0;
+
+    if (STRING_max_bytes_per_codepoint(rhs) == 1) {
+        return memcmp(lhs->strstart, rhs->strstart, len) == 0;
+    }
+    else {
+        const unsigned char * const buf = (unsigned char *)lhs->strstart;
+        String_iter iter;
+
+        STRING_ITER_INIT(interp, &iter);
+
+        while (iter.charpos < len) {
+            const UINTVAL cl = buf[iter.charpos];
+            const UINTVAL cr = STRING_iter_get_and_advance(interp, rhs, &iter);
+            if (cl != cr)
+                return 0;
+        }
+
+        return 1;
+    }
+}
+
+
+/*
+
+=item C<INTVAL fixed8_compare(PARROT_INTERP, const STRING *lhs, const STRING
+*rhs)>
+
+Compares a fixed8 string with another string. If STRING C<lhs> > C<rhs>, returns
+1. If C<lhs> == C<rhs> returns 0. If STRING C<lhs> < C<rhs>, returns  -1.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL
+fixed8_compare(PARROT_INTERP, ARGIN(const STRING *lhs), ARGIN(const STRING *rhs))
+{
+    ASSERT_ARGS(fixed8_compare)
+    const UINTVAL l_len = lhs->strlen;
+    const UINTVAL r_len = rhs->strlen;
+    const UINTVAL min_len = l_len > r_len ? r_len : l_len;
+
+    if (STRING_max_bytes_per_codepoint(rhs) == 1) {
+        const int ret_val = memcmp(lhs->strstart, rhs->strstart, min_len);
+        if (ret_val)
+            return ret_val < 0 ? -1 : 1;
+    }
+    else {
+        const unsigned char * const buf = (unsigned char *)lhs->strstart;
+        String_iter iter;
+
+        STRING_ITER_INIT(interp, &iter);
+
+        while (iter.charpos < min_len) {
+            const UINTVAL cl = buf[iter.charpos];
+            const UINTVAL cr = STRING_iter_get_and_advance(interp, rhs, &iter);
+            if (cl != cr)
+                return cl < cr ? -1 : 1;
+        }
+    }
+
+    if (l_len < r_len)
+        return -1;
+    if (l_len > r_len)
+        return 1;
+
+    return 0;
+}
+
+
+/*
+
+=item C<INTVAL fixed8_index(PARROT_INTERP, const STRING *src, const STRING
+*search_string, UINTVAL offset)>
+
+Searches for the first instance of STRING C<search> in STRING C<src>.
+returns the position where the substring is found if it is indeed found.
+Returns -1 otherwise.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL
+fixed8_index(PARROT_INTERP, ARGIN(const STRING *src),
+        ARGIN(const STRING *search_string), UINTVAL offset)
+{
+    ASSERT_ARGS(fixed8_index)
+    INTVAL retval;
+
+    if (STRING_max_bytes_per_codepoint(search_string) != 1) {
+        return encoding_index(interp, src, search_string, offset);
+    }
+
+    PARROT_ASSERT(STRING_max_bytes_per_codepoint(src) == 1);
+    retval = Parrot_byte_index(interp, src,
+            search_string, offset);
+    return retval;
+}
+
+
+/*
+
+=item C<INTVAL fixed8_rindex(PARROT_INTERP, const STRING *src, const STRING
+*search_string, UINTVAL offset)>
+
+Searches for the last instance of STRING C<search_string> in STRING
+C<src>. Starts searching at C<offset>.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL
+fixed8_rindex(PARROT_INTERP, ARGIN(const STRING *src),
+        ARGIN(const STRING *search_string), UINTVAL offset)
+{
+    ASSERT_ARGS(fixed8_rindex)
+    INTVAL retval;
+
+    if (STRING_max_bytes_per_codepoint(search_string) != 1)
+        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
+            "Cross-charset rindex not supported");
+
+    PARROT_ASSERT(STRING_max_bytes_per_codepoint(src) == 1);
+    retval = Parrot_byte_rindex(interp, src, search_string, offset);
+    return retval;
+}
+
+
+/*
+
+=item C<size_t fixed8_hash(PARROT_INTERP, const STRING *s, size_t hashval)>
+
+Returns the hashed value of the string, given a seed in hashval.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+size_t
+fixed8_hash(SHIM_INTERP, ARGIN(const STRING *s), size_t hashval)
+{
+    ASSERT_ARGS(fixed8_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<UINTVAL fixed8_scan(PARROT_INTERP, const STRING *src)>
+
+Returns the number of codepoints in string C<src>. No scanning needed
+for fixed encodings.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+UINTVAL
+fixed8_scan(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(fixed8_scan)
+    return src->bufused;
+}
+
+
+/*
+
+=item C<UINTVAL fixed8_ord(PARROT_INTERP, const STRING *src, UINTVAL offset)>
+
+codepoints are bytes, so delegate
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+UINTVAL
+fixed8_ord(PARROT_INTERP, ARGIN(const STRING *src),
+        UINTVAL offset)
+{
+    ASSERT_ARGS(fixed8_ord)
+    const unsigned char * const buf = (unsigned char *)src->strstart;
+
+    if (offset >= src->bufused) {
+/*        Parrot_ex_throw_from_c_args(interp, NULL, 0,
+                "fixed8_ord past the end of the buffer (%i of %i)",
+                offset, src->bufused); */
+        return 0;
+    }
+
+    return buf[offset];
+}
+
+
+/*
+
+=item C<STRING * fixed8_substr(PARROT_INTERP, const STRING *src, UINTVAL offset,
+UINTVAL count)>
+
+Returns the codepoints in string C<src> at position C<offset> and length
+C<count>.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+STRING *
+fixed8_substr(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
+{
+    ASSERT_ARGS(fixed8_substr)
+    STRING * const return_string = Parrot_str_copy(interp, src);
+
+    return_string->encoding      = src->encoding;
+    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<STRING* fixed8_compose(PARROT_INTERP, const STRING *src)>
+
+Can't compose ASCII strings, so performs a string copy on it and
+returns the new string.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+STRING*
+fixed8_compose(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(fixed8_compose)
+
+    return Parrot_str_copy(interp, src);
+}
+
+
+/*
+
+=item C<UINTVAL fixed8_iter_get(PARROT_INTERP, const STRING *str, const
+String_iter *iter, INTVAL offset)>
+
+Get the character at C<iter> plus C<offset>.
+
+=cut
+
+*/
+
+UINTVAL
+fixed8_iter_get(PARROT_INTERP,
+    ARGIN(const STRING *str), ARGIN(const String_iter *iter), INTVAL offset)
+{
+    ASSERT_ARGS(fixed8_iter_get)
+    return fixed8_ord(interp, str, iter->charpos + offset);
+}
+
+
+/*
+
+=item C<void fixed8_iter_skip(PARROT_INTERP, const STRING *str, String_iter
+*iter, INTVAL skip)>
+
+Moves the string iterator C<i> by C<skip> characters.
+
+=cut
+
+*/
+
+void
+fixed8_iter_skip(SHIM_INTERP,
+    ARGIN(const STRING *str), ARGMOD(String_iter *iter), INTVAL skip)
+{
+    ASSERT_ARGS(fixed8_iter_skip)
+    iter->bytepos += skip;
+    iter->charpos += skip;
+    PARROT_ASSERT(iter->bytepos <= Buffer_buflen(str));
+}
+
+
+/*
+
+=item C<UINTVAL fixed8_iter_get_and_advance(PARROT_INTERP, const STRING *str,
+String_iter *iter)>
+
+Moves the string iterator C<i> to the next codepoint.
+
+=cut
+
+*/
+
+UINTVAL
+fixed8_iter_get_and_advance(PARROT_INTERP,
+    ARGIN(const STRING *str), ARGMOD(String_iter *iter))
+{
+    ASSERT_ARGS(fixed8_iter_get_and_advance)
+    const UINTVAL c = fixed8_ord(interp, str, iter->charpos++);
+    iter->bytepos++;
+    return c;
+}
+
+
+/*
+
+=item C<void fixed8_iter_set_and_advance(PARROT_INTERP, STRING *str, String_iter
+*iter, UINTVAL c)>
+
+With the string iterator C<i>, appends the codepoint C<c> and advances to the
+next position in the string.
+
+=cut
+
+*/
+
+void
+fixed8_iter_set_and_advance(PARROT_INTERP,
+    ARGMOD(STRING *str), ARGMOD(String_iter *iter), UINTVAL c)
+{
+    ASSERT_ARGS(fixed8_iter_set_and_advance)
+    unsigned char *buf = (unsigned char *)str->strstart;
+    buf[iter->charpos++] = c;
+    iter->bytepos++;
+}
+
+
+/*
+
+=item C<void fixed8_iter_set_position(PARROT_INTERP, const STRING *str,
+String_iter *iter, UINTVAL pos)>
+
+Moves the string iterator C<i> to the position C<n> in the string.
+
+=cut
+
+*/
+
+void
+fixed8_iter_set_position(SHIM_INTERP,
+    ARGIN(const STRING *str), ARGMOD(String_iter *iter), UINTVAL pos)
+{
+    ASSERT_ARGS(fixed8_iter_set_position)
+    iter->bytepos = iter->charpos = pos;
+    PARROT_ASSERT(pos <= Buffer_buflen(str));
+}
+
+
+/*
+
+=item C<STRING * unicode_chr(PARROT_INTERP, UINTVAL codepoint)>
+
+Returns a one-codepoint string for the given codepoint.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+STRING *
+unicode_chr(PARROT_INTERP, UINTVAL codepoint)
+{
+    ASSERT_ARGS(unicode_chr)
+    String_iter    iter;
+    STRING * const dest = Parrot_str_new_init(interp, NULL, 4,
+        Parrot_utf8_encoding_ptr, 0);
+
+    dest->strlen = 1;
+
+    STRING_ITER_INIT(interp, &iter);
+    STRING_iter_set_and_advance(interp, dest, &iter, codepoint);
+    dest->bufused = iter.bytepos;
+
+    return dest;
+}
+
+
+/*
+
+=item C<UINTVAL unicode_validate(PARROT_INTERP, const STRING *src)>
+
+Returns 1 if the STRING C<src> is a valid unicode string, returns 0 otherwise.
+
+=cut
+
+*/
+
+UINTVAL
+unicode_validate(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(unicode_validate)
+    String_iter iter;
+    const UINTVAL length = Parrot_str_length(interp, src);
+
+    STRING_ITER_INIT(interp, &iter);
+    while (iter.charpos < length) {
+        const UINTVAL codepoint = STRING_iter_get_and_advance(interp, src, &iter);
+        /* Check for Unicode non-characters */
+        if (codepoint >= 0xfdd0
+        && (codepoint <= 0xfdef || (codepoint & 0xfffe) == 0xfffe)
+        &&  codepoint <= 0x10ffff)
+            return 0;
+    }
+
+    return 1;
+}
+
+
+/*
+
+=item C<STRING* unicode_compose(PARROT_INTERP, const STRING *src)>
+
+If Parrot is built with ICU, composes the STRING C<src>. Attempts to
+denormalize the STRING into the ICU default, NFC.
+
+If Parrot does not have ICU included, throws an exception.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+STRING*
+unicode_compose(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(unicode_compose)
+#if PARROT_HAS_ICU
+    STRING *dest;
+    int src_len, dest_len;
+    UErrorCode err;
+    /*
+       U_STABLE int32_t U_EXPORT2
+       unorm_normalize(const UChar *source, int32_t sourceLength,
+       UNormalizationMode mode, int32_t options,
+       UChar *result, int32_t resultLength,
+       UErrorCode *status);
+       */
+    dest_len = src_len = src->strlen;
+    dest     = Parrot_str_new_init(interp, NULL, src_len * sizeof (UChar),
+            src->encoding, 0);
+
+    err      = U_ZERO_ERROR;
+    dest_len = unorm_normalize((UChar *)src->strstart, src_len,
+            UNORM_DEFAULT,      /* default is NFC */
+            0,                  /* options 0 default - no specific icu
+                                 * version */
+            (UChar *)dest->strstart, dest_len, &err);
+
+    dest->bufused = dest_len * sizeof (UChar);
+
+    if (!U_SUCCESS(err)) {
+        err = U_ZERO_ERROR;
+        Parrot_gc_reallocate_string_storage(interp, dest, dest->bufused);
+        dest_len = unorm_normalize((UChar *)src->strstart, src_len,
+                UNORM_DEFAULT,      /* default is NFC */
+                0,                  /* options 0 default - no specific
+                                     * icu version */
+                (UChar *)dest->strstart, dest_len, &err);
+        PARROT_ASSERT(U_SUCCESS(err));
+        dest->bufused = dest_len * sizeof (UChar);
+    }
+    dest->strlen = dest_len;
+    return dest;
+#else
+    UNUSED(src);
+    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
+        "no ICU lib loaded");
+#endif
+}
+
+
+/*
+
+=item C<STRING* unicode_upcase(PARROT_INTERP, const STRING *src)>
+
+Converts the STRING C<src> to all upper-case graphemes, for those characters
+which support upper-case versions.
+
+Throws an exception if ICU is not installed.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+STRING*
+unicode_upcase(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(unicode_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) {
+        return Parrot_ascii_encoding_ptr->upcase(interp, src);
+    }
+
+#if PARROT_HAS_ICU
+    /* 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,
+       const UChar *src, int32_t srcLength,
+       const char *locale,
+       UErrorCode *pErrorCode);
+       */
+    err = U_ZERO_ERROR;
+
+    /* use all available space - see below XXX */
+    /* TODO downcase, titlecase too */
+    dest_len = Buffer_buflen(res) / sizeof (UChar);
+    src_len  = res->bufused       / sizeof (UChar);
+
+    /*
+     * XXX troubles:
+     *   t/op/string_cs_45  upcase unicode:"\u01f0"
+     *   this creates \u004a \u030c J+NON-SPACING HACEK
+     *   the string needs resizing, *if* the src buffer is
+     *   too short. *But* with icu 3.2/3.4 the src string is
+     *   overwritten with partial result, despite the icu docs sayeth:
+     *
+     *      The source string and the destination buffer
+     *      are allowed to overlap.
+     *
+     *  Workaround:  'preflighting' returns needed length
+     *  Alternative: forget about inplace operation - create new result
+     *
+     *  TODO downcase, titlecase
+     */
+    needed = u_strToUpper(NULL, 0,
+            (UChar *)res->strstart, src_len,
+            NULL,       /* locale = default */
+            &err);
+
+    if (needed > dest_len) {
+        Parrot_gc_reallocate_string_storage(interp, res, needed * sizeof (UChar));
+        dest_len = needed;
+    }
+
+    err      = U_ZERO_ERROR;
+    dest_len = u_strToUpper((UChar *)res->strstart, dest_len,
+            (UChar *)res->strstart, src_len,
+            NULL,       /* locale = default */
+            &err);
+    PARROT_ASSERT(U_SUCCESS(err));
+    res->bufused = dest_len * sizeof (UChar);
+
+    /* downgrade if possible */
+    if (dest_len == (int)src->strlen)
+        res->encoding = Parrot_ucs2_encoding_ptr;
+    else {
+        /* string is likely still ucs2 if it was earlier
+         * but strlen changed due to combining char
+         */
+        res->strlen = dest_len;
+    }
+
+    return res;
+
+#else
+    UNUSED(src);
+    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
+        "no ICU lib loaded");
+#endif
+}
+
+
+/*
+
+=item C<STRING* unicode_downcase(PARROT_INTERP, const STRING *src)>
+
+Converts all graphemes to lower-case, for those graphemes which have cases.
+
+Throws an exception if ICU is not installed.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+STRING*
+unicode_downcase(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(unicode_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) {
+        return Parrot_ascii_encoding_ptr->downcase(interp, src);
+    }
+
+#if PARROT_HAS_ICU
+    /* 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,
+             const UChar *src, int32_t srcLength,
+             const char *locale,
+             UErrorCode *pErrorCode);
+     */
+    err      = U_ZERO_ERROR;
+    src_len  = res->bufused / sizeof (UChar);
+    dest_len = u_strToLower((UChar *)res->strstart, src_len,
+            (UChar *)res->strstart, src_len,
+            NULL,       /* locale = default */
+            &err);
+    res->bufused = dest_len * sizeof (UChar);
+
+    if (!U_SUCCESS(err)) {
+        err = U_ZERO_ERROR;
+        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)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");
+#endif
+}
+
+
+/*
+
+=item C<STRING* unicode_titlecase(PARROT_INTERP, const STRING *src)>
+
+Converts the string to title case, for those characters which support cases.
+
+Throws an exception if ICU is not installed.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+STRING*
+unicode_titlecase(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(unicode_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) {
+        return Parrot_ascii_encoding_ptr->titlecase(interp, src);
+    }
+
+    /* to_encoding will allocate new string */
+    res = Parrot_utf16_encoding_ptr->to_encoding(interp, src);
+
+    /*
+U_CAPI int32_t U_EXPORT2
+u_strToTitle(UChar *dest, int32_t destCapacity,
+             const UChar *src, int32_t srcLength,
+             UBreakIterator *titleIter,
+             const char *locale,
+             UErrorCode *pErrorCode);
+     */
+
+    err      = U_ZERO_ERROR;
+    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);
+    res->bufused = dest_len * sizeof (UChar);
+
+    if (!U_SUCCESS(err)) {
+        err = U_ZERO_ERROR;
+        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)res->strlen)
+        res->encoding = Parrot_ucs2_encoding_ptr;
+
+    return res;
+
+#else
+    UNUSED(src);
+    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
+        "no ICU lib loaded");
+#endif
+}
+
+
+/*
+
+=item C<STRING* unicode_upcase_first(PARROT_INTERP, const STRING *src)>
+
+Converts the first grapheme in the STRING C<src> to uppercase, if the
+grapheme supports it. Not implemented.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+STRING*
+unicode_upcase_first(PARROT_INTERP, SHIM(const STRING *src))
+{
+    ASSERT_ARGS(unicode_upcase_first)
+    /* TODO: https://trac.parrot.org/parrot/wiki/StringsTasklist Implement this. */
+    UNIMPL;
+}
+
+
+/*
+
+=item C<STRING* unicode_downcase_first(PARROT_INTERP, const STRING *src)>
+
+Converts the first grapheme in the STRING C<src> to lower-case, if
+the grapheme supports it. Not implemented
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+STRING*
+unicode_downcase_first(PARROT_INTERP, SHIM(const STRING *src))
+{
+    ASSERT_ARGS(unicode_downcase_first)
+    /* TODO: https://trac.parrot.org/parrot/wiki/StringsTasklist Implement this. */
+    UNIMPL;
+}
+
+
+/*
+
+=item C<STRING* unicode_titlecase_first(PARROT_INTERP, const STRING *src)>
+
+Converts the first grapheme in STRING C<src> to title case, if the
+string supports it. Not implemented.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+STRING*
+unicode_titlecase_first(PARROT_INTERP, SHIM(const STRING *src))
+{
+    ASSERT_ARGS(unicode_titlecase_first)
+    /* TODO: https://trac.parrot.org/parrot/wiki/StringsTasklist Implement this. */
+    UNIMPL;
+}
+
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */
+

Copied: branches/html_cleanup/src/string/encoding/shared.h (from r49200, trunk/src/string/encoding/shared.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/html_cleanup/src/string/encoding/shared.h	Wed Sep 22 03:35:47 2010	(r49232, copy of r49200, trunk/src/string/encoding/shared.h)
@@ -0,0 +1,369 @@
+/* fixed_8.h
+ *  Copyright (C) 2004-2007, Parrot Foundation.
+ *  SVN Info
+ *     $Id$
+ *  Overview:
+ *     This is the header for the 8-bit fixed-width encoding
+ *  Data Structure and Algorithms:
+ *  History:
+ *  Notes:
+ *  References:
+ */
+
+#ifndef PARROT_ENCODING_SHARED_H_GUARD
+#define PARROT_ENCODING_SHARED_H_GUARD
+
+/* HEADERIZER BEGIN: src/string/encoding/shared.c */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL encoding_compare(PARROT_INTERP,
+    ARGIN(const STRING *lhs),
+    ARGIN(const STRING *rhs))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_CANNOT_RETURN_NULL
+STRING* encoding_decompose(PARROT_INTERP, SHIM(const STRING *src))
+        __attribute__nonnull__(1);
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL encoding_equal(PARROT_INTERP,
+    ARGIN(const STRING *lhs),
+    ARGIN(const STRING *rhs))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL encoding_find_cclass(PARROT_INTERP,
+    INTVAL flags,
+    ARGIN(const STRING *src),
+    UINTVAL offset,
+    UINTVAL count)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL encoding_find_not_cclass(PARROT_INTERP,
+    INTVAL flags,
+    ARGIN(const STRING *src),
+    UINTVAL offset,
+    UINTVAL count)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3);
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+STRING * encoding_get_graphemes(PARROT_INTERP,
+    ARGIN(const STRING *src),
+    UINTVAL offset,
+    UINTVAL count)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+size_t encoding_hash(PARROT_INTERP, ARGIN(const STRING *src), size_t seed)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL encoding_index(PARROT_INTERP,
+    ARGIN(const STRING *src),
+    ARGIN(const STRING *search),
+    UINTVAL offs)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL encoding_is_cclass(PARROT_INTERP,
+    INTVAL flags,
+    ARGIN(const STRING *src),
+    UINTVAL offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL encoding_rindex(PARROT_INTERP,
+    SHIM(const STRING *src),
+    SHIM(const STRING *search_string),
+    NULLOK(UINTVAL offset))
+        __attribute__nonnull__(1);
+
+UINTVAL encoding_scan(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+STRING * encoding_substr(PARROT_INTERP,
+    ARGIN(const STRING *src),
+    UINTVAL offset,
+    UINTVAL count)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL fixed8_compare(PARROT_INTERP,
+    ARGIN(const STRING *lhs),
+    ARGIN(const STRING *rhs))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_CANNOT_RETURN_NULL
+STRING* fixed8_compose(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL fixed8_equal(PARROT_INTERP,
+    ARGIN(const STRING *lhs),
+    ARGIN(const STRING *rhs))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+size_t fixed8_hash(SHIM_INTERP, ARGIN(const STRING *s), size_t hashval)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL fixed8_index(PARROT_INTERP,
+    ARGIN(const STRING *src),
+    ARGIN(const STRING *search_string),
+    UINTVAL offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+UINTVAL fixed8_iter_get(PARROT_INTERP,
+    ARGIN(const STRING *str),
+    ARGIN(const String_iter *iter),
+    INTVAL offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+UINTVAL fixed8_iter_get_and_advance(PARROT_INTERP,
+    ARGIN(const STRING *str),
+    ARGMOD(String_iter *iter))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*iter);
+
+void fixed8_iter_set_and_advance(PARROT_INTERP,
+    ARGMOD(STRING *str),
+    ARGMOD(String_iter *iter),
+    UINTVAL c)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*str)
+        FUNC_MODIFIES(*iter);
+
+void fixed8_iter_set_position(SHIM_INTERP,
+    ARGIN(const STRING *str),
+    ARGMOD(String_iter *iter),
+    UINTVAL pos)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*iter);
+
+void fixed8_iter_skip(SHIM_INTERP,
+    ARGIN(const STRING *str),
+    ARGMOD(String_iter *iter),
+    INTVAL skip)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*iter);
+
+PARROT_WARN_UNUSED_RESULT
+UINTVAL fixed8_ord(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+INTVAL fixed8_rindex(PARROT_INTERP,
+    ARGIN(const STRING *src),
+    ARGIN(const STRING *search_string),
+    UINTVAL offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+UINTVAL fixed8_scan(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+STRING * fixed8_substr(PARROT_INTERP,
+    ARGIN(const STRING *src),
+    UINTVAL offset,
+    UINTVAL count)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+STRING * unicode_chr(PARROT_INTERP, UINTVAL codepoint)
+        __attribute__nonnull__(1);
+
+PARROT_CANNOT_RETURN_NULL
+STRING* unicode_compose(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+STRING* unicode_downcase(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+STRING* unicode_downcase_first(PARROT_INTERP, SHIM(const STRING *src))
+        __attribute__nonnull__(1);
+
+PARROT_CANNOT_RETURN_NULL
+STRING* unicode_titlecase(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+STRING* unicode_titlecase_first(PARROT_INTERP, SHIM(const STRING *src))
+        __attribute__nonnull__(1);
+
+PARROT_CANNOT_RETURN_NULL
+STRING* unicode_upcase(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+STRING* unicode_upcase_first(PARROT_INTERP, SHIM(const STRING *src))
+        __attribute__nonnull__(1);
+
+UINTVAL unicode_validate(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_encoding_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(lhs) \
+    , PARROT_ASSERT_ARG(rhs))
+#define ASSERT_ARGS_encoding_decompose __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_encoding_equal __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(lhs) \
+    , PARROT_ASSERT_ARG(rhs))
+#define ASSERT_ARGS_encoding_find_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_encoding_find_not_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_encoding_get_graphemes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_encoding_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_encoding_index __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src) \
+    , PARROT_ASSERT_ARG(search))
+#define ASSERT_ARGS_encoding_is_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_encoding_rindex __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_encoding_scan __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_encoding_substr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_fixed8_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(lhs) \
+    , PARROT_ASSERT_ARG(rhs))
+#define ASSERT_ARGS_fixed8_compose __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_fixed8_equal __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(lhs) \
+    , PARROT_ASSERT_ARG(rhs))
+#define ASSERT_ARGS_fixed8_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(s))
+#define ASSERT_ARGS_fixed8_index __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src) \
+    , PARROT_ASSERT_ARG(search_string))
+#define ASSERT_ARGS_fixed8_iter_get __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(iter))
+#define ASSERT_ARGS_fixed8_iter_get_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(iter))
+#define ASSERT_ARGS_fixed8_iter_set_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(iter))
+#define ASSERT_ARGS_fixed8_iter_set_position __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(iter))
+#define ASSERT_ARGS_fixed8_iter_skip __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(str) \
+    , PARROT_ASSERT_ARG(iter))
+#define ASSERT_ARGS_fixed8_ord __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_fixed8_rindex __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src) \
+    , PARROT_ASSERT_ARG(search_string))
+#define ASSERT_ARGS_fixed8_scan __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_fixed8_substr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_unicode_chr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_unicode_compose __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_unicode_downcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_unicode_downcase_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_unicode_titlecase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_unicode_titlecase_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_unicode_upcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_unicode_upcase_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_unicode_validate __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: src/string/encoding/shared.c */
+
+#endif /* PARROT_ENCODING_SHARED_H_GUARD */
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Copied: branches/html_cleanup/src/string/encoding/tables.c (from r49200, trunk/src/string/encoding/tables.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/html_cleanup/src/string/encoding/tables.c	Wed Sep 22 03:35:47 2010	(r49232, copy of r49200, trunk/src/string/encoding/tables.c)
@@ -0,0 +1,93 @@
+/* $Id$
+ * Copyright (C) 2005-2007, Parrot Foundation.
+ *
+ * DO NOT EDIT THIS FILE DIRECTLY!
+ * please update the tools/dev/gen_charset_tables.pl script instead.
+ *
+ * Created by gen_charset_tables.pl 19534 2007-07-02 02:12:08Z petdance
+ *  Overview:
+ *     This file contains various charset tables.
+ *  Data Structure and Algorithms:
+ *  History:
+ *  Notes:
+ *  References:
+ */
+
+/* HEADERIZER HFILE: none */
+
+
+#include "tables.h"
+const INTVAL Parrot_iso_8859_1_typetable[256] = {
+0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, /* 0-7 */
+0x0200, 0x0320, 0x1220, 0x0220, 0x1220, 0x1220, 0x0200, 0x0200, /* 8-15 */
+0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, /* 16-23 */
+0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, /* 24-31 */
+0x0160, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, /* 32-39 */
+0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, /* 40-47 */
+0x28d8, 0x28d8, 0x28d8, 0x28d8, 0x28d8, 0x28d8, 0x28d8, 0x28d8, /* 48-55 */
+0x28d8, 0x28d8, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, /* 56-63 */
+0x04c0, 0x28d5, 0x28d5, 0x28d5, 0x28d5, 0x28d5, 0x28d5, 0x28c5, /* 64-71 */
+0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, /* 72-79 */
+0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, /* 80-87 */
+0x28c5, 0x28c5, 0x28c5, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x24c0, /* 88-95 */
+0x04c0, 0x28d6, 0x28d6, 0x28d6, 0x28d6, 0x28d6, 0x28d6, 0x28c6, /* 96-103 */
+0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, /* 104-111 */
+0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, /* 112-119 */
+0x28c6, 0x28c6, 0x28c6, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x0200, /* 120-127 */
+0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x1220, 0x0200, 0x0200, /* 128-135 */
+0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, /* 136-143 */
+0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, /* 144-151 */
+0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, /* 152-159 */
+0x04e0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, /* 160-167 */
+0x04c0, 0x04c0, 0x28c4, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, /* 168-175 */
+0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x28c6, 0x04c0, 0x04c0, /* 176-183 */
+0x04c0, 0x04c0, 0x28c4, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, /* 184-191 */
+0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, /* 192-199 */
+0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, /* 200-207 */
+0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x04c0, /* 208-215 */
+0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c6, /* 216-223 */
+0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, /* 224-231 */
+0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, /* 232-239 */
+0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x04c0, /* 240-247 */
+0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, /* 248-255 */
+};
+const INTVAL Parrot_ascii_typetable[256] = {
+0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, /* 0-7 */
+0x0200, 0x0320, 0x1220, 0x0220, 0x1220, 0x1220, 0x0200, 0x0200, /* 8-15 */
+0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, /* 16-23 */
+0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, /* 24-31 */
+0x0160, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, /* 32-39 */
+0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, /* 40-47 */
+0x28d8, 0x28d8, 0x28d8, 0x28d8, 0x28d8, 0x28d8, 0x28d8, 0x28d8, /* 48-55 */
+0x28d8, 0x28d8, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c0, /* 56-63 */
+0x04c0, 0x28d5, 0x28d5, 0x28d5, 0x28d5, 0x28d5, 0x28d5, 0x28c5, /* 64-71 */
+0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, /* 72-79 */
+0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, 0x28c5, /* 80-87 */
+0x28c5, 0x28c5, 0x28c5, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x24c0, /* 88-95 */
+0x04c0, 0x28d6, 0x28d6, 0x28d6, 0x28d6, 0x28d6, 0x28d6, 0x28c6, /* 96-103 */
+0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, /* 104-111 */
+0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, 0x28c6, /* 112-119 */
+0x28c6, 0x28c6, 0x28c6, 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x0200, /* 120-127 */
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1020, 0x0000, 0x0000, /* 128-135 */
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 136-143 */
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 144-151 */
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 152-159 */
+0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 160-167 */
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 168-175 */
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 176-183 */
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 184-191 */
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 192-199 */
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 200-207 */
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 208-215 */
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 216-223 */
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 224-231 */
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 232-239 */
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 240-247 */
+0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 248-255 */
+};
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Copied: branches/html_cleanup/src/string/encoding/tables.h (from r49200, trunk/src/string/encoding/tables.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/html_cleanup/src/string/encoding/tables.h	Wed Sep 22 03:35:47 2010	(r49232, copy of r49200, trunk/src/string/encoding/tables.h)
@@ -0,0 +1,36 @@
+/* $Id$
+ * Copyright (C) 2005-2007, Parrot Foundation.
+ *
+ * DO NOT EDIT THIS FILE DIRECTLY!
+ * please update the tools/dev/gen_charset_tables.pl script instead.
+ *
+ * Created by gen_charset_tables.pl 19534 2007-07-02 02:12:08Z petdance
+ *  Overview:
+ *     This file contains various charset tables.
+ *  Data Structure and Algorithms:
+ *  History:
+ *  Notes:
+ *  References:
+ */
+
+/* HEADERIZER HFILE: none */
+
+
+#ifndef PARROT_CHARSET_TABLES_H_GUARD
+#define PARROT_CHARSET_TABLES_H_GUARD
+#include "parrot/cclass.h"
+#include "parrot/parrot.h"
+#define WHITESPACE  enum_cclass_whitespace
+#define WORDCHAR    enum_cclass_word
+#define PUNCTUATION enum_cclass_punctuation
+#define DIGIT       enum_cclass_numeric
+extern const INTVAL Parrot_iso_8859_1_typetable[256];
+extern const INTVAL Parrot_ascii_typetable[256];
+#endif /* PARROT_CHARSET_TABLES_H_GUARD */
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */
+

Modified: branches/html_cleanup/src/string/encoding/ucs2.c
==============================================================================
--- branches/html_cleanup/src/string/encoding/ucs2.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/string/encoding/ucs2.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -19,7 +19,7 @@
 */
 
 #include "parrot/parrot.h"
-#include "../unicode.h"
+#include "shared.h"
 
 #if !PARROT_HAS_ICU
 PARROT_DOES_NOT_RETURN
@@ -31,71 +31,11 @@
 }
 #endif
 
-/* HEADERIZER HFILE: src/string/encoding/ucs2.h */
+/* HEADERIZER HFILE: none */
 
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL bytes(SHIM_INTERP, ARGIN(const STRING *src))
-        __attribute__nonnull__(2);
-
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL codepoints(PARROT_INTERP, ARGIN(const STRING *src))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL find_cclass(PARROT_INTERP,
-    ARGIN(const STRING *s),
-    ARGIN(const INTVAL *typetable),
-    INTVAL flags,
-    UINTVAL pos,
-    UINTVAL end)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-static UINTVAL get_byte(PARROT_INTERP,
-    SHIM(const STRING *src),
-    SHIM(UINTVAL offset))
-        __attribute__nonnull__(1);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_bytes(PARROT_INTERP,
-    SHIM(const STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL count))
-        __attribute__nonnull__(1);
-
-static UINTVAL get_codepoint(PARROT_INTERP,
-    ARGIN(const STRING *src),
-    UINTVAL offset)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_codepoints(PARROT_INTERP,
-    ARGIN(const STRING *src),
-    UINTVAL offset,
-    UINTVAL count)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void set_byte(PARROT_INTERP,
-    SHIM(const STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL byte))
-        __attribute__nonnull__(1);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
 static size_t ucs2_hash(PARROT_INTERP,
     ARGIN(const STRING *s),
     size_t hashval)
@@ -146,30 +86,32 @@
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*i);
 
-#define ASSERT_ARGS_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_find_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s) \
-    , PARROT_ASSERT_ARG(typetable))
-#define ASSERT_ARGS_get_byte __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_get_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_get_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_get_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_set_byte __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_to_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
+static UINTVAL ucs2_ord(PARROT_INTERP,
+    ARGIN(const STRING *src),
+    UINTVAL offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+static UINTVAL ucs2_scan(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static STRING * ucs2_substr(PARROT_INTERP,
+    ARGIN(const STRING *src),
+    UINTVAL offset,
+    UINTVAL count)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static STRING * ucs2_to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
 #define ASSERT_ARGS_ucs2_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))
@@ -193,11 +135,21 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(str) \
     , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_ucs2_ord __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_ucs2_scan __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_ucs2_substr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_ucs2_to_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
-#include "ucs2.h"
-
 #if PARROT_HAS_ICU
 #  include <unicode/ustring.h>
 #endif
@@ -207,7 +159,7 @@
 
 /*
 
-=item C<static STRING * to_encoding(PARROT_INTERP, const STRING *src)>
+=item C<static STRING * ucs2_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
@@ -220,9 +172,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
+ucs2_to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
 {
-    ASSERT_ARGS(to_encoding)
+    ASSERT_ARGS(ucs2_to_encoding)
     STRING * const result =
         Parrot_utf16_encoding_ptr->to_encoding(interp, src);
 
@@ -236,98 +188,57 @@
 
 /*
 
-=item C<static UINTVAL get_codepoint(PARROT_INTERP, const STRING *src, UINTVAL
-offset)>
+=item C<static UINTVAL ucs2_scan(PARROT_INTERP, const STRING *src)>
 
-Returns the codepoint in string C<src> at position C<offset>.
+Returns the number of codepoints in string C<src>.
 
 =cut
 
 */
 
+PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-get_codepoint(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset)
+ucs2_scan(PARROT_INTERP, ARGIN(const STRING *src))
 {
-    ASSERT_ARGS(get_codepoint)
+    ASSERT_ARGS(ucs2_scan)
 #if PARROT_HAS_ICU
-    const UChar * const s = (const UChar*) src->strstart;
     UNUSED(interp);
-    return s[offset];
+    return src->bufused / sizeof (UChar);
 #else
-    UNUSED(offset);
     UNUSED(src);
     no_ICU_lib(interp);
 #endif
 }
 
-
 /*
 
-=item C<static UINTVAL find_cclass(PARROT_INTERP, const STRING *s, const INTVAL
-*typetable, INTVAL flags, UINTVAL pos, UINTVAL end)>
-
-Stub, the charset level handles this for unicode strings.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL
-find_cclass(PARROT_INTERP, ARGIN(const STRING *s), ARGIN(const INTVAL *typetable),
-INTVAL flags, UINTVAL pos, UINTVAL end)
-{
-    UNUSED(s);
-    UNUSED(typetable);
-    UNUSED(flags);
-    UNUSED(pos);
-    UNUSED(end);
-
-    Parrot_ex_throw_from_c_args(interp, NULL,
-        EXCEPTION_UNIMPLEMENTED,
-        "No find_cclass support in unicode encoding plugins");
-}
-
-/*
-
-=item C<static UINTVAL get_byte(PARROT_INTERP, const STRING *src, UINTVAL
+=item C<static UINTVAL ucs2_ord(PARROT_INTERP, const STRING *src, UINTVAL
 offset)>
 
-Returns the byte in string C<src> at position C<offset>.
+Returns the codepoint in string C<src> at position C<offset>.
 
 =cut
 
 */
 
 static UINTVAL
-get_byte(PARROT_INTERP, SHIM(const STRING *src), SHIM(UINTVAL offset))
-{
-    ASSERT_ARGS(get_byte)
-    UNIMPL;
-}
-
-/*
-
-=item C<static void set_byte(PARROT_INTERP, const STRING *src, UINTVAL offset,
-UINTVAL byte)>
-
-Sets, in string C<src> at position C<offset>, the byte C<byte>.
-
-=cut
-
-*/
-
-static void
-set_byte(PARROT_INTERP, SHIM(const STRING *src), SHIM(UINTVAL offset),
-        SHIM(UINTVAL byte))
+ucs2_ord(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset)
 {
-    ASSERT_ARGS(set_byte)
-    UNIMPL;
+    ASSERT_ARGS(ucs2_ord)
+#if PARROT_HAS_ICU
+    const UChar * const s = (const UChar*) src->strstart;
+    UNUSED(interp);
+    return s[offset];
+#else
+    UNUSED(offset);
+    UNUSED(src);
+    no_ICU_lib(interp);
+#endif
 }
 
 /*
 
-=item C<static STRING * get_codepoints(PARROT_INTERP, const STRING *src, UINTVAL
+=item C<static STRING * ucs2_substr(PARROT_INTERP, const STRING *src, UINTVAL
 offset, UINTVAL count)>
 
 Returns the codepoints in string C<src> at position C<offset> and length
@@ -340,98 +251,27 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-get_codepoints(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
+ucs2_substr(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
-    ASSERT_ARGS(get_codepoints)
+    ASSERT_ARGS(ucs2_substr)
     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);
-#else
-    {
-        String_iter iter;
-        UINTVAL start;
-
-        STRING_ITER_INIT(interp, &iter);
-        ucs2_iter_set_position(interp, src, &iter, offset);
-        start = iter.bytepos;
-        return_string->strstart = (char *)return_string->strstart + start;
-        ucs2_iter_set_position(interp, src, &iter, offset + count);
-        return_string->bufused = iter.bytepos - start;
-    }
-#endif
-    return_string->strlen = count;
-    return_string->hashval = 0;
+    return_string->bufused  = count * sizeof (UChar);
+    return_string->strlen   = count;
+    return_string->hashval  = 0;
     return return_string;
-}
-
-/*
-
-=item C<static STRING * get_bytes(PARROT_INTERP, const STRING *src, UINTVAL
-offset, UINTVAL count)>
-
-Returns the bytes in string C<src> at position C<offset> and length C<count>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_bytes(PARROT_INTERP, SHIM(const STRING *src), SHIM(UINTVAL offset),
-        SHIM(UINTVAL count))
-{
-    ASSERT_ARGS(get_bytes)
-    UNIMPL;
-}
-
-
-/*
-
-=item C<static UINTVAL codepoints(PARROT_INTERP, const STRING *src)>
-
-Returns the number of codepoints in string C<src>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL
-codepoints(PARROT_INTERP, ARGIN(const STRING *src))
-{
-    ASSERT_ARGS(codepoints)
-#if PARROT_HAS_ICU
-    UNUSED(interp);
-    return src->bufused / sizeof (UChar);
 #else
     UNUSED(src);
+    UNUSED(offset);
+    UNUSED(count);
     no_ICU_lib(interp);
 #endif
 }
 
 /*
 
-=item C<static UINTVAL bytes(PARROT_INTERP, const STRING *src)>
-
-Returns the number of bytes in string C<src>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL
-bytes(SHIM_INTERP, ARGIN(const STRING *src))
-{
-    ASSERT_ARGS(bytes)
-    return src->bufused;
-}
-
-/*
-
 =item C<static UINTVAL ucs2_iter_get(PARROT_INTERP, const STRING *str, const
 String_iter *i, INTVAL offset)>
 
@@ -446,7 +286,7 @@
     ARGIN(const STRING *str), ARGIN(const String_iter *i), INTVAL offset)
 {
     ASSERT_ARGS(ucs2_iter_get)
-    return get_codepoint(interp, str, i->charpos + offset);
+    return ucs2_ord(interp, str, i->charpos + offset);
 }
 
 /*
@@ -607,46 +447,50 @@
 #endif
 }
 
-/*
-
-=item C<void Parrot_encoding_ucs2_init(PARROT_INTERP)>
+static STR_VTABLE Parrot_ucs2_encoding = {
+    0,
+    "ucs2",
+    NULL,
+    2, /* Max bytes per codepoint */
+
+    ucs2_to_encoding,
+    unicode_chr,
+
+    encoding_equal,
+    encoding_compare,
+    encoding_index,
+    encoding_rindex,
+    encoding_hash,
+    unicode_validate,
+
+    ucs2_scan,
+    ucs2_ord,
+    ucs2_substr,
+
+    encoding_is_cclass,
+    encoding_find_cclass,
+    encoding_find_not_cclass,
+
+    encoding_get_graphemes,
+    unicode_compose,
+    encoding_decompose,
+
+    unicode_upcase,
+    unicode_downcase,
+    unicode_titlecase,
+    unicode_upcase_first,
+    unicode_downcase_first,
+    unicode_titlecase_first,
+
+    ucs2_iter_get,
+    ucs2_iter_skip,
+    ucs2_iter_get_and_advance,
+    ucs2_iter_set_and_advance,
+    ucs2_iter_set_position
+};
 
-Initializes the UCS-2 encoding.
+STR_VTABLE *Parrot_ucs2_encoding_ptr = &Parrot_ucs2_encoding;
 
-=cut
-
-*/
-
-void
-Parrot_encoding_ucs2_init(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_encoding_ucs2_init)
-    ENCODING * const return_encoding = Parrot_new_encoding(interp);
-
-    static const ENCODING base_encoding = {
-        "ucs2",
-        2, /* Max bytes per codepoint 0 .. 0x10ffff */
-        to_encoding,
-        get_codepoint,
-        get_byte,
-        set_byte,
-        get_codepoints,
-        get_bytes,
-        codepoints,
-        bytes,
-        find_cclass,
-        ucs2_hash,
-        ucs2_iter_get,
-        ucs2_iter_skip,
-        ucs2_iter_get_and_advance,
-        ucs2_iter_set_and_advance,
-        ucs2_iter_set_position
-    };
-    STRUCT_COPY_FROM_STRUCT(return_encoding, base_encoding);
-    Parrot_register_encoding(interp, "ucs2", return_encoding);
-
-    return;
-}
 
 /*
 

Deleted: branches/html_cleanup/src/string/encoding/ucs2.h
==============================================================================
--- branches/html_cleanup/src/string/encoding/ucs2.h	Wed Sep 22 03:35:47 2010	(r49231)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,34 +0,0 @@
-/* ucs2.h
- *  Copyright (C) 2004, Parrot Foundation.
- *  SVN Info
- *     $Id$
- *  Overview:
- *     This is the header for the ucs2 fixed-width encoding.
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
- */
-
-#ifndef PARROT_ENCODING_UCS2_H_GUARD
-#define PARROT_ENCODING_UCS2_H_GUARD
-
-/* HEADERIZER BEGIN: src/string/encoding/ucs2.c */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-void Parrot_encoding_ucs2_init(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-#define ASSERT_ARGS_Parrot_encoding_ucs2_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: src/string/encoding/ucs2.c */
-
-#endif /* PARROT_ENCODING_UCS2_H_GUARD */
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/html_cleanup/src/string/encoding/ucs4.c
==============================================================================
--- branches/html_cleanup/src/string/encoding/ucs4.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/string/encoding/ucs4.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -19,7 +19,7 @@
 */
 
 #include "parrot/parrot.h"
-#include "../unicode.h"
+#include "shared.h"
 
 #if !PARROT_HAS_ICU
 PARROT_DOES_NOT_RETURN
@@ -31,71 +31,11 @@
 }
 #endif
 
-/* HEADERIZER HFILE: src/string/encoding/ucs4.h */
+/* HEADERIZER HFILE: none */
 
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL bytes(SHIM_INTERP, ARGIN(const STRING *src))
-        __attribute__nonnull__(2);
-
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL codepoints(PARROT_INTERP, ARGIN(const STRING *src))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL find_cclass(PARROT_INTERP,
-    ARGIN(const STRING *s),
-    ARGIN(const INTVAL *typetable),
-    INTVAL flags,
-    UINTVAL pos,
-    UINTVAL end)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-static UINTVAL get_byte(PARROT_INTERP,
-    SHIM(const STRING *src),
-    SHIM(UINTVAL offset))
-        __attribute__nonnull__(1);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_bytes(PARROT_INTERP,
-    SHIM(const STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL count))
-        __attribute__nonnull__(1);
-
-static UINTVAL get_codepoint(PARROT_INTERP,
-    ARGIN(const STRING *src),
-    UINTVAL offset)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_codepoints(PARROT_INTERP,
-    ARGIN(const STRING *src),
-    UINTVAL offset,
-    UINTVAL count)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void set_byte(PARROT_INTERP,
-    SHIM(const STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL byte))
-        __attribute__nonnull__(1);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
 static size_t ucs4_hash(PARROT_INTERP,
     ARGIN(const STRING *s),
     size_t hashval)
@@ -146,30 +86,32 @@
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*i);
 
-#define ASSERT_ARGS_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_find_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s) \
-    , PARROT_ASSERT_ARG(typetable))
-#define ASSERT_ARGS_get_byte __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_get_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_get_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_get_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_set_byte __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_to_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
+static UINTVAL ucs4_ord(PARROT_INTERP,
+    ARGIN(const STRING *src),
+    UINTVAL offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+static UINTVAL ucs4_scan(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static STRING * ucs4_substr(PARROT_INTERP,
+    ARGIN(const STRING *src),
+    UINTVAL offset,
+    UINTVAL count)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static STRING * ucs4_to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
 #define ASSERT_ARGS_ucs4_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))
@@ -193,18 +135,29 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(str) \
     , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_ucs4_ord __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_ucs4_scan __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_ucs4_substr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_ucs4_to_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
-#include "ucs4.h"
-
 #if PARROT_HAS_ICU
 #  include <unicode/ustring.h>
 #endif
 
+
 /*
 
-=item C<static STRING * to_encoding(PARROT_INTERP, const STRING *src)>
+=item C<static STRING * ucs4_to_encoding(PARROT_INTERP, const STRING *src)>
 
 Converts the string C<src> to this particular encoding.
 
@@ -215,9 +168,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
+ucs4_to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
 {
-    ASSERT_ARGS(to_encoding)
+    ASSERT_ARGS(ucs4_to_encoding)
 #if PARROT_HAS_ICU
     if (src->encoding == Parrot_ucs4_encoding_ptr) {
         return Parrot_str_clone(interp, src);
@@ -225,11 +178,12 @@
     else {
         UINTVAL len = Parrot_str_length(interp, src);
         STRING *res = Parrot_str_new_init(interp, NULL, len * sizeof (UChar32),
-                           Parrot_ucs4_encoding_ptr, Parrot_unicode_charset_ptr, 0);
+                           Parrot_ucs4_encoding_ptr, 0);
         UChar32 *buf = (UChar32 *) res->strstart;
         UINTVAL offs;
+        /* TODO: use an iterator */
         for (offs = 0; offs < len; offs++){
-            buf[offs] = src->encoding->get_codepoint(interp, src, offs);
+            buf[offs] = STRING_ord(interp, src, offs);
         };
         res->strlen  = len;
         res->bufused = len * sizeof (UChar32);
@@ -243,27 +197,26 @@
 
 }
 
+
 /*
 
-=item C<static UINTVAL get_codepoint(PARROT_INTERP, const STRING *src, UINTVAL
-offset)>
+=item C<static UINTVAL ucs4_scan(PARROT_INTERP, const STRING *src)>
 
-Returns the codepoint in string C<src> at position C<offset>.
+Returns the number of codepoints in string C<src>.
 
 =cut
 
 */
 
+PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-get_codepoint(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset)
+ucs4_scan(PARROT_INTERP, ARGIN(const STRING *src))
 {
-    ASSERT_ARGS(get_codepoint)
+    ASSERT_ARGS(ucs4_scan)
 #if PARROT_HAS_ICU
-    const UChar32 * const s = (const UChar32*) src->strstart;
     UNUSED(interp);
-    return s[offset];
+    return src->bufused / sizeof (UChar32);
 #else
-    UNUSED(offset);
     UNUSED(src);
     no_ICU_lib(interp);
 #endif
@@ -272,77 +225,34 @@
 
 /*
 
-=item C<static UINTVAL find_cclass(PARROT_INTERP, const STRING *s, const INTVAL
-*typetable, INTVAL flags, UINTVAL pos, UINTVAL end)>
-
-Stub, the charset level handles this for unicode strings.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL
-find_cclass(PARROT_INTERP, ARGIN(const STRING *s), ARGIN(const INTVAL *typetable),
-INTVAL flags, UINTVAL pos, UINTVAL end)
-{
-    ASSERT_ARGS(find_cclass)
-
-    UNUSED(s);
-    UNUSED(typetable);
-    UNUSED(flags);
-    UNUSED(pos);
-    UNUSED(end);
-
-    Parrot_ex_throw_from_c_args(interp, NULL,
-        EXCEPTION_UNIMPLEMENTED,
-        "No find_cclass support in unicode encoding plugins");
-}
-
-/*
-
-=item C<static UINTVAL get_byte(PARROT_INTERP, const STRING *src, UINTVAL
+=item C<static UINTVAL ucs4_ord(PARROT_INTERP, const STRING *src, UINTVAL
 offset)>
 
-Returns the byte in string C<src> at position C<offset>.
+Returns the codepoint in string C<src> at position C<offset>.
 
 =cut
 
 */
 
 static UINTVAL
-get_byte(PARROT_INTERP, SHIM(const STRING *src), SHIM(UINTVAL offset))
+ucs4_ord(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset)
 {
-    ASSERT_ARGS(get_byte)
-    Parrot_ex_throw_from_c_args(interp, NULL,
-        EXCEPTION_UNIMPLEMENTED,
-        "No get_byte for UCS-4");
+    ASSERT_ARGS(ucs4_ord)
+#if PARROT_HAS_ICU
+    const UChar32 * const s = (const UChar32*) src->strstart;
+    UNUSED(interp);
+    return s[offset];
+#else
+    UNUSED(offset);
+    UNUSED(src);
+    no_ICU_lib(interp);
+#endif
 }
 
-/*
-
-=item C<static void set_byte(PARROT_INTERP, const STRING *src, UINTVAL offset,
-UINTVAL byte)>
-
-Sets, in string C<src> at position C<offset>, the byte C<byte>.
-
-=cut
-
-*/
-
-static void
-set_byte(PARROT_INTERP, SHIM(const STRING *src), SHIM(UINTVAL offset),
-        SHIM(UINTVAL byte))
-{
-    ASSERT_ARGS(set_byte)
-    Parrot_ex_throw_from_c_args(interp, NULL,
-        EXCEPTION_UNIMPLEMENTED,
-        "No set_byte for UCS-4");
-}
 
 /*
 
-=item C<static STRING * get_codepoints(PARROT_INTERP, const STRING *src, UINTVAL
+=item C<static STRING * ucs4_substr(PARROT_INTERP, const STRING *src, UINTVAL
 offset, UINTVAL count)>
 
 Returns the C<count> codepoints stored at position C<offset> in string
@@ -355,12 +265,12 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-get_codepoints(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
+ucs4_substr(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
-    ASSERT_ARGS(get_codepoints)
+    ASSERT_ARGS(ucs4_substr)
 #if PARROT_HAS_ICU
     return Parrot_str_new_init(interp, (char*)src->strstart + offset * sizeof (UChar32),
-                               count * sizeof (UChar32), src->encoding, src->charset, 0);
+                               count * sizeof (UChar32), src->encoding, 0);
 #else
     UNUSED(src);
     UNUSED(offset);
@@ -369,71 +279,6 @@
 #endif
 }
 
-/*
-
-=item C<static STRING * get_bytes(PARROT_INTERP, const STRING *src, UINTVAL
-offset, UINTVAL count)>
-
-Returns the bytes in string C<src> at position C<offset> and length C<count>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_bytes(PARROT_INTERP, SHIM(const STRING *src), SHIM(UINTVAL offset),
-        SHIM(UINTVAL count))
-{
-    ASSERT_ARGS(get_bytes)
-    Parrot_ex_throw_from_c_args(interp, NULL,
-        EXCEPTION_UNIMPLEMENTED,
-        "No get_bytes for UCS-4");
-}
-
-
-/*
-
-=item C<static UINTVAL codepoints(PARROT_INTERP, const STRING *src)>
-
-Returns the number of codepoints in string C<src>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL
-codepoints(PARROT_INTERP, ARGIN(const STRING *src))
-{
-    ASSERT_ARGS(codepoints)
-#if PARROT_HAS_ICU
-    UNUSED(interp);
-    return src->bufused / sizeof (UChar32);
-#else
-    UNUSED(src);
-    no_ICU_lib(interp);
-#endif
-}
-
-/*
-
-=item C<static UINTVAL bytes(PARROT_INTERP, const STRING *src)>
-
-Returns the number of bytes in string C<src>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL
-bytes(SHIM_INTERP, ARGIN(const STRING *src))
-{
-    ASSERT_ARGS(bytes)
-    return src->bufused;
-}
 
 /*
 
@@ -451,9 +296,10 @@
     ARGIN(const STRING *str), ARGIN(const String_iter *i), INTVAL offset)
 {
     ASSERT_ARGS(ucs4_iter_get)
-    return get_codepoint(interp, str, i->charpos + offset);
+    return ucs4_ord(interp, str, i->charpos + offset);
 }
 
+
 /*
 
 =item C<static void ucs4_iter_skip(PARROT_INTERP, const STRING *str, String_iter
@@ -482,6 +328,7 @@
 #endif
 }
 
+
 /*
 
 =item C<static UINTVAL ucs4_iter_get_and_advance(PARROT_INTERP, const STRING
@@ -512,6 +359,7 @@
 #endif
 }
 
+
 /*
 
 =item C<static void ucs4_iter_set_and_advance(PARROT_INTERP, STRING *str,
@@ -542,6 +390,7 @@
 #endif
 }
 
+
 /*
 
 =item C<static void ucs4_iter_set_position(PARROT_INTERP, const STRING *str,
@@ -570,7 +419,7 @@
 #endif
 }
 
-#if PARROT_HAS_ICU
+
 /*
 
 =item C<static size_t ucs4_hash(PARROT_INTERP, const STRING *s, size_t hashval)>
@@ -585,7 +434,7 @@
 ucs4_hash(PARROT_INTERP, ARGIN(const STRING *s), size_t hashval)
 {
     ASSERT_ARGS(ucs4_hash)
-    const UChar32 *pos = (const UChar32*) s->strstart;
+    const Parrot_UInt4 *pos = (const Parrot_UInt4 *) s->strstart;
     UINTVAL len = s->strlen;
     UNUSED(interp);
 
@@ -596,52 +445,52 @@
 
     return hashval;
 }
-#endif
 
-/*
-
-=item C<void Parrot_encoding_ucs4_init(PARROT_INTERP)>
-
-Initializes the UCS-4 encoding.
-
-=cut
-
-*/
 
-void
-Parrot_encoding_ucs4_init(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_encoding_ucs4_init)
-    ENCODING * const return_encoding = Parrot_new_encoding(interp);
+static STR_VTABLE Parrot_ucs4_encoding = {
+    0,
+    "ucs4",
+    NULL,
+    4, /* Max bytes per codepoint */
+
+    ucs4_to_encoding,
+    unicode_chr,
+
+    encoding_equal,
+    encoding_compare,
+    encoding_index,
+    encoding_rindex,
+    ucs4_hash,
+    unicode_validate,
+
+    ucs4_scan,
+    ucs4_ord,
+    ucs4_substr,
+
+    encoding_is_cclass,
+    encoding_find_cclass,
+    encoding_find_not_cclass,
+
+    encoding_get_graphemes,
+    unicode_compose,
+    encoding_decompose,
+
+    unicode_upcase,
+    unicode_downcase,
+    unicode_titlecase,
+    unicode_upcase_first,
+    unicode_downcase_first,
+    unicode_titlecase_first,
+
+    ucs4_iter_get,
+    ucs4_iter_skip,
+    ucs4_iter_get_and_advance,
+    ucs4_iter_set_and_advance,
+    ucs4_iter_set_position
+};
 
-    static const ENCODING base_encoding = {
-        "ucs4",
-        4, /* Max bytes per codepoint */
-        to_encoding,
-        get_codepoint,
-        get_byte,
-        set_byte,
-        get_codepoints,
-        get_bytes,
-        codepoints,
-        bytes,
-        find_cclass,
-#if PARROT_HAS_ICU
-        ucs4_hash,
-#else
-        NULL,
-#endif
-        ucs4_iter_get,
-        ucs4_iter_skip,
-        ucs4_iter_get_and_advance,
-        ucs4_iter_set_and_advance,
-        ucs4_iter_set_position
-    };
-    STRUCT_COPY_FROM_STRUCT(return_encoding, base_encoding);
-    Parrot_register_encoding(interp, "ucs4", return_encoding);
+STR_VTABLE *Parrot_ucs4_encoding_ptr = &Parrot_ucs4_encoding;
 
-    return;
-}
 
 /*
 

Deleted: branches/html_cleanup/src/string/encoding/ucs4.h
==============================================================================
--- branches/html_cleanup/src/string/encoding/ucs4.h	Wed Sep 22 03:35:47 2010	(r49231)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,27 +0,0 @@
-/*
-Copyright (C) 2010, Parrot Foundation.
-$Id$
-*/
-
-#ifndef PARROT_ENCODING_UCS4_H_GUARD
-#define PARROT_ENCODING_UCS4_H_GUARD
-
-/* HEADERIZER BEGIN: src/string/encoding/ucs4.c */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-void Parrot_encoding_ucs4_init(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-#define ASSERT_ARGS_Parrot_encoding_ucs4_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: src/string/encoding/ucs4.c */
-
-#endif /* PARROT_ENCODING_UCS4_H_GUARD */
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/html_cleanup/src/string/encoding/utf16.c
==============================================================================
--- branches/html_cleanup/src/string/encoding/utf16.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/string/encoding/utf16.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -19,75 +19,13 @@
 */
 
 #include "parrot/parrot.h"
-#include "../unicode.h"
+#include "shared.h"
 
-/* HEADERIZER HFILE: src/string/encoding/utf16.h */
+/* HEADERIZER HFILE: none */
 
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL bytes(SHIM_INTERP, ARGIN(const STRING *src))
-        __attribute__nonnull__(2);
-
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL codepoints(PARROT_INTERP, ARGIN(const STRING *src))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL find_cclass(PARROT_INTERP,
-    ARGIN(const STRING *s),
-    ARGIN(const INTVAL *typetable),
-    INTVAL flags,
-    UINTVAL pos,
-    UINTVAL end)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-static UINTVAL get_byte(SHIM_INTERP,
-    ARGIN(const STRING *src),
-    UINTVAL offset)
-        __attribute__nonnull__(2);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_bytes(PARROT_INTERP,
-    ARGIN(const STRING *src),
-    UINTVAL offset,
-    UINTVAL count)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static UINTVAL get_codepoint(PARROT_INTERP,
-    ARGIN(const STRING *src),
-    UINTVAL offset)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_codepoints(PARROT_INTERP,
-    ARGIN(const STRING *src),
-    UINTVAL offset,
-    UINTVAL count)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void set_byte(PARROT_INTERP,
-    ARGIN(const STRING *src),
-    UINTVAL offset,
-    UINTVAL byte)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
 static UINTVAL utf16_iter_get(PARROT_INTERP,
     ARGIN(const STRING *str),
     ARGIN(const String_iter *i),
@@ -133,32 +71,32 @@
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*i);
 
-#define ASSERT_ARGS_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_find_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s) \
-    , PARROT_ASSERT_ARG(typetable))
-#define ASSERT_ARGS_get_byte __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_get_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#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_set_byte __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_to_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
+static UINTVAL utf16_ord(PARROT_INTERP,
+    ARGIN(const STRING *src),
+    UINTVAL offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+static UINTVAL utf16_scan(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static STRING * utf16_substr(PARROT_INTERP,
+    ARGIN(const STRING *src),
+    UINTVAL offset,
+    UINTVAL count)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static STRING * utf16_to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
 #define ASSERT_ARGS_utf16_iter_get __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(str) \
@@ -179,11 +117,21 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(str) \
     , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_utf16_ord __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_utf16_scan __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_utf16_substr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_utf16_to_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
-#include "utf16.h"
-
 #if PARROT_HAS_ICU
 #  include <unicode/utf16.h>
 #  include <unicode/ustring.h>
@@ -195,7 +143,7 @@
 
 /*
 
-=item C<static STRING * to_encoding(PARROT_INTERP, const STRING *src)>
+=item C<static STRING * utf16_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
@@ -209,9 +157,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
+utf16_to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
 {
-    ASSERT_ARGS(to_encoding)
+    ASSERT_ARGS(utf16_to_encoding)
 #if PARROT_HAS_ICU
     UErrorCode err;
     int dest_len;
@@ -220,8 +168,10 @@
     int src_len;
     STRING *result;
 
-    if (src->encoding == Parrot_utf16_encoding_ptr ||
-            src->encoding == Parrot_ucs2_encoding_ptr)
+    if (src->encoding == Parrot_utf16_encoding_ptr
+    ||  src->encoding == Parrot_ucs2_encoding_ptr)
+        /* we have to use clone instead of copy because the Unicode upcase
+         * and downcase functions assume to get an unshared buffer */
         return Parrot_str_clone(interp, src);
 
     result = Parrot_gc_new_string_header(interp, 0);
@@ -231,7 +181,6 @@
      */
     src_len = src->strlen;
     if (!src_len) {
-        result->charset  = Parrot_unicode_charset_ptr;
         result->encoding = Parrot_ucs2_encoding_ptr;
         result->strlen = result->bufused = 0;
         return result;
@@ -240,8 +189,8 @@
     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) {
+    if (src->encoding == Parrot_latin1_encoding_ptr ||
+            src->encoding == Parrot_ascii_encoding_ptr) {
         for (dest_len = 0; dest_len < (int)src->strlen; ++dest_len) {
             p[dest_len] = (UChar)((unsigned char*)src->strstart)[dest_len];
         }
@@ -264,7 +213,6 @@
         }
     }
     result->bufused = dest_len * sizeof (UChar);
-    result->charset  = Parrot_unicode_charset_ptr;
     result->encoding = Parrot_utf16_encoding_ptr;
     result->strlen = src_len;
 
@@ -280,118 +228,76 @@
 
 /*
 
-=item C<static UINTVAL get_codepoint(PARROT_INTERP, const STRING *src, UINTVAL
-offset)>
+=item C<static UINTVAL utf16_scan(PARROT_INTERP, const STRING *src)>
 
-Returns the codepoint in string C<src> at position C<offset>.
+Returns the number of codepoints in string C<src> by scanning the whole
+string.
 
 =cut
 
 */
 
+PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-get_codepoint(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset)
+utf16_scan(PARROT_INTERP, ARGIN(const STRING *src))
 {
-    ASSERT_ARGS(get_codepoint)
+    ASSERT_ARGS(utf16_scan)
 #if PARROT_HAS_ICU
     const UChar * const s = (UChar*) src->strstart;
-    UINTVAL c, pos;
-    UNUSED(interp);
-
-    pos = 0;
-    U16_FWD_N_UNSAFE(s, pos, offset);
-    U16_GET_UNSAFE(s, pos, c);
-    return c;
+    UINTVAL pos = 0, charpos = 0;
+    /*
+     * this is used to initially calculate src->strlen,
+     * therefore we must scan the whole string
+     */
+    while (pos * sizeof (UChar) < src->bufused) {
+        U16_FWD_1_UNSAFE(s, pos);
+        ++charpos;
+    }
+    return charpos;
 #else
     UNUSED(src);
-    UNUSED(offset);
 
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no ICU lib loaded");
 #endif
 }
 
-
-/*
-
-=item C<static UINTVAL find_cclass(PARROT_INTERP, const STRING *s, const INTVAL
-*typetable, INTVAL flags, UINTVAL pos, UINTVAL end)>
-
-Stub, the charset level handles this for unicode strings.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL
-find_cclass(PARROT_INTERP, ARGIN(const STRING *s), ARGIN(const INTVAL *typetable),
-INTVAL flags, UINTVAL pos, UINTVAL end)
-{
-    UNUSED(s);
-    UNUSED(typetable);
-    UNUSED(flags);
-    UNUSED(pos);
-    UNUSED(end);
-
-    Parrot_ex_throw_from_c_args(interp, NULL,
-        EXCEPTION_UNIMPLEMENTED,
-        "No find_cclass support in unicode encoding plugins");
-}
-
 /*
 
-=item C<static UINTVAL get_byte(PARROT_INTERP, const STRING *src, UINTVAL
+=item C<static UINTVAL utf16_ord(PARROT_INTERP, const STRING *src, UINTVAL
 offset)>
 
-Returns the byte in string C<src> at position C<offset>.
+Returns the codepoint in string C<src> at position C<offset>.
 
 =cut
 
 */
 
 static UINTVAL
-get_byte(SHIM_INTERP, ARGIN(const STRING *src), UINTVAL offset)
+utf16_ord(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset)
 {
-    ASSERT_ARGS(get_byte)
-    const unsigned char * const contents = (unsigned char *)src->strstart;
-    if (offset >= src->bufused) {
-/*        Parrot_ex_throw_from_c_args(interp, NULL, 0,
-                "get_byte past the end of the buffer (%i of %i)",
-                offset, src->bufused); */
-        return 0;
-    }
-    return contents[offset];
-}
-
-/*
-
-=item C<static void set_byte(PARROT_INTERP, const STRING *src, UINTVAL offset,
-UINTVAL byte)>
-
-Sets, in string C<src> at position C<offset>, the byte C<byte>.
-
-=cut
-
-*/
-
-static void
-set_byte(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL byte)
-{
-    ASSERT_ARGS(set_byte)
-    unsigned char *contents;
+    ASSERT_ARGS(utf16_ord)
+#if PARROT_HAS_ICU
+    const UChar * const s = (UChar*) src->strstart;
+    UINTVAL c, pos;
+    UNUSED(interp);
 
-    if (offset >= src->bufused)
-        Parrot_ex_throw_from_c_args(interp, NULL, 0,
-            "set_byte past the end of the buffer");
+    pos = 0;
+    U16_FWD_N_UNSAFE(s, pos, offset);
+    U16_GET_UNSAFE(s, pos, c);
+    return c;
+#else
+    UNUSED(src);
+    UNUSED(offset);
 
-    contents = (unsigned char *)src->strstart;
-    contents[offset] = (unsigned char)byte;
+    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
+        "no ICU lib loaded");
+#endif
 }
 
 /*
 
-=item C<static STRING * get_codepoints(PARROT_INTERP, const STRING *src, UINTVAL
+=item C<static STRING * utf16_substr(PARROT_INTERP, const STRING *src, UINTVAL
 offset, UINTVAL count)>
 
 Returns the codepoints in string C<src> at position C<offset> and length
@@ -404,9 +310,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-get_codepoints(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
+utf16_substr(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
-    ASSERT_ARGS(get_codepoints)
+    ASSERT_ARGS(utf16_substr)
 #if PARROT_HAS_ICU
     UINTVAL pos = 0, start;
     const UChar * const s = (UChar*) src->strstart;
@@ -430,84 +336,6 @@
 #endif
 }
 
-
-/*
-
-=item C<static STRING * get_bytes(PARROT_INTERP, const STRING *src, UINTVAL
-offset, UINTVAL count)>
-
-Returns the bytes in string C<src> at position C<offset> and length C<count>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_bytes(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
-{
-    ASSERT_ARGS(get_bytes)
-    UNUSED(interp);
-    UNUSED(src);
-    UNUSED(offset)
-    UNUSED(count);
-    UNIMPL;
-}
-
-/*
-
-=item C<static UINTVAL codepoints(PARROT_INTERP, const STRING *src)>
-
-Returns the number of codepoints in string C<src>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL
-codepoints(PARROT_INTERP, ARGIN(const STRING *src))
-{
-    ASSERT_ARGS(codepoints)
-#if PARROT_HAS_ICU
-    const UChar * const s = (UChar*) src->strstart;
-    UINTVAL pos = 0, charpos = 0;
-    /*
-     * this is used to initially calculate src->strlen,
-     * therefore we must scan the whole string
-     */
-    while (pos * sizeof (UChar) < src->bufused) {
-        U16_FWD_1_UNSAFE(s, pos);
-        ++charpos;
-    }
-    return charpos;
-#else
-    UNUSED(src);
-
-    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
-        "no ICU lib loaded");
-#endif
-}
-
-/*
-
-=item C<static UINTVAL bytes(PARROT_INTERP, const STRING *src)>
-
-Returns the number of bytes in string C<src>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL
-bytes(SHIM_INTERP, ARGIN(const STRING *src))
-{
-    ASSERT_ARGS(bytes)
-    return src->bufused;
-}
-
 /*
 
 =item C<static UINTVAL utf16_iter_get(PARROT_INTERP, const STRING *str, const
@@ -691,46 +519,51 @@
 #endif
 }
 
-/*
-
-=item C<void Parrot_encoding_utf16_init(PARROT_INTERP)>
 
-Initializes the UTF-16 encoding.
+static STR_VTABLE Parrot_utf16_encoding = {
+    0,
+    "utf16",
+    NULL,
+    4, /* Max bytes per codepoint */
+
+    utf16_to_encoding,
+    unicode_chr,
+
+    encoding_equal,
+    encoding_compare,
+    encoding_index,
+    encoding_rindex,
+    encoding_hash,
+    unicode_validate,
+
+    utf16_scan,
+    utf16_ord,
+    utf16_substr,
+
+    encoding_is_cclass,
+    encoding_find_cclass,
+    encoding_find_not_cclass,
+
+    encoding_get_graphemes,
+    unicode_compose,
+    encoding_decompose,
+
+    unicode_upcase,
+    unicode_downcase,
+    unicode_titlecase,
+    unicode_upcase_first,
+    unicode_downcase_first,
+    unicode_titlecase_first,
+
+    utf16_iter_get,
+    utf16_iter_skip,
+    utf16_iter_get_and_advance,
+    utf16_iter_set_and_advance,
+    utf16_iter_set_position
+};
 
-=cut
-
-*/
+STR_VTABLE *Parrot_utf16_encoding_ptr = &Parrot_utf16_encoding;
 
-void
-Parrot_encoding_utf16_init(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_encoding_utf16_init)
-    ENCODING * const return_encoding = Parrot_new_encoding(interp);
-
-    static const ENCODING base_encoding = {
-        "utf16",
-        4, /* Max bytes per codepoint 0 .. 0x10ffff */
-        to_encoding,
-        get_codepoint,
-        get_byte,
-        set_byte,
-        get_codepoints,
-        get_bytes,
-        codepoints,
-        bytes,
-        find_cclass,
-        NULL,
-        utf16_iter_get,
-        utf16_iter_skip,
-        utf16_iter_get_and_advance,
-        utf16_iter_set_and_advance,
-        utf16_iter_set_position
-    };
-    STRUCT_COPY_FROM_STRUCT(return_encoding, base_encoding);
-    Parrot_register_encoding(interp, "utf16", return_encoding);
-
-    return;
-}
 
 /*
 

Deleted: branches/html_cleanup/src/string/encoding/utf16.h
==============================================================================
--- branches/html_cleanup/src/string/encoding/utf16.h	Wed Sep 22 03:35:47 2010	(r49231)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,34 +0,0 @@
-/* utf16.h
- *  Copyright (C) 2004-2007, Parrot Foundation.
- *  SVN Info
- *     $Id$
- *  Overview:
- *     This is the header for the utf16 variable-width encoding.
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
- */
-
-#ifndef PARROT_ENCODING_UTF16_H_GUARD
-#define PARROT_ENCODING_UTF16_H_GUARD
-
-/* HEADERIZER BEGIN: src/string/encoding/utf16.c */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-void Parrot_encoding_utf16_init(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-#define ASSERT_ARGS_Parrot_encoding_utf16_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: src/string/encoding/utf16.c */
-
-#endif /* PARROT_ENCODING_UTF16_H_GUARD */
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/html_cleanup/src/string/encoding/utf8.c
==============================================================================
--- branches/html_cleanup/src/string/encoding/utf8.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/string/encoding/utf8.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -20,75 +20,13 @@
 
 #include "parrot/parrot.h"
 #include "../unicode.h"
-#include "utf8.h"
+#include "shared.h"
 
-/* HEADERIZER HFILE: src/string/encoding/utf8.h */
+/* HEADERIZER HFILE: none */
 
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_PURE_FUNCTION
-static UINTVAL bytes(SHIM_INTERP, ARGIN(const STRING *src))
-        __attribute__nonnull__(2);
-
-static UINTVAL codepoints(PARROT_INTERP, ARGIN(const STRING *src))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL find_cclass(PARROT_INTERP,
-    SHIM(const STRING *s),
-    SHIM(const INTVAL *typetable),
-    SHIM(INTVAL flags),
-    SHIM(UINTVAL pos),
-    SHIM(UINTVAL end))
-        __attribute__nonnull__(1);
-
-static UINTVAL get_byte(SHIM_INTERP,
-    ARGIN(const STRING *src),
-    UINTVAL offset)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_bytes(PARROT_INTERP,
-    ARGIN(const STRING *src),
-    UINTVAL offset,
-    UINTVAL count)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static UINTVAL get_codepoint(PARROT_INTERP,
-    ARGIN(const STRING *src),
-    UINTVAL offset)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_codepoints(PARROT_INTERP,
-    ARGIN(const STRING *src),
-    UINTVAL offset,
-    UINTVAL count)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void set_byte(PARROT_INTERP,
-    ARGIN(const STRING *src),
-    UINTVAL offset,
-    UINTVAL byte)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CAN_RETURN_NULL
-static STRING * to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static UINTVAL utf8_characters(PARROT_INTERP,
-    ARGIN(const utf8_t *ptr),
-    UINTVAL byte_len)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
 static UINTVAL utf8_decode(PARROT_INTERP, ARGIN(const utf8_t *ptr))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -140,6 +78,20 @@
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*i);
 
+static UINTVAL utf8_ord(PARROT_INTERP,
+    ARGIN(const STRING *src),
+    UINTVAL offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static UINTVAL utf8_scan(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static UINTVAL utf8_scan2(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static const void * utf8_skip_backward(ARGIN(const void *ptr), UINTVAL n)
@@ -149,33 +101,11 @@
 static const void * utf8_skip_forward(ARGIN(const void *ptr), UINTVAL n)
         __attribute__nonnull__(1);
 
-#define ASSERT_ARGS_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_find_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_get_byte __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_get_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#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_set_byte __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_to_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_utf8_characters __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(ptr))
+PARROT_CAN_RETURN_NULL
+static STRING * utf8_to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
 #define ASSERT_ARGS_utf8_decode __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(ptr))
@@ -200,10 +130,22 @@
 #define ASSERT_ARGS_utf8_iter_skip __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(str) \
     , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_utf8_ord __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_utf8_scan __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_utf8_scan2 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_utf8_skip_backward __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(ptr))
 #define ASSERT_ARGS_utf8_skip_forward __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(ptr))
+#define ASSERT_ARGS_utf8_to_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -229,25 +171,96 @@
     4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6      /* cjk etc. */
 };
 
+
 /*
 
-=item C<static UINTVAL utf8_characters(PARROT_INTERP, const utf8_t *ptr, UINTVAL
-byte_len)>
+=item C<static STRING * utf8_to_encoding(PARROT_INTERP, const STRING *src)>
 
-Returns the number of characters in the C<byte_len> bytes from C<*ptr>.
+Converts the string C<src> to this particular encoding.  If C<dest> is
+provided, it will contain the result.  Otherwise this function operates in
+place.
 
-XXX This function is unused.
+=cut
+
+*/
+
+PARROT_CAN_RETURN_NULL
+static STRING *
+utf8_to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(utf8_to_encoding)
+    STRING *result;
+    const STR_VTABLE *src_encoding = src->encoding;
+    UINTVAL dest_len, dest_pos, src_len;
+    unsigned char *p;
+
+    if (src_encoding == Parrot_utf8_encoding_ptr)
+        return Parrot_str_clone(interp, src);
+
+    src_len          = src->strlen;
+    result           = Parrot_gc_new_string_header(interp, 0);
+    result->encoding = Parrot_utf8_encoding_ptr;
+    result->strlen   = src_len;
+
+    if (!src_len)
+        return result;
+
+    Parrot_gc_allocate_string_storage(interp, result, src_len);
+    p = (unsigned char *)result->strstart;
+
+    if (src_encoding == Parrot_ascii_encoding_ptr) {
+        for (dest_len = 0; dest_len < src_len; ++dest_len) {
+            p[dest_len] = ((unsigned char*)src->strstart)[dest_len];
+        }
+        result->bufused = dest_len;
+    }
+    else {
+        String_iter src_iter;
+        STRING_ITER_INIT(interp, &src_iter);
+        dest_len = src_len;
+        dest_pos = 0;
+        while (src_iter.charpos < src_len) {
+            const UINTVAL c = src_encoding->iter_get_and_advance(interp, src, &src_iter);
+            unsigned char *new_pos;
+            unsigned char *pos;
+
+            if (dest_len - dest_pos < 6) {
+                UINTVAL need = (UINTVAL)((src->strlen - src_iter.charpos + 1) * 1.5);
+                if (need < 16)
+                    need = 16;
+                dest_len += need;
+                result->bufused = dest_pos;
+                Parrot_gc_reallocate_string_storage(interp, result, dest_len);
+                p = (unsigned char *)result->strstart;
+            }
+
+            pos = p + dest_pos;
+            new_pos = (unsigned char *)utf8_encode(interp, pos, c);
+            dest_pos += (new_pos - pos);
+        }
+        result->bufused = dest_pos;
+    }
+
+    return result;
+}
+
+
+/*
+
+=item C<static UINTVAL utf8_scan(PARROT_INTERP, const STRING *src)>
+
+Returns the number of characters in string C<str> by scanning the string.
 
 =cut
 
 */
 
 static UINTVAL
-utf8_characters(PARROT_INTERP, ARGIN(const utf8_t *ptr), UINTVAL byte_len)
+utf8_scan(PARROT_INTERP, ARGIN(const STRING *src))
 {
-    ASSERT_ARGS(utf8_characters)
-    const utf8_t *u8ptr = ptr;
-    const utf8_t *u8end = u8ptr + byte_len;
+    ASSERT_ARGS(utf8_scan)
+    const utf8_t *u8ptr = (const utf8_t *)src->strstart;
+    const utf8_t *u8end = (const utf8_t *)(src->strstart + src->bufused);
     UINTVAL characters = 0;
 
     while (u8ptr < u8end) {
@@ -262,6 +275,53 @@
     return characters;
 }
 
+
+/*
+
+=item C<static UINTVAL utf8_scan2(PARROT_INTERP, const STRING *src)>
+
+Returns the number of codepoints in string C<src>.
+
+=cut
+
+*/
+
+static UINTVAL
+utf8_scan2(PARROT_INTERP, ARGIN(const STRING *src))
+{
+    ASSERT_ARGS(utf8_scan2)
+    String_iter iter;
+    /*
+     * this is used to initially calculate src->strlen,
+     * therefore we must scan the whole string
+     */
+    STRING_ITER_INIT(interp, &iter);
+    while (iter.bytepos < src->bufused)
+        utf8_iter_get_and_advance(interp, src, &iter);
+    return iter.charpos;
+}
+
+
+/*
+
+=item C<static UINTVAL utf8_ord(PARROT_INTERP, const STRING *src, UINTVAL
+offset)>
+
+Returns the codepoint in string C<src> at position C<offset>.
+
+=cut
+
+*/
+
+static UINTVAL
+utf8_ord(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset)
+{
+    ASSERT_ARGS(utf8_ord)
+    const utf8_t * const start = (const utf8_t *)utf8_skip_forward(src->strstart, offset);
+    return utf8_decode(interp, start);
+}
+
+
 /*
 
 =item C<static UINTVAL utf8_decode(PARROT_INTERP, const utf8_t *ptr)>
@@ -306,6 +366,7 @@
     return c;
 }
 
+
 /*
 
 =item C<static void * utf8_encode(PARROT_INTERP, void *ptr, UINTVAL c)>
@@ -343,6 +404,7 @@
     return (utf8_t *)ptr + len;
 }
 
+
 /*
 
 =item C<static const void * utf8_skip_forward(const void *ptr, UINTVAL n)>
@@ -367,6 +429,7 @@
     return u8ptr;
 }
 
+
 /*
 
 =item C<static const void * utf8_skip_backward(const void *ptr, UINTVAL n)>
@@ -396,17 +459,6 @@
     return u8ptr;
 }
 
-/*
-
-=back
-
-=head2 Iterator Functions
-
-=over 4
-
-=cut
-
-*/
 
 /*
 
@@ -436,6 +488,7 @@
     return utf8_decode(interp, u8ptr);
 }
 
+
 /*
 
 =item C<static void utf8_iter_skip(PARROT_INTERP, const STRING *str, String_iter
@@ -465,6 +518,7 @@
     i->bytepos = (const char *)u8ptr - (const char *)str->strstart;
 }
 
+
 /*
 
 =item C<static UINTVAL utf8_iter_get_and_advance(PARROT_INTERP, const STRING
@@ -515,6 +569,7 @@
     return c;
 }
 
+
 /*
 
 =item C<static void utf8_iter_set_and_advance(PARROT_INTERP, STRING *str,
@@ -541,6 +596,7 @@
     i->charpos++;
 }
 
+
 /*
 
 =item C<static void utf8_iter_set_position(PARROT_INTERP, const STRING *str,
@@ -597,326 +653,50 @@
 }
 
 
-/*
-
-=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
-place.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-static STRING *
-to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
-{
-    ASSERT_ARGS(to_encoding)
-    STRING *result;
-    const ENCODING *src_encoding;
-    UINTVAL dest_len, dest_pos, src_len;
-    unsigned char *p;
-
-    if (src->encoding == Parrot_utf8_encoding_ptr)
-        return Parrot_str_clone(interp, src);
-
-    result = Parrot_gc_new_string_header(interp, 0);
-    src_len = src->strlen;
-
-    /* save source encoding before possibly changing it */
-    src_encoding = src->encoding;
-    result->charset  = Parrot_unicode_charset_ptr;
-    result->encoding = Parrot_utf8_encoding_ptr;
-    result->strlen   = src_len;
-
-    if (!src->strlen)
-        return result;
-
-    Parrot_gc_allocate_string_storage(interp, result, src_len);
-    p = (unsigned char *)result->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];
-        }
-        result->bufused = dest_len;
-    }
-    else {
-        String_iter src_iter;
-        STRING_ITER_INIT(interp, &src_iter);
-        dest_len = src_len;
-        dest_pos = 0;
-        while (src_iter.charpos < src_len) {
-            const UINTVAL c = src_encoding->iter_get_and_advance(interp, src, &src_iter);
-            unsigned char *new_pos;
-            unsigned char *pos;
-
-            if (dest_len - dest_pos < 6) {
-                UINTVAL need = (UINTVAL)((src->strlen - src_iter.charpos + 1) * 1.5);
-                if (need < 16)
-                    need = 16;
-                dest_len += need;
-                result->bufused = dest_pos;
-                Parrot_gc_reallocate_string_storage(interp, result, dest_len);
-                p = (unsigned char *)result->strstart;
-            }
-
-            pos = p + dest_pos;
-            new_pos = (unsigned char *)utf8_encode(interp, pos, c);
-            dest_pos += (new_pos - pos);
-        }
-        result->bufused = dest_pos;
-    }
-
-    return result;
-}
-
-/*
-
-=item C<static UINTVAL get_codepoint(PARROT_INTERP, const STRING *src, UINTVAL
-offset)>
-
-Returns the codepoint in string C<src> at position C<offset>.
-
-=cut
-
-*/
-
-static UINTVAL
-get_codepoint(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset)
-{
-    ASSERT_ARGS(get_codepoint)
-    const utf8_t * const start = (const utf8_t *)utf8_skip_forward(src->strstart, offset);
-    return utf8_decode(interp, start);
-}
-
-
-/*
-
-=item C<static UINTVAL find_cclass(PARROT_INTERP, const STRING *s, const INTVAL
-*typetable, INTVAL flags, UINTVAL pos, UINTVAL end)>
-
-Stub, the charset level handles this for unicode strings.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-static UINTVAL
-find_cclass(PARROT_INTERP, SHIM(const STRING *s), SHIM(const INTVAL *typetable),
-SHIM(INTVAL flags), SHIM(UINTVAL pos), SHIM(UINTVAL end))
-{
-    Parrot_ex_throw_from_c_args(interp, NULL,
-        EXCEPTION_UNIMPLEMENTED,
-        "No find_cclass support in unicode encoding plugins");
-}
-
-/*
-
-=item C<static UINTVAL get_byte(PARROT_INTERP, const STRING *src, UINTVAL
-offset)>
-
-Returns the byte in string C<src> at position C<offset>.
-
-=cut
-
-*/
-
-static UINTVAL
-get_byte(SHIM_INTERP, ARGIN(const STRING *src), UINTVAL offset)
-{
-    ASSERT_ARGS(get_byte)
-    unsigned char *contents = (unsigned char *)src->strstart;
-    if (offset >= src->bufused) {
-/*        Parrot_ex_throw_from_c_args(interp, NULL, 0,
-                "get_byte past the end of the buffer (%i of %i)",
-                offset, src->bufused); */
-        return 0;
-    }
-    return contents[offset];
-}
-
-/*
-
-=item C<static void set_byte(PARROT_INTERP, const STRING *src, UINTVAL offset,
-UINTVAL byte)>
-
-Sets, in string C<src> at position C<offset>, the byte C<byte>.
-
-=cut
-
-*/
-
-static void
-set_byte(PARROT_INTERP, ARGIN(const STRING *src),
-        UINTVAL offset, UINTVAL byte)
-{
-    ASSERT_ARGS(set_byte)
-    unsigned char *contents;
-
-    if (offset >= src->bufused)
-        Parrot_ex_throw_from_c_args(interp, NULL, 0,
-            "set_byte past the end of the buffer");
-
-    contents = (unsigned char *)src->strstart;
-    contents[offset] = (unsigned char)byte;
-}
-
-/*
-
-=item C<static STRING * get_codepoints(PARROT_INTERP, const STRING *src, UINTVAL
-offset, UINTVAL count)>
-
-Returns the codepoints in string C<src> at position C<offset> and length
-C<count>.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_codepoints(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
-{
-    ASSERT_ARGS(get_codepoints)
-
-    STRING * const return_string = Parrot_str_copy(interp, src);
-    String_iter    iter;
-    UINTVAL        start;
-
-    STRING_ITER_INIT(interp, &iter);
-
-    if (offset)
-        utf8_iter_set_position(interp, src, &iter, offset);
-
-    start                   = iter.bytepos;
-    return_string->strstart = (char *)return_string->strstart + start;
-
-    if (count)
-        utf8_iter_set_position(interp, src, &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, const STRING *src, UINTVAL
-offset, UINTVAL count)>
-
-Returns the bytes in string C<src> at position C<offset> and length C<count>.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_bytes(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
-{
-    ASSERT_ARGS(get_bytes)
-    STRING * const return_string = Parrot_str_copy(interp, src);
-
-    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 UINTVAL codepoints(PARROT_INTERP, const STRING *src)>
-
-Returns the number of codepoints in string C<src>.
-
-=cut
-
-*/
-
-static UINTVAL
-codepoints(PARROT_INTERP, ARGIN(const STRING *src))
-{
-    ASSERT_ARGS(codepoints)
-    String_iter iter;
-    /*
-     * this is used to initially calculate src->strlen,
-     * therefore we must scan the whole string
-     */
-    STRING_ITER_INIT(interp, &iter);
-    while (iter.bytepos < src->bufused)
-        utf8_iter_get_and_advance(interp, src, &iter);
-    return iter.charpos;
-}
-
-/*
-
-=item C<static UINTVAL bytes(PARROT_INTERP, const STRING *src)>
-
-Returns the number of bytes in string C<src>.
-
-=cut
-
-*/
-
-PARROT_PURE_FUNCTION
-static UINTVAL
-bytes(SHIM_INTERP, ARGIN(const STRING *src))
-{
-    ASSERT_ARGS(bytes)
-    return src->bufused;
-}
-
-/*
-
-=item C<void Parrot_encoding_utf8_init(PARROT_INTERP)>
-
-Initializes the UTF-8 encoding.
-
-=cut
-
-*/
-
-void
-Parrot_encoding_utf8_init(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_encoding_utf8_init)
-    ENCODING * const return_encoding = Parrot_new_encoding(interp);
+static STR_VTABLE Parrot_utf8_encoding = {
+    0,
+    "utf8",
+    NULL,
+    4, /* Max bytes per codepoint */
+
+    utf8_to_encoding,
+    unicode_chr,
+
+    encoding_equal,
+    encoding_compare,
+    encoding_index,
+    encoding_rindex,
+    encoding_hash,
+    unicode_validate,
+
+    utf8_scan2,
+    utf8_ord,
+    encoding_substr,
+
+    encoding_is_cclass,
+    encoding_find_cclass,
+    encoding_find_not_cclass,
+
+    encoding_get_graphemes,
+    unicode_compose,
+    encoding_decompose,
+
+    unicode_upcase,
+    unicode_downcase,
+    unicode_titlecase,
+    unicode_upcase_first,
+    unicode_downcase_first,
+    unicode_titlecase_first,
+
+    utf8_iter_get,
+    utf8_iter_skip,
+    utf8_iter_get_and_advance,
+    utf8_iter_set_and_advance,
+    utf8_iter_set_position
+};
 
-    static const ENCODING base_encoding = {
-        "utf8",
-        4, /* Max bytes per codepoint 0 .. 0x10ffff */
-        to_encoding,
-        get_codepoint,
-        get_byte,
-        set_byte,
-        get_codepoints,
-        get_bytes,
-        codepoints,
-        bytes,
-        find_cclass,
-        NULL,
-        utf8_iter_get,
-        utf8_iter_skip,
-        utf8_iter_get_and_advance,
-        utf8_iter_set_and_advance,
-        utf8_iter_set_position
-    };
-    STRUCT_COPY_FROM_STRUCT(return_encoding, base_encoding);
-    Parrot_register_encoding(interp, "utf8", return_encoding);
+STR_VTABLE *Parrot_utf8_encoding_ptr = &Parrot_utf8_encoding;
 
-    return;
-}
 
 /*
 

Deleted: branches/html_cleanup/src/string/encoding/utf8.h
==============================================================================
--- branches/html_cleanup/src/string/encoding/utf8.h	Wed Sep 22 03:35:47 2010	(r49231)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,34 +0,0 @@
-/* utf8.h
- *  Copyright (C) 2004-2007, Parrot Foundation.
- *  SVN Info
- *     $Id$
- *  Overview:
- *     This is the header for the utf8 variable-width encoding.
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
- */
-
-#ifndef PARROT_ENCODING_UTF8_H_GUARD
-#define PARROT_ENCODING_UTF8_H_GUARD
-
-/* HEADERIZER BEGIN: src/string/encoding/utf8.c */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-void Parrot_encoding_utf8_init(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-#define ASSERT_ARGS_Parrot_encoding_utf8_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: src/string/encoding/utf8.c */
-
-#endif /* PARROT_ENCODING_UTF8_H_GUARD */
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/html_cleanup/src/string/primitives.c
==============================================================================
--- branches/html_cleanup/src/string/primitives.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/string/primitives.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -89,14 +89,15 @@
     UINTVAL workchar  = 0;
     UINTVAL charcount = 0;
     const UINTVAL len = Parrot_str_byte_length(interp, string);
+    const unsigned char * const buf = (unsigned char *)string->strstart;
 
     /* Well, not right now */
-    UINTVAL codepoint = CHARSET_GET_BYTE(interp, string, *offset);
+    UINTVAL codepoint = buf[*offset];
     ++*offset;
 
     switch (codepoint) {
       case 'x':
-        codepoint = CHARSET_GET_BYTE(interp, string, *offset);
+        codepoint = buf[*offset];
         if (codepoint >= '0' && codepoint <= '9') {
             workchar = codepoint - '0';
         }
@@ -111,7 +112,7 @@
             ++*offset;
             workchar = 0;
             for (i = 0; i < 8 && *offset < len; ++i, ++*offset) {
-                codepoint = CHARSET_GET_BYTE(interp, string, *offset);
+                codepoint = buf[*offset];
                 if (codepoint == '}') {
                     ++*offset;
                     return workchar;
@@ -145,7 +146,7 @@
         ++*offset;
         if (*offset < len) {
             workchar *= 16;
-            codepoint = CHARSET_GET_BYTE(interp, string, *offset);
+            codepoint = buf[*offset];
             if (codepoint >= '0' && codepoint <= '9') {
                 workchar += codepoint - '0';
             }
@@ -165,7 +166,7 @@
         ++*offset;
         return workchar;
       case 'c':
-        codepoint = CHARSET_GET_BYTE(interp, string, *offset);
+        codepoint = buf[*offset];
         if (codepoint >= 'A' && codepoint <= 'Z') {
             workchar = codepoint - 'A' + 1;
         }
@@ -181,7 +182,7 @@
         for (charcount = 0; charcount < 4; charcount++) {
             if (*offset < len) {
                 workchar *= 16;
-                codepoint = CHARSET_GET_BYTE(interp, string, *offset);
+                codepoint = buf[*offset];
                 if (codepoint >= '0' && codepoint <= '9') {
                     workchar += codepoint - '0';
                 }
@@ -211,7 +212,7 @@
         for (charcount = 0; charcount < 8; charcount++) {
             if (*offset < len) {
                 workchar *= 16;
-                codepoint = CHARSET_GET_BYTE(interp, string, *offset);
+                codepoint = buf[*offset];
                 if (codepoint >= '0' && codepoint <= '9') {
                     workchar += codepoint - '0';
                 }
@@ -247,7 +248,7 @@
         workchar = codepoint - '0';
         if (*offset < len) {
             workchar *= 8;
-            codepoint = CHARSET_GET_BYTE(interp, string, *offset);
+            codepoint = buf[*offset];
             if (codepoint >= '0' && codepoint <= '7') {
                 workchar += codepoint - '0';
             }
@@ -261,7 +262,7 @@
         ++*offset;
         if (*offset < len) {
             workchar *= 8;
-            codepoint = CHARSET_GET_BYTE(interp, string, *offset);
+            codepoint = buf[*offset];
             if (codepoint >= '0' && codepoint <= '7') {
                 workchar += codepoint - '0';
             }

Modified: branches/html_cleanup/src/sub.c
==============================================================================
--- branches/html_cleanup/src/sub.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/sub.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -23,6 +23,7 @@
 #include "sub.str"
 #include "pmc/pmc_sub.h"
 #include "pmc/pmc_continuation.h"
+#include "parrot/oplib/core_ops.h"
 
 /* HEADERIZER HFILE: include/parrot/sub.h */
 

Modified: branches/html_cleanup/src/thread.c
==============================================================================
--- branches/html_cleanup/src/thread.c	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/thread.c	Wed Sep 22 03:35:47 2010	(r49232)
@@ -665,7 +665,6 @@
 pt_thread_prepare_for_run(Parrot_Interp d, SHIM(Parrot_Interp s))
 {
     ASSERT_ARGS(pt_thread_prepare_for_run)
-    Parrot_setup_event_func_ptrs(d);
 }
 
 /*

Modified: branches/html_cleanup/src/vtable.tbl
==============================================================================
--- branches/html_cleanup/src/vtable.tbl	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/src/vtable.tbl	Wed Sep 22 03:35:47 2010	(r49232)
@@ -192,16 +192,6 @@
 INTVAL cmp_string(PMC* value)
 PMC* cmp_pmc(PMC* value)
 
-PMC* logical_or(PMC* value, PMC* dest)
-
-PMC* logical_and(PMC* value, PMC* dest)
-
-PMC* logical_xor(PMC* value, PMC* dest)
-
-PMC* logical_not(PMC* dest)
-void i_logical_not() :write
-
-
 [STRING]
 PMC* concatenate(PMC* value, PMC* dest)
 PMC* concatenate_str(STRING* value, PMC* dest)

Modified: branches/html_cleanup/t/compilers/imcc/syn/const.t
==============================================================================
--- branches/html_cleanup/t/compilers/imcc/syn/const.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/compilers/imcc/syn/const.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -9,7 +9,7 @@
 
 use Test::More;
 use Parrot::Config;
-use Parrot::Test tests => 34;
+use Parrot::Test tests => 35;
 
 pir_output_is( <<'CODE', <<'OUT', "globalconst 1" );
 
@@ -592,6 +592,17 @@
 12
 OUT
 
+pir_error_output_like( <<'CODE', <<'OUT', "" );
+.sub 'bus_error'
+    .local string hello
+    hello = "'Allo, 'allo, 'allo."
+    .const string hello = "Hello, Polly."
+    say hello
+.end
+CODE
+/^error:imcc:syntax error, duplicated IDENTIFIER/
+OUT
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Modified: branches/html_cleanup/t/compilers/pct/pct_hllcompiler.t
==============================================================================
--- branches/html_cleanup/t/compilers/pct/pct_hllcompiler.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/compilers/pct/pct_hllcompiler.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -7,7 +7,7 @@
 use warnings;
 use lib qw(t . lib ../lib ../../lib ../../../lib);
 use Test::More;
-use Parrot::Test tests => 5;
+use Parrot::Test tests => 6;
 
 pir_output_is( <<'CODE', <<'OUT', 'some of the auxiliary methods' );
 
@@ -198,6 +198,72 @@
 omgwtf!
 OUT
 
+pir_output_is( <<'CODE', <<'OUT', 'lineof method' );
+.sub 'main' :main
+    load_bytecode 'PCT/HLLCompiler.pbc'
+    'lineof_tests'()
+.end
+
+.sub 'is'
+    .param int a
+    .param int b
+    .param string message
+    if a == b goto ok
+    print "not "
+  ok:
+    print "ok\n"
+.end
+
+.sub 'lineof_tests'
+    .local pmc hll, target
+    hll = get_hll_global ['PCT'], 'HLLCompiler'
+    target = box "0123\n5678\r0123\r\n678\n"
+    $I0 = hll.'lineof'(target, 0, 'cache'=>1)
+    is($I0, 0, "lineof - beginning of string")
+    $I0 = hll.'lineof'(target, 1, 'cache'=>1)
+    is($I0, 0, "lineof - char on first line")
+    $I0 = hll.'lineof'(target, 4, 'cache'=>1)
+    is($I0, 0, "lineof - immediately before nl")
+    $I0 = hll.'lineof'(target, 5, 'cache'=>1)
+    is($I0, 1, "lineof - immediately after nl")
+    $I0 = hll.'lineof'(target, 8, 'cache'=>1)
+    is($I0, 1, "lineof - char before cr")
+    $I0 = hll.'lineof'(target, 9, 'cache'=>1)
+    is($I0, 1, "lineof - immediately before cr")
+    $I0 = hll.'lineof'(target, 10, 'cache'=>1)
+    is($I0, 2, "lineof - immediately after cr")
+    $I0 = hll.'lineof'(target, 11, 'cache'=>1)
+    is($I0, 2, "lineof - char after cr")
+    $I0 = hll.'lineof'(target, 13, 'cache'=>1)
+    is($I0, 2, "lineof - char before crnl")
+    $I0 = hll.'lineof'(target, 14, 'cache'=>1)
+    is($I0, 2, "lineof - immediately before crnl")
+    $I0 = hll.'lineof'(target, 15, 'cache'=>1)
+    is($I0, 3, "lineof - middle of crnl")
+    $I0 = hll.'lineof'(target, 16, 'cache'=>1)
+    is($I0, 3, "lineof - immediately after crnl")
+    $I0 = hll.'lineof'(target, 19, 'cache'=>1)
+    is($I0, 3, "lineof - immediately before final nl")
+    $I0 = hll.'lineof'(target, 20, 'cache'=>1)
+    is($I0, 4, "lineof - immediately after final nl")
+.end
+CODE
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+ok
+OUT
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Modified: branches/html_cleanup/t/dynoplibs/sysinfo.t
==============================================================================
--- branches/html_cleanup/t/dynoplibs/sysinfo.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/dynoplibs/sysinfo.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -11,7 +11,7 @@
 use Test::More;
 use Config;
 
-use Parrot::Test tests => 14;
+use Parrot::Test tests => 15;
 use Parrot::Config;
 
 
@@ -183,6 +183,23 @@
 CODE
 }
 
+pir_output_is(<<'CODE', <<OUTPUT, 'INTVAL min and max coherence');
+.loadlib 'sys_ops'
+.include 'sysinfo.pasm'
+.sub 'main' :main
+    # assumes 2's compliment integer math
+    .include 'test_more.pir'
+    .local int min, max
+    max = sysinfo .SYSINFO_PARROT_INTMAX
+    neg max
+    min = sysinfo .SYSINFO_PARROT_INTMIN
+    inc min
+    is(max, min)
+.end
+CODE
+ok 1
+OUTPUT
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Modified: branches/html_cleanup/t/dynpmc/gziphandle.t
==============================================================================
--- branches/html_cleanup/t/dynpmc/gziphandle.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/dynpmc/gziphandle.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -22,15 +22,13 @@
     .include 'test_more.pir'
     .include 'iglobals.pasm'
     .local pmc config_hash, interp
-    .local int num_tests
 
-    num_tests = 10
-    plan(num_tests)
     interp = getinterp
     config_hash = interp[.IGLOBALS_CONFIG_HASH]
     $S0 = config_hash['has_zlib']
     unless $S0 goto no_zlib
 
+    plan(10)
     $P0 = loadlib 'gziphandle'
     test_handle()
     test_stream()
@@ -39,7 +37,7 @@
     .return()
 
   no_zlib:
-    skip(num_tests, 'No zlib library available')
+    skip_all('No zlib library available')
     .return()
 .end
 

Modified: branches/html_cleanup/t/dynpmc/rational.t
==============================================================================
--- branches/html_cleanup/t/dynpmc/rational.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/dynpmc/rational.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -27,16 +27,6 @@
 
     unless $S0 goto no_gmp
     plan(56)
-    goto gmp_tests
-
-  no_gmp:
-    # seems like plan(0) is not supported currently
-    plan(1)
-    ok(1,'GMP not found, skipping Rational tests')
-    .return()
-
-    # The following tests only run if GMP is installed
- gmp_tests:
     loadlib $P1, 'rational'
     test_init()
     test_version()
@@ -77,6 +67,11 @@
     test_abs()
     test_cmp()
     test_equal_tt1517()
+    .return()
+
+ no_gmp:
+    skip_all('GMP not found, skipping Rational tests')
+    .return()
 .end
 
 .sub test_neg

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

Modified: branches/html_cleanup/t/harness.pir
==============================================================================
--- branches/html_cleanup/t/harness.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/harness.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -353,7 +353,7 @@
     push contents, 'username'
     push contents, 'parrot-autobot'
     push contents, 'password'
-    push contents, 'squ at wk'
+    push contents, 'qa_rocks'
     push contents, 'comments'
     push contents, "EXPERIMENTAL t/harness.pir with LWP.pir"
     push contents, 'report_file'
@@ -362,7 +362,7 @@
     $P0[0] = 'parrot_test_run.tar.gz'
     push contents, $P0
     load_bytecode 'LWP/UserAgent.pir'
-    .const string url = 'http://smolder.plusthree.com/app/projects/process_add_report/8'
+    .const string url = 'http://smolder.parrot.org/app/projects/process_add_report/1'
     .local pmc ua, response
     ua = new ['LWP';'UserAgent']
     ua.'env_proxy'()

Modified: branches/html_cleanup/t/library/archive_zip.t
==============================================================================
--- branches/html_cleanup/t/library/archive_zip.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/library/archive_zip.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -18,12 +18,23 @@
 
 .sub 'main' :main
     .include 'test_more.pir'
+    .include 'iglobals.pasm'
+    .local pmc config_hash, interp
 
-    load_bytecode 'Archive/Zip.pir'
+    interp = getinterp
+    config_hash = interp[.IGLOBALS_CONFIG_HASH]
+    $S0 = config_hash['has_zlib']
+    unless $S0 goto no_zlib
 
     plan(14)
+    load_bytecode 'Archive/Zip.pir'
     test_new()
     test_pack()
+    .return()
+
+  no_zlib:
+    skip_all('No zlib library available')
+    .return()
 .end
 
 .sub 'test_new'

Modified: branches/html_cleanup/t/library/osutils.t
==============================================================================
--- branches/html_cleanup/t/library/osutils.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/library/osutils.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -21,12 +21,13 @@
 
     load_bytecode 'osutils.pir'
 
-    plan(17)
+    plan(19)
     test_basename()
     test_dirname()
     test_catfile()
     test_splitpath()
     test_newer()
+    test_rindex()
 .end
 
 .sub 'test_basename'
@@ -80,6 +81,13 @@
     nok($I0, "newer('osutils.pir', ['osutils.pir', 'stat.pasm'])")
 .end
 
+.sub 'test_rindex'
+    $I0 = rindex('abc', '.')
+    is($I0, -1, "rindex('abc', '.')")
+    $I0 = rindex('abc.def.ghi', '.')
+    is($I0, 7, "rindex('abc.def.ghi', '.')")
+.end
+
 
 # Local Variables:
 #   mode: pir

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

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

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

Modified: branches/html_cleanup/t/oo/objects.t
==============================================================================
--- branches/html_cleanup/t/oo/objects.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/oo/objects.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -21,7 +21,7 @@
     .include "iglobals.pasm"
     .include "interpinfo.pasm"
 
-    plan(194)
+    plan(191)
 
     get_classname_from_class()
     test_get_class()
@@ -143,15 +143,6 @@
     isa $I0, $P1, "calar"
     is( $I0, 0, 'Boolean !isa calar' )
 
-    isa $I0, $P1, "Integer"
-    is( $I0, 1, 'Boolean isa Integer' )
-
-    isa $I0, $P1, "Integ"
-    is( $I0, 0, 'Boolean !isa Integ' )
-
-    isa $I0, $P1, "eger"
-    is( $I0, 0, 'Boolean !isa eger' )
-
     isa $I0, $P1, " "
     is( $I0, 0, 'Boolean !isa " "' )
 

Modified: branches/html_cleanup/t/op/calling.t
==============================================================================
--- branches/html_cleanup/t/op/calling.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/op/calling.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -1247,25 +1247,23 @@
 /too few positional arguments: 3 passed, 4 \(or more\) expected/
 OUTPUT
 
-pir_output_is( <<'CODE', <<'OUTPUT', "tailcall to NCI" );
+pir_output_is( <<'CODE', <<'OUTPUT', "faux tailcall to NCI" );
 .sub main :main
     .local pmc s
     s = new 'String'
-    s = "OK 1\n"
-    $S0 = s."lower"()
-    print $S0
-    s = "OK 2\n"
-    $S1 = foo(s)
-    print $S1
+    $I0 = s."is_integer"(22)
+    say $I0
+    $I1 = foo(s)
+    say $I1
 .end
 .sub foo
     .param pmc s
-    $S0 = s."lower"()
-    .return ($S0)
+    $I0 = s."is_integer"(22)
+    .return ($I0)
 .end
 CODE
-ok 1
-ok 2
+1
+1
 OUTPUT
 
 pir_output_is( <<'CODE', <<'OUTPUT', "tailcall to NCI - 2" );

Modified: branches/html_cleanup/t/op/exceptions.t
==============================================================================
--- branches/html_cleanup/t/op/exceptions.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/op/exceptions.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -423,19 +423,7 @@
 No exception handler/
 OUTPUT
 
-$ENV{TEST_PROG_ARGS} ||= '';
-my @todo = $ENV{TEST_PROG_ARGS} =~ /--run-pbc/
-    ? ( todo => '.tailcall and lexical maps not thawed from PBC, TT #1172' )
-    : ();
-#
-# this test is hanging in testr since pcc_hackathon_6Mar10 branch merge at r45108
-# converting to skip at the moment
-#
-
-SKIP: {
-    skip ".tailcall and lexical maps not thawed from PBC - hangs", 1 if @todo;
-
-pir_output_is( <<'CODE', <<'OUTPUT', "exit_handler via exit exception", @todo );
+pir_output_is( <<'CODE', <<'OUTPUT', "exit_handler via exit exception" );
 .sub main :main
     .local pmc a
     .lex 'a', a
@@ -444,7 +432,9 @@
     push_eh handler
     exit 0
 handler:
-    .tailcall exit_handler()
+    .const 'Sub' $P0 = 'exit_handler'
+    capture_lex $P0
+    .tailcall $P0()
 .end
 
 .sub exit_handler :outer(main)
@@ -459,8 +449,6 @@
 a = 42
 OUTPUT
 
-}
-
 ## Regression test for r14697.  This probably won't be needed when PDD23 is
 ## fully implemented.
 pir_error_output_like( <<'CODE', <<'OUTPUT', "invoke handler in calling sub" );

Modified: branches/html_cleanup/t/op/integer.t
==============================================================================
--- branches/html_cleanup/t/op/integer.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/op/integer.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -16,7 +16,7 @@
 
 =cut
 
-.const int TESTS = 152
+.const int TESTS = 153
 
 .sub 'test' :main
     .include 'test_more.pir'
@@ -48,6 +48,7 @@
     test_sub_i_i()
     test_set_n()
     test_neg()
+    test_negate_max_integer()
     test_mul_i_i()
     test_null()
     test_div_i_i_by_zero()
@@ -745,6 +746,37 @@
     is($I0, -3, 'neg_i')
 .end
 
+# Test to ensure that the negative of the maximum integer is equal to the
+# minimum integer + 1. This should be true because we are assuming a
+# two's-complement machine.
+
+.include 'iglobals.pasm'
+.sub test_negate_max_integer
+    .local int max, min
+
+    $P0 = getinterp
+    $P1 = $P0[.IGLOBALS_CONFIG_HASH]
+    $I0 = $P1['intvalsize']
+
+    # XXX can't use sysinfo (from sys_ops) in coretest
+    # build up 2's compliment min and max integers manually
+    max = 0x7F
+    min = 0x80
+    dec $I0
+  loop:
+    unless $I0 goto end_loop
+    min <<= 8
+    max <<= 8
+    max  |= 0xFF
+    dec $I0
+    goto loop
+  end_loop:
+
+    neg max
+    inc min
+    is(max, min)
+.end
+
 .sub 'test_mul_i_i'
     $I0 = 3
     $I1 = 4

Modified: branches/html_cleanup/t/op/string.t
==============================================================================
--- branches/html_cleanup/t/op/string.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/op/string.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -128,6 +128,7 @@
     split_on_empty_string()
     split_on_non_empty_string()
     test_join()
+    test_join_many()
     eq_addr_or_ne_addr()
     test_if_null_s_ic()
     test_upcase()
@@ -1498,6 +1499,21 @@
     is( $S0, "a--b", 'join' )
 .end
 
+.sub 'test_join_many'
+    $P1 = new ['ResizablePMCArray']
+    $I0 = 0
+  loop:
+    unless $I0 < 20000 goto done
+    $P2 = new ['Integer']
+    assign $P2, $I0
+    push $P1, $P2
+    inc $I0
+    goto loop
+  done:
+    $S0 = join ' ', $P1
+    ok("Join of many temporary strings doesn't crash")
+.end
+
 # join: get_string returns a null string --------
 .namespace ["Foo5"]
     .sub get_string :vtable :method

Modified: branches/html_cleanup/t/op/string_cs.t
==============================================================================
--- branches/html_cleanup/t/op/string_cs.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/op/string_cs.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -6,7 +6,7 @@
 use warnings;
 use lib qw( . lib ../lib ../../lib );
 use Test::More;
-use Parrot::Test tests => 47;
+use Parrot::Test tests => 50;
 use Parrot::Config;
 
 =head1 NAME
@@ -19,7 +19,7 @@
 
 =head1 DESCRIPTION
 
-Tests charset support.
+Tests encoding support.
 
 =cut
 
@@ -37,10 +37,10 @@
 ok 3
 OUTPUT
 
-pasm_output_is( <<'CODE', <<OUTPUT, "charset name" );
+pasm_output_is( <<'CODE', <<OUTPUT, "encoding name" );
     set S0, "ok 1\n"
-    charset I0, S0
-    charsetname S1, I0
+    encoding I0, S0
+    encodingname S1, I0
     print S1
     print "\n"
     end
@@ -48,12 +48,12 @@
 ascii
 OUTPUT
 
-pasm_output_is( <<'CODE', <<OUTPUT, "find_charset" );
-    find_charset I0, "iso-8859-1"
+pasm_output_is( <<'CODE', <<OUTPUT, "find_encoding" );
+    find_encoding I0, "iso-8859-1"
     print "ok 1\n"
-    find_charset I0, "ascii"
+    find_encoding I0, "ascii"
     print "ok 2\n"
-    find_charset I0, "binary"
+    find_encoding I0, "binary"
     print "ok 3\n"
     end
 CODE
@@ -62,11 +62,11 @@
 ok 3
 OUTPUT
 
-pasm_error_output_like( <<'CODE', <<OUTPUT, "find_charset - not existing" );
-    find_charset I0, "no_such"
+pasm_error_output_like( <<'CODE', <<OUTPUT, "find_encoding - not existing" );
+    find_encoding I0, "no_such"
     end
 CODE
-/charset 'no_such' not found/
+/encoding 'no_such' not found/
 OUTPUT
 
 pasm_output_is( <<'CODE', <<OUTPUT, "downcase" );
@@ -247,14 +247,14 @@
 0 2 5 7 ok
 OUTPUT
 
-pasm_output_is( <<'CODE', <<OUTPUT, "trans_charset_s_s_i" );
+pasm_output_is( <<'CODE', <<OUTPUT, "trans_encoding_s_s_i" );
     set S0, "abc"
-    find_charset I0, "iso-8859-1"
-    trans_charset S1, S0, I0
+    find_encoding I0, "iso-8859-1"
+    trans_encoding S1, S0, I0
     print S1
     print "\n"
-    charset I0, S1
-    charsetname S2, I0
+    encoding I0, S1
+    encodingname S2, I0
     print S2
     print "\n"
     end
@@ -263,24 +263,24 @@
 iso-8859-1
 OUTPUT
 
-pasm_error_output_like( <<'CODE', <<OUTPUT, "trans_charset_s_s_i - lossy" );
+pasm_error_output_like( <<'CODE', <<OUTPUT, "trans_encoding_s_s_i - lossy" );
     set S1, iso-8859-1:"abcä"
-    find_charset I0, "ascii"
-    trans_charset S2, S1, I0
+    find_encoding I0, "ascii"
+    trans_encoding S2, S1, I0
     print "never\n"
     end
 CODE
 /lossy conversion to ascii/
 OUTPUT
 
-pasm_output_is( <<'CODE', <<OUTPUT, "trans_charset_s_s_i iso-8859-1 to binary" );
+pasm_output_is( <<'CODE', <<OUTPUT, "trans_encoding_s_s_i iso-8859-1 to binary" );
     set S0, iso-8859-1:"abc"
-    find_charset I0, "binary"
-    trans_charset S1, S0, I0
+    find_encoding I0, "binary"
+    trans_encoding S1, S0, I0
     print S1
     print "\n"
-    charset I0, S1
-    charsetname S2, I0
+    encoding I0, S1
+    encodingname S2, I0
     print S2
     print "\n"
     end
@@ -289,14 +289,14 @@
 binary
 OUTPUT
 
-pasm_output_is( <<'CODE', <<OUTPUT, "trans_charset_s_s_i ascii to binary" );
+pasm_output_is( <<'CODE', <<OUTPUT, "trans_encoding_s_s_i ascii to binary" );
     set S0, ascii:"abc"
-    find_charset I0, "binary"
-    trans_charset S1, S0, I0
+    find_encoding I0, "binary"
+    trans_encoding S1, S0, I0
     print S1
     print "\n"
-    charset I0, S1
-    charsetname S2, I0
+    encoding I0, S1
+    encodingname S2, I0
     print S2
     print "\n"
     end
@@ -305,14 +305,14 @@
 binary
 OUTPUT
 
-pasm_output_is( <<'CODE', <<OUTPUT, "trans_charset_s_s_i ascii to iso-8859-1" );
+pasm_output_is( <<'CODE', <<OUTPUT, "trans_encoding_s_s_i ascii to iso-8859-1" );
     set S0, ascii:"abc"
-    find_charset I0, "iso-8859-1"
-    trans_charset S1, S0, I0
+    find_encoding I0, "iso-8859-1"
+    trans_encoding S1, S0, I0
     print S1
     print "\n"
-    charset I0, S1
-    charsetname S2, I0
+    encoding I0, S1
+    encodingname S2, I0
     print S2
     print "\n"
     end
@@ -321,14 +321,14 @@
 iso-8859-1
 OUTPUT
 
-pasm_output_is( <<'CODE', <<OUTPUT, "trans_charset_s_s_i iso-8859-1 to unicode" );
+pasm_output_is( <<'CODE', <<OUTPUT, "trans_encoding_s_s_i iso-8859-1 to utf8" );
     set S0, iso-8859-1:"abc_ä_"
-    find_charset I0, "unicode"
-    trans_charset S1, S0, I0
+    find_encoding I0, "utf8"
+    trans_encoding S1, S0, I0
     print S1
     print "\n"
-    charset I0, S1
-    charsetname S2, I0
+    encoding I0, S1
+    encodingname S2, I0
     print S2
     print "\n"
     length I2, S1
@@ -337,21 +337,21 @@
     end
 CODE
 abc_\xc3\xa4_
-unicode
+utf8
 6
 OUTPUT
 
-pasm_output_is( <<'CODE', <<OUTPUT, "trans_charset_s_s_i unicode to iso-8859-1" );
-    set S0, unicode:"abc_\xe4_"
+pasm_output_is( <<'CODE', <<OUTPUT, "trans_encoding_s_s_i utf8 to iso-8859-1" );
+    set S0, utf8:"abc_\xe4_"
     bytelength I2, S0   # XXX its 7 for utf8 only
     print I2
     print "\n"
-    find_charset I0, "iso-8859-1"
-    trans_charset S1, S0, I0
+    find_encoding I0, "iso-8859-1"
+    trans_encoding S1, S0, I0
     print S1
     print "\n"
-    charset I0, S1
-    charsetname S2, I0
+    encoding I0, S1
+    encodingname S2, I0
     print S2
     print "\n"
     length I2, S1
@@ -367,7 +367,7 @@
 
 pir_output_is( <<'CODE', <<'OUTPUT', "bug #34661 literal" );
 .sub main :main
-    $S0 = unicode:"\"]\nif I3 == "
+    $S0 = utf8:"\"]\nif I3 == "
     print "ok 1\n"
 .end
 CODE
@@ -378,7 +378,7 @@
 .sub main :main
     $P0 = new 'Integer'
     $P0 = 42
-    set_global ['Foo'], unicode:"Bar", $P0
+    set_global ['Foo'], utf8:"Bar", $P0
     print "ok 1\n"
     $P1 = get_global ['Foo'], "Bar"
     print "ok 2\n"
@@ -395,10 +395,10 @@
 .sub main
     .local string s, t, u
     s = "abcd"
-    t = unicode:"efg\n"
+    t = utf8:"efg\n"
     u = s . t
     print u
-    s = unicode:"abcd"
+    s = utf8:"abcd"
     t = "efg\n"
     u = s . t
     print u
@@ -408,13 +408,114 @@
 abcdefg
 OUTPUT
 
+pir_output_is( <<'CODE', <<OUTPUT, "concat ascii, utf8 preallocated" );
+.sub main
+    .local string s, t
+    s = repeat "abcd", 100
+    t = "efg"
+    s = s . t
+    s = s . t
+    s = s . t
+    s = s . t
+    t = utf8:"hi\xa9jk"
+    s = s . t
+    $I0 = encoding s
+    $S0 = encodingname $I0
+    print $S0
+    print "\n"
+    $I0 = length s
+    print $I0
+    print "\n"
+    s = substr s, -21
+    print s
+    print "\n"
+.end
+CODE
+utf8
+417
+abcdefgefgefgefghi\xc2\xa9jk
+OUTPUT
+
 SKIP: {
-    skip( 'no ICU lib', 17 ) unless $PConfig{has_icu};
+    skip( 'no ICU lib', 19 ) unless $PConfig{has_icu};
+
+    pir_output_is( <<'CODE', <<OUTPUT, "literal encoding persistence - TT #468" );
+.include 'stdio.pasm'
+.sub main
+    # set output encoding to normalize printed strings
+    $P0 = getinterp
+    $P1 = $P0.'stdhandle'(.PIO_STDOUT_FILENO)
+    $P1.'encoding'('utf8')
+
+    load_bytecode 't/op/testlib/test_strings.pbc'
+    $P0 = 'get_hellos'()
+    $P1 = iter $P0
+
+  loop:
+    unless $P1 goto end_loop
+    $S0 = shift $P1
+    show($S0)
+    goto loop
+  end_loop:
+.end
+
+.sub show
+    .param string s
+    print s
+    $I0 = bytelength s
+    print '('
+    print $I0
+    print "): "
+    $I0 = encoding s
+    $S0 = encodingname $I0
+    say $S0
+.end
+CODE
+hello(5): ascii
+hello(5): utf8
+hello(5): utf8
+hello(10): utf16
+hello(10): ucs2
+OUTPUT
+
+    pir_output_is( <<'CODE', <<OUTPUT, "empty literal encoding persistence - TT #1791");
+.sub main
+    load_bytecode 't/op/testlib/test_strings.pbc'
+    $P0 = 'get_empties'()
+    $P1 = iter $P0
+
+  loop:
+    unless $P1 goto end_loop
+    $S0 = shift $P1
+    show($S0)
+    goto loop
+  end_loop:
+.end
+
+.sub show
+    .param string s
+    print s
+    $I0 = bytelength s
+    print '('
+    print $I0
+    print "): "
+    $I0 = encoding s
+    $S0 = encodingname $I0
+    say $S0
+.end
+CODE
+(0): ascii
+(0): utf8
+(0): utf8
+(0): utf16
+(0): ucs2
+OUTPUT
+
     pir_output_is( <<'CODE', <<"OUTPUT", "unicode downcase" );
 .sub main :main
     set $S0, iso-8859-1:"TÖTSCH"
-    find_charset $I0, "unicode"
-    trans_charset $S1, $S0, $I0
+    find_encoding $I0, "utf8"
+    trans_encoding $S1, $S0, $I0
     $S1 = downcase $S1
     getstdout $P0           # need to convert back to utf8
     $P0.'encoding'("utf8")  # set utf8 output
@@ -426,13 +527,13 @@
 t\xc3\xb6tsch
 OUTPUT
 
-    pasm_output_is( <<'CODE', <<"OUTPUT", "unicode downcase, trans_charset_s_s_i" );
+    pasm_output_is( <<'CODE', <<"OUTPUT", "unicode downcase, trans_encoding_s_s_i" );
     set S0, iso-8859-1:"TÖTSCH"
-    find_charset I0, "unicode"
-    trans_charset S1, S0, I0
+    find_encoding I0, "utf8"
+    trans_encoding S1, S0, I0
     downcase S1, S1
-    find_charset I0, "iso-8859-1"
-    trans_charset S1, S1, I0
+    find_encoding I0, "iso-8859-1"
+    trans_encoding S1, S1, I0
     print S1
     print "\n"
     end
@@ -447,10 +548,10 @@
 /encoding #-1 not found/
 OUTPUT
 
-    pasm_output_is( <<'CODE', <<"OUTPUT", "unicode downcase - transcharset" );
+    pasm_output_is( <<'CODE', <<"OUTPUT", "unicode downcase - transencoding" );
     set S0, iso-8859-1:"TÖTSCH"
-    find_charset I0, "unicode"
-    trans_charset S1, S0, I0
+    find_encoding I0, "utf8"
+    trans_encoding S1, S0, I0
     downcase S1, S1
     find_encoding I0, "utf8"
     trans_encoding S2, S1, I0
@@ -462,9 +563,7 @@
 OUTPUT
 
     pasm_output_is( <<'CODE', <<"OUTPUT", "utf16 ord, length" );
-    set S0, iso-8859-1:"TÖTSCH"
-    find_charset I0, "unicode"
-    trans_charset S1, S0, I0
+    set S1, iso-8859-1:"TÖTSCH"
     find_encoding I0, "utf16"
     trans_encoding S1, S1, I0
     length I1, S1
@@ -486,8 +585,8 @@
 
     pasm_output_is( <<'CODE', <<"OUTPUT", "chopn utf8" );
     set S0, iso-8859-1:"TTÖÖ"
-    find_charset I0, "unicode"
-    trans_charset S1, S0, I0
+    find_encoding I0, "utf8"
+    trans_encoding S1, S0, I0
     chopn S1, S1, 2
     print S1
     print ' '
@@ -504,9 +603,7 @@
 OUTPUT
 
     pasm_output_is( <<'CODE', <<"OUTPUT", "utf16 append" );
-    set S0, iso-8859-1:"Tötsch"
-    find_charset I0, "unicode"
-    trans_charset S1, S0, I0
+    set S1, iso-8859-1:"Tötsch"
     find_encoding I0, "utf16"
     trans_encoding S1, S1, I0
     concat S1, " Leo"
@@ -528,9 +625,7 @@
 OUTPUT
 
     pasm_output_is( <<'CODE', <<"OUTPUT", "utf16 concat" );
-    set S0, iso-8859-1:"Tötsch"
-    find_charset I0, "unicode"
-    trans_charset S1, S0, I0
+    set S1, iso-8859-1:"Tötsch"
     find_encoding I0, "utf16"
     trans_encoding S1, S1, I0
     concat S2, S1, " Leo"
@@ -552,9 +647,7 @@
 OUTPUT
 
     pasm_output_is( <<'CODE', <<"OUTPUT", "utf16 substr" );
-    set S0, iso-8859-1:"Tötsch"
-    find_charset I0, "unicode"
-    trans_charset S1, S0, I0
+    set S1, iso-8859-1:"Tötsch"
     find_encoding I0, "utf16"
     trans_encoding S1, S1, I0
     substr S2, S1, 1, 2
@@ -568,9 +661,7 @@
 OUTPUT
 
     pasm_output_is( <<'CODE', <<"OUTPUT", "utf16 replace" );
-    set S0, iso-8859-1:"Tötsch"
-    find_charset I0, "unicode"
-    trans_charset S1, S0, I0
+    set S1, iso-8859-1:"Tötsch"
     find_encoding I0, "utf16"
     trans_encoding S1, S1, I0
     substr  S2, S1, 1, 1
@@ -590,8 +681,8 @@
 
     pasm_output_is( <<'CODE', <<"OUTPUT", "utf16 index, latin1 search" );
     set S0, iso-8859-1:"TÖTSCH"
-    find_charset I0, "unicode"
-    trans_charset S1, S0, I0
+    find_encoding I0, "utf8"
+    trans_encoding S1, S0, I0
     downcase S1, S1
     set S2, iso-8859-1:"öt"
     index I0, S1, S2
@@ -604,8 +695,8 @@
 
     pasm_output_is( <<'CODE', <<"OUTPUT", "utf16 index, latin1 search" );
     set S0, iso-8859-1:"TÖTSCH"
-    find_charset I0, "unicode"
-    trans_charset S1, S0, I0
+    find_encoding I0, "utf8"
+    trans_encoding S1, S0, I0
     downcase S1, S1
     set S2, iso-8859-1:"öt"
     index I0, S1, S2
@@ -624,8 +715,8 @@
     pir_output_is( <<'CODE', <<"OUTPUT", "unicode upcase" );
 .sub main :main
     set $S0, iso-8859-1:"tötsch"
-    find_charset $I0, "unicode"
-    trans_charset $S1, $S0, $I0
+    find_encoding $I0, "utf8"
+    trans_encoding $S1, $S0, $I0
     upcase $S1, $S1
     getstdout $P0         # need to convert back to utf8
     $P0.'encoding'("utf8") # set utf8 output
@@ -639,7 +730,7 @@
 
     pir_output_is( <<'CODE', <<"OUTPUT", "unicode upcase to combined char" );
 .sub main :main
-    set $S1, unicode:"hacek j \u01f0"
+    set $S1, utf8:"hacek j \u01f0"
     upcase $S1, $S1
     getstdout $P0          # need to convert back to utf8
     $P0.'encoding'("utf8") # set utf8 output
@@ -669,7 +760,7 @@
 
     pir_output_is( <<'CODE', <<"OUTPUT", "unicode upcase to combined char 3.2 bug?" );
 .sub main :main
-    set $S1, unicode:"___\u01f0123"
+    set $S1, utf8:"___\u01f0123"
     upcase $S1, $S1
     getstdout $P0          # need to convert back to utf8
     $P0.'encoding'("utf8") # set utf8 output
@@ -684,8 +775,8 @@
     pir_output_is( <<'CODE', <<"OUTPUT", "unicode titlecase" );
 .sub main :main
     set $S0, iso-8859-1:"tötsch leo"
-    find_charset $I0, "unicode"
-    trans_charset $S1, $S0, $I0
+    find_encoding $I0, "utf8"
+    trans_encoding $S1, $S0, $I0
     titlecase $S1, $S1
     getstdout $P0          # need to convert back to utf8
     $P0.'encoding'("utf8") # set utf8 output
@@ -699,7 +790,7 @@
 
     pir_output_is( <<'CODE', <<OUTPUT, "combose combined char" );
 .sub main :main
-    set $S1, unicode:"___\u01f0___"
+    set $S1, utf8:"___\u01f0___"
     length $I0, $S1
     upcase $S1, $S1    # decompose J+hacek
     length $I1, $S1    # 1 longer
@@ -759,7 +850,7 @@
 OUTPUT
 
 pasm_output_is( <<'CODE', <<'OUTPUT', "escape unicode" );
-    set S0, unicode:"\u2001\u2002\u2003\u2004\x{e01ef}\u0114"
+    set S0, utf8:"\u2001\u2002\u2003\u2004\x{e01ef}\u0114"
     escape S1, S0
     print S1
     print "\n"
@@ -770,7 +861,7 @@
 
 pir_output_is(<<'CODE', <<'OUTPUT', 'escape unicode w/ literal 0' );
 .sub 'main'
-    $S0 = unicode:"x/\u0445\u0440\u0435\u043d\u044c_09-10.txt"
+    $S0 = utf8:"x/\u0445\u0440\u0435\u043d\u044c_09-10.txt"
     $S1 = escape $S0
     say $S1
 .end

Modified: branches/html_cleanup/t/op/stringu.t
==============================================================================
--- branches/html_cleanup/t/op/stringu.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/op/stringu.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -327,8 +327,8 @@
     .local string s, t
     .local int i
     s = iso-8859-1:"T\xf6tsch"
-    i = find_charset "unicode"
-    s = trans_charset s, i
+    i = find_encoding "utf8"
+    s = trans_encoding s, i
     t = upcase s
     escape t, t
     print t

Copied: branches/html_cleanup/t/op/testlib/test_strings.pir (from r49200, trunk/t/op/testlib/test_strings.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/html_cleanup/t/op/testlib/test_strings.pir	Wed Sep 22 03:35:47 2010	(r49232, copy of r49200, trunk/t/op/testlib/test_strings.pir)
@@ -0,0 +1,29 @@
+# Copyright (C) 2006-2009, Parrot Foundation.
+# $Id$
+
+.sub 'get_hellos'
+    $P0 = new ['ResizableStringArray']
+    push $P0, "hello"
+    push $P0, unicode:"hello"
+    push $P0, utf8:unicode:"hello"
+    push $P0, utf16:unicode:"hello"
+    push $P0, ucs2:unicode:"hello"
+    .return ($P0)
+.end
+
+.sub 'get_empties'
+    $P0 = new ['ResizableStringArray']
+    push $P0, ""
+    push $P0, unicode:""
+    push $P0, utf8:unicode:""
+    push $P0, utf16:unicode:""
+    push $P0, ucs2:unicode:""
+    .return ($P0)
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:
+

Modified: branches/html_cleanup/t/pmc/bigint.t
==============================================================================
--- branches/html_cleanup/t/pmc/bigint.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/bigint.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -20,7 +20,7 @@
 
     .include 'test_more.pir'
 
-    plan(34)
+    plan(36)
     check_libgmp_good()
 
     set_and_get()
@@ -28,9 +28,11 @@
     subtraction()
     multiplication()
     division()
-    division_by_zero()
     negation()
+    division_by_zero()
+    negate_min_integer()
     absolute_value()
+    absolute_min_integer()
     overflow_coercion()
     interface()
     boolean()
@@ -75,12 +77,12 @@
 
 NoLibGMP:
     diag( 'No BigInt Lib configured' )
-    skip(34)
+    skip(36)
     exit 0
 
 OldLibGMP:
     diag( 'Buggy GMP version [', $S3, '] with huge digit multiply - please upgrade' )
-    skip(34)
+    skip(36)
     exit 0
 
 ret:
@@ -504,6 +506,43 @@
     ok($I1, 'negation')
 .end
 
+.sub 'get_int_minmax'
+    .local int min, max
+
+    $P0 = getinterp
+    $P1 = $P0[.IGLOBALS_CONFIG_HASH]
+    $I0 = $P1['intvalsize']
+
+    # XXX can't use sysinfo (from sys_ops) in coretest
+    # build up 2's compliment min and max integers manually
+    max = 0x7F
+    min = 0x80
+    dec $I0
+  loop:
+    unless $I0 goto end_loop
+    min <<= 8
+    max <<= 8
+    max  |= 0xFF
+    dec $I0
+    goto loop
+  end_loop:
+
+    .return (min, max)
+.end
+
+.sub negate_min_integer
+    .local int max
+    .local int min
+    .local pmc max_1
+    .local pmc neg_min
+    (min, max) = 'get_int_minmax'()
+    max_1 = box max
+    inc max_1
+    neg_min = box min
+    neg neg_min                         # Use 1-operand form of neg.
+    is(neg_min, max_1, 'negate minimum native integer')
+.end
+
 .sub absolute_value
     $P0 = new ['BigInt']
     $P0 = '-1230000000000000000000'
@@ -522,6 +561,20 @@
     is($S0,'1230000000000000000000','... and in-place works too')
 .end
 
+.sub absolute_min_integer
+    .local int max
+    .local int min
+    .local pmc max_1
+    .local pmc neg_min
+    .local pmc result
+    (min, max) = 'get_int_minmax'()
+    max_1 = box max
+    inc max_1
+    neg_min = box min
+    result = abs neg_min                # Use 2-operand form of abs.
+    is(result, max_1, 'absolute minimum native integer')
+.end
+
 .sub overflow_coercion
     # check libgmp included in Parrot build
     $P0 = getinterp
@@ -745,7 +798,7 @@
     ne $S0, $S6, k25
     inc $I1
 k25:
-    todo( $I1, 'integer negation of MinInt converts MaxInt+1 to BigInt', 'TT #1616')
+    ok($I1, 'integer negation of MinInt converts to BigInt')
 
     $I1 = 0
     $P0 = new ['Integer']
@@ -760,7 +813,7 @@
     ne $S0, $S6, k27
     inc $I1
 k27:
-    todo( $I1, 'integer absolute-value of MinInt converts MaxInt+1 to BigInt', 'TT #1616')
+    ok($I1, 'integer abs(MinInt) converts to BigInt')
 
     $P0 = new ['Integer']
     $P0 = $I3

Modified: branches/html_cleanup/t/pmc/bytebuffer.t
==============================================================================
--- branches/html_cleanup/t/pmc/bytebuffer.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/bytebuffer.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -134,8 +134,12 @@
     .local int big
 
     bb = new ['ByteBuffer']
+    s = bb.'get_string'('ascii')
+    n = length s
+    is(s, 0, "getting from unitialized buffer gives empty string")
+
     bb = binary:"abcd"
-    s = bb.'get_string'('ascii', 'fixed_8')
+    s = bb.'get_string'('ascii')
     n = length s
     is(n, 4, "getting ascii from buffer gives correct length")
     is(s, "abcd", "getting ascii from buffer gives correct content")
@@ -161,7 +165,7 @@
     bb[0] = 0x00
     bb[1] = 0xD1
 doit:
-    s = bb.'get_string'('unicode', 'utf16')
+    s = bb.'get_string'('utf16')
     n = length s
     is(n, 1, "getting utf16 from buffer gives correct length")
     n = ord s
@@ -297,7 +301,7 @@
     if i < 8192 goto loopset
 
     .local string s
-    s = bb.'get_string'('unicode', 'utf16')
+    s = bb.'get_string'('utf16')
 
     # Check string size
     i = length s
@@ -349,17 +353,6 @@
     .local string s
     bb = new ['ByteBuffer']
     bb = 'something'
-    push_eh catch_charset
-    s = bb.'get_string'('***INVALID cHARsET%%%%', 'fixed_8')
-    pop_eh
-    ok(0, "get_string with invalid charset should throw")
-    goto check_encoding
-catch_charset:
-    .get_results(ex)
-    finalize ex
-    pop_eh
-    ok(1, "get_string with invalid charset throws")
-check_encoding:
     push_eh catch_encoding
     s = bb.'get_string'('ascii', '???INVALID eNCODING===')
     pop_eh

Modified: branches/html_cleanup/t/pmc/complex.t
==============================================================================
--- branches/html_cleanup/t/pmc/complex.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/complex.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -21,7 +21,7 @@
     .include 'fp_equality.pasm'
     .include "iglobals.pasm"
 
-    plan(458)
+    plan(460)
 
     string_parsing()
     exception_malformed_string__real_part()
@@ -76,6 +76,7 @@
     sech_of_complex_numbers()
     csch_of_complex_numbers()
     add_using_subclass_of_complex_bug_59630()
+    provides_complex()
 
     # END_OF_TESTS
 
@@ -514,10 +515,10 @@
     .local int bool1
 
     does bool1, pmc1, "scalar"
-    ok( bool1, 'Comples does scalar' )
+    ok( bool1, 'Complex does scalar' )
 
     does bool1, pmc1, "no_interface"
-    nok( bool1, 'Comples !does no_interface' )
+    nok( bool1, 'Complex !does no_interface' )
 .end
 
 .sub instantiate__pasm__i
@@ -1156,6 +1157,17 @@
     todo( $I0, $S0 )
 .end
 
+.sub provides_complex
+    $P0 = new 'Complex'
+    $I0 = does $P0, 'complex'
+    ok($I0)
+
+    # ...And test a subclass, for good measure
+    $P0 = new 'MyComplex'
+    $I0 = does $P0, 'complex'
+    ok($I0)
+.end
+
 .namespace ['MyComplex']
 
 .sub 'init' :vtable

Modified: branches/html_cleanup/t/pmc/exception-old.t
==============================================================================
--- branches/html_cleanup/t/pmc/exception-old.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/exception-old.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -360,19 +360,7 @@
 caught
 OUTPUT
 
-$ENV{TEST_PROG_ARGS} ||= '';
-my @todo = $ENV{TEST_PROG_ARGS} =~ /--run-pbc/
-    ? ( todo => '.tailcall and lexical maps not thawed from PBC, TT #1172' )
-    : ();
-#
-# this test is hanging in testr since pcc_hackathon_6Mar10 branch merge at r45108
-# converting to skip at the moment
-#
-
-SKIP: {
-    skip ".tailcall and lexical maps not thawed from PBC - hangs", 1 if @todo;
-
-pir_output_is( <<'CODE', <<'OUTPUT', "exit_handler via exit exception", @todo );
+pir_output_is( <<'CODE', <<'OUTPUT', "exit_handler via exit exception" );
 .sub main :main
     .local pmc a
     .lex 'a', a
@@ -381,7 +369,9 @@
     push_eh handler
     exit 0
 handler:
-    .tailcall exit_handler()
+    .const 'Sub' $P0 = 'exit_handler'
+    capture_lex $P0
+    .tailcall $P0()
 .end
 
 .sub exit_handler :outer(main)
@@ -396,8 +386,6 @@
 a = 42
 OUTPUT
 
-}
-
 ## Regression test for r14697.  This probably won't be needed when PDD23 is
 ## fully implemented.
 pir_error_output_like( <<'CODE', <<'OUTPUT', "invoke handler in calling sub", todo => "deprecate rethrow" );

Modified: branches/html_cleanup/t/pmc/exception.t
==============================================================================
--- branches/html_cleanup/t/pmc/exception.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/exception.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -20,13 +20,16 @@
 
 .sub main :main
     .include 'test_more.pir'
-    plan(37)
+    plan(43)
     test_bool()
     test_int()
     test_integer_keyed()
     test_string_keyed()
     test_attrs()
     test_attributes()
+    test_setattribute_wrong()
+    test_birthtime()
+    test_handler_ctx()
     test_push_pop_eh()
     test_push_pop_eh_long()
     test_push_eh_throw()
@@ -35,6 +38,7 @@
     test_clone()
     test_throw_clone()
     test_backtrace()
+    test_annotations()
 .end
 
 .sub test_bool
@@ -211,6 +215,64 @@
     is($P31, "backtrace line 2", 'more backtrace data')
 .end
 
+.sub test_setattribute_wrong
+    .local pmc ex, eh
+    .local int result
+    ex = new ['Exception']
+    eh = new ['ExceptionHandler']
+    eh.'handle_types'(.EXCEPTION_ATTRIB_NOT_FOUND)
+    set_addr eh, catch
+    result = 0
+    push_eh eh
+    setattribute ex, 'wrong attribute', eh
+    goto done
+  catch:
+    result = 1
+    finalize eh
+  done:
+    is(result, 1, 'setting a wrong attribute throws')
+.end
+
+.sub test_birthtime
+    .local pmc ex, bt
+    ex = new ['Exception']
+    .local num n, nbt
+    n = 123.456
+    ex = n
+    bt = getattribute ex, 'birthtime'
+    nbt = bt
+    is(nbt, n, 'get and set birthtime')
+.end
+
+.sub test_handler_ctx
+    .local pmc ex, eh, hc
+    .local int result
+    ex = new ['Exception']
+    eh = new ['ExceptionHandler']
+    eh.'handle_types'(.EXCEPTION_INVALID_OPERATION)
+
+    result = 0
+    set_label eh, catch_get
+    push_eh eh
+    hc = getattribute ex, 'handler_ctx'
+    goto done_get
+  catch_get:
+    finalize eh
+    result = 1
+  done_get:
+    is(result, 1, 'get handler_ctx invalid operation')
+
+    result = 0
+    set_label eh, catch_set
+    setattribute ex, 'handler_ctx', ex
+    goto done_set
+  catch_set:
+    finalize eh
+    result = 1
+  done_set:
+    is(result, 1, 'set handler_ctx invalid operation')
+.end
+
 .sub test_push_pop_eh
     push_eh handler
     ok(1,'push_eh works')
@@ -339,6 +401,16 @@
     is($I0, 0, 'got backtrace from unthrow Exception')
 .end
 
+.sub test_annotations
+    .local pmc ex, ann
+    ex = new ['Exception']
+    ann = ex.'annotations'()
+    $I0 = isnull ann
+    is($I0, 0, 'got annotations from unthrow Exception')
+    $I0 = ann
+    is($I0, 0, 'annotations from unthrow Exception are empty')
+.end
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/html_cleanup/t/pmc/filehandle.t
==============================================================================
--- branches/html_cleanup/t/pmc/filehandle.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/filehandle.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -539,29 +539,19 @@
 
     \$P1.'close'()
 
-    \$I1 = charset line
-    \$S2 = charsetname \$I1
-    if \$S2 == 'unicode' goto ok_3
-    print \$S2
-    print 'not '
-  ok_3:
-    say 'ok 3 # unicode charset'
-
-
     \$I1 = encoding line
     \$S2 = encodingname \$I1
-    if \$S2 == 'utf8' goto ok_4
+    if \$S2 == 'utf8' goto ok_3
     print \$S2
     print 'not '
-  ok_4:
-    say 'ok 4 # utf8 encoding'
+  ok_3:
+    say 'ok 3 # utf8 encoding'
 
 .end
 CODE
 ok 1 - $S1 = $P1.readline() # read with utf8 encoding on
 ok 2 - $S2 = $P1.readline() # read iso-8859-1 string
-ok 3 # unicode charset
-ok 4 # utf8 encoding
+ok 3 # utf8 encoding
 OUT
 
 

Modified: branches/html_cleanup/t/pmc/hash.t
==============================================================================
--- branches/html_cleanup/t/pmc/hash.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/hash.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -739,10 +739,6 @@
 .end
 
 .sub freeze_thaw_preserves_order
-    # is internal order important somehow?
-    todo("freeze/thaw preserves hash internal order")
-    .return ()
-
     .local pmc h, cloned
     .local string s1, s2
     .local int all_ok

Modified: branches/html_cleanup/t/pmc/hashiterator.t
==============================================================================
--- branches/html_cleanup/t/pmc/hashiterator.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/hashiterator.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -4,7 +4,7 @@
 
 =head1 NAME
 
-t/pmc/hash.t - Test the Hash PMC
+t/pmc/hashiterator.t - Test the HashIterator PMC
 
 =head1 SYNOPSIS
 
@@ -12,7 +12,7 @@
 
 =head1 DESCRIPTION
 
-Tests the C<Hash> PMC. Checks key access with various types of
+Tests the C<HashIterator> PMC. Checks key access with various types of
 normal and potentially hazardous keys. Does a bit of stress testing as
 well.
 
@@ -23,12 +23,13 @@
 .sub main :main
     .include 'test_more.pir'
 
-    plan(8)
+    plan(10)
 
     iter_over_empty_hash()
     iter_over_single_element()
     iter_over_single_element_with_checks()
     iter_invalid_type()
+    iter_clone()
 .end
 
 .sub 'iter_over_empty_hash'
@@ -37,6 +38,12 @@
     it   = new 'HashIterator', hash
     $I0  = isfalse it
     ok($I0, "Iterator for empty Hash is empty")
+
+    # shift_pmc throws on empty Hash but shift_string doesn't.
+
+    $S0 = shift it
+    is($S0, '', 'shift string for empty hash gives empty string')
+
     .local pmc eh
     .local int i
     i = 1
@@ -51,7 +58,7 @@
     finalize eh
   report:
     pop_eh
-    ok(i, 'shift for empty hash throws')
+    ok(i, 'shift pmc for empty hash throws')
 .end
 
 .sub 'iter_over_single_element'
@@ -104,6 +111,18 @@
     ok(i, 'setting invalid type throws')
 .end
 
+.sub iter_clone
+    .local pmc oh, it, cl
+    .local int result
+    oh = new ['Hash']
+    it = iter oh
+
+    # This chekcs the de facto behavior for code coverage purposes.
+    cl = clone it
+    result = isnull cl
+    ok(result, 'clone of HashIterator gives null')
+.end
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/html_cleanup/t/pmc/hashiteratorkey.t
==============================================================================
--- branches/html_cleanup/t/pmc/hashiteratorkey.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/hashiteratorkey.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -20,11 +20,22 @@
 .sub 'main'
     .include 'test_more.pir'
 
-    plan(3)
+    plan(6)
 
+    'test_new'()
+    'test_key_value'()
+    'test_empty'()
+
+.end
+
+
+.sub 'test_new'
     $P0 = new ['HashIteratorKey']
     ok(1, "Can create HashIteratorKey directly")
+.end
+
 
+.sub 'test_key_value'
     $P0 = new ['Hash']
     $P0['foo'] = 'bar'
     $P1 = iter $P0
@@ -36,6 +47,27 @@
 .end
 
 
+.sub 'test_empty'
+    .local pmc hik, p
+    .local int i
+    .local string s
+    hik = new ['HashIteratorKey']
+
+    # De facto behavior tested for code coverage
+
+    p = hik.'key'()
+    i = isnull p
+    is(i, 1, 'HIK.key gives null when unitialized')
+
+    s = hik
+    is(s, '', 'HIK gives empty string when unitialized')
+
+    # Magic value?
+    i = hik
+    is(i, -1, 'HIK get_integer gives -1')
+.end
+
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/html_cleanup/t/pmc/imageio.t
==============================================================================
--- branches/html_cleanup/t/pmc/imageio.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/imageio.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -4,7 +4,7 @@
 
 =head1 NAME
 
-t/pmc/imageio.t - test ImageIO PMC
+t/pmc/imageio.t - test ImageIOFreeze and ImageIOThaw PMC
 
 =head1 SYNOPSIS
 
@@ -19,39 +19,41 @@
 .sub main :main
     .include 'test_more.pir'
 
-    plan(11)
+    plan(12)
 
-    .local pmc imageio
-    imageio = new ['ImageIO']
-    ok(1, 'instantiated ImageIO')
+    .local pmc frz, thw
+    frz = new ['ImageIOFreeze']
+    ok(1, 'instantiated ImageIOFreeze')
+
+    thw = new ['ImageIOThaw']
+    ok(1, 'instantiated ImageIOThaw')
 
     .local pmc test_pmc
     test_pmc = 'get_test_simple'()
-    setref imageio, test_pmc
-    $S0 = imageio
+    setref frz, test_pmc
+    $S0 = frz
     ok($S0, 'frozen PMC is true (simple)')
     $S1 = freeze test_pmc
     is($S0, $S1, 'freeze gives same image as ImageIO (simple)')
 
-    imageio = new ['ImageIO']
-    imageio = $S0
-    $P0 = deref imageio
+    thw = $S0
+    $P0 = deref thw
     ok($P0, 'thawed PMC is true (simple)')
     $P1 = thaw $S1
     is($P0, $P1, 'thaw gives same PMC as ImageIO (simple)')
     is($P0, test_pmc, 'round trip gives same PMC (simple)')
 
-    imageio = new ['ImageIO']
+    frz = new ['ImageIOFreeze']
     test_pmc = 'get_test_aggregate'()
-    setref imageio, test_pmc
-    $S0 = imageio
+    setref frz, test_pmc
+    $S0 = frz
     ok($S0, 'frozen PMC is true (aggregate)')
     $S1 = freeze test_pmc
     is($S0, $S1, 'freeze gives same image as ImageIO (aggregate)')
 
-    imageio = new ['ImageIO']
-    imageio = $S0
-    $P0 = deref imageio
+    thw = new ['ImageIOThaw']
+    thw = $S0
+    $P0 = deref thw
     ok($P0, 'thawed PMC is true (aggregate)')
     $P1 = thaw $S1
     is_deeply($P0, $P1, 'thaw gives same PMC as ImageIO (aggregate)')

Modified: branches/html_cleanup/t/pmc/io.t
==============================================================================
--- branches/html_cleanup/t/pmc/io.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/io.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -645,20 +645,16 @@
     $S1 = pio.'read'(1024) # read the rest of the file (much shorter than 1K)
     $S0 .= $S1
     pio.'close'()
-    $I1 = charset $S0
-    $S2 = charsetname $I1
-    say $S2
 
     $I1 = encoding $S0
     $S2 = encodingname $I1
     say $S2
 
-    $I1 = find_charset 'iso-8859-1'
-    trans_charset $S1, $S0, $I1
+    $I1 = find_encoding 'iso-8859-1'
+    trans_encoding $S1, $S0, $I1
     print $S1
 .end
 CODE
-unicode
 utf8
 T\xf6tsch
 OUTPUT

Modified: branches/html_cleanup/t/pmc/lexinfo.t
==============================================================================
--- branches/html_cleanup/t/pmc/lexinfo.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/lexinfo.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -17,11 +17,15 @@
 
 =cut
 
+.include 'except_types.pasm'
+
 .sub main :main
     .include 'test_more.pir'
-    plan(3)
+    plan(5)
 
     inspect_test()
+    inspect_invalid_test()
+    declare_lex_preg_test()
 .end
 
 .sub inspect_test
@@ -58,6 +62,33 @@
     is(have_b, 1, "$b symbol was in list")
 .end
 
+.sub inspect_invalid_test
+    .local pmc li, in, ex
+    .local int r, type
+    li = new ['LexInfo']
+    r = 0
+    push_eh catch
+    in = inspect li, 'fubar'
+    goto done
+  catch:
+    .get_results(ex)
+    type = ex['type']
+    r = iseq type, .EXCEPTION_INVALID_OPERATION
+  done:
+    ok(r, 'invalid introspection key throws as expected')
+.end
+
+.sub declare_lex_preg_test
+    .const string preg_name = 'foo'
+    .const int preg_value = 42
+    .local pmc li
+    li = new ['LexInfo']
+    li.'declare_lex_preg'(preg_name, preg_value)
+    .local int r
+    r = li[preg_name]
+    is(r, preg_value, 'declare_lex_preg method')
+.end
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/html_cleanup/t/pmc/object-meths.t
==============================================================================
--- branches/html_cleanup/t/pmc/object-meths.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/object-meths.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -1,12 +1,12 @@
 #! perl
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 use strict;
 use warnings;
 use lib qw( . lib ../lib ../../lib );
 use Test::More;
-use Parrot::Test tests => 37;
+use Parrot::Test tests => 36;
 
 =head1 NAME
 
@@ -1080,24 +1080,6 @@
 get_attr_str was called
 OUTPUT
 
-pir_output_is( <<'CODE', <<'OUTPUT', "overloading get_class vtable" );
-.sub main :main
-    .local pmc cl, o, cl2
-    cl = newclass 'MyClass'
-    o = new ['MyClass']
-    cl2 = class o
-.end
-
-.namespace ['MyClass']
-
-.sub get_class :method :vtable
-    print "get_class was called\n"
-.end
-
-CODE
-get_class was called
-OUTPUT
-
 pir_error_output_like( <<'CODE', <<'OUTPUT', "method called on non-object" );
 .namespace [ 'Foo' ]
 

Modified: branches/html_cleanup/t/pmc/orderedhashiterator.t
==============================================================================
--- branches/html_cleanup/t/pmc/orderedhashiterator.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/orderedhashiterator.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -23,12 +23,13 @@
 .sub 'main'
     .include 'test_more.pir'
 
-    plan(6)
+    plan(7)
 
     'test_init'()
     'test_bad_type'()
     'test_shift'()
     'test_pop'()
+    'test_clone'()
 .end
 
 .sub 'test_init'
@@ -113,6 +114,18 @@
     ok(i, 'pop_pmc in empty OH throws')
 .end
 
+.sub 'test_clone'
+    .local pmc oh, it, cl
+    .local int result
+    oh = new ['OrderedHash']
+    it = iter oh
+
+    # This chekcs the de facto behavior for code coverage purposes.
+    cl = clone it
+    result = isnull cl
+    ok(result, 'clone of OHI gives null')
+.end
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/html_cleanup/t/pmc/packfile.t
==============================================================================
--- branches/html_cleanup/t/pmc/packfile.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/packfile.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -24,13 +24,13 @@
 .sub main :main
 .include 'test_more.pir'
 
-    plan(42)
+    plan(47)
     'test_new'()
     'test_set_string_native'()
     'test_get_string'()
     'test_set_string'()
     'test_get_integer_keyed_str'()
-    'test_set_integer'()
+    'test_set_integer_keyed_str'()
     'test_get_directory'()
     'test_load'()
     'test_pack_fresh_packfile'()
@@ -71,6 +71,7 @@
   catch:
     result = 1
   end:
+    pop_eh
     is(result, 1, 'set_string_native with invalid data throws')
 .end
 
@@ -87,6 +88,7 @@
     set_label eh, unknown_key
     push_eh eh
     $S0 = pf["foo"]
+    pop_eh
     ok(0, "get_string_keyed_int return unknown key")
     .return ()
 
@@ -114,6 +116,7 @@
     # Requesting unknown key should throw exception
     push_eh unknown_key
     pf["foo"] = "fe9ab64082e0f6bbbd7b1e8264127908"
+    pop_eh
     ok(0, "set_string_keyed_int set unknown key")
     .return ()
 
@@ -132,6 +135,14 @@
     msg = concat msg, ')'
     .return(msg)
 .end
+.sub 'set_keyed_str_msg'
+    .param string key
+    .local string msg
+    msg = 'set_integer_keyed_str('
+    msg = concat msg, key
+    msg = concat msg, ')'
+    .return(msg)
+.end
 
 # Check the given key in the Packfile pf
 .sub 'do_get_integer_keyed_str'
@@ -153,10 +164,9 @@
     ok(result, msg)
 .end
 
-.sub 'test_get_integer_keyed_str'
-    .local pmc pf, keys
-    .local int nkeys, i
-
+# Create a list of the keys for the integer attributes
+.sub 'integer_keys'
+    .local pmc keys
     keys = new ['ResizableStringArray']
     push keys, 'wordsize'
     push keys, 'byteorder'
@@ -166,6 +176,28 @@
     push keys, 'version_patch'
     push keys, 'bytecode_major'
     push keys, 'bytecode_minor'
+    push keys, 'uuid_type'
+    .return(keys)
+.end
+
+# Some keys are still not handled in set_integer_keyed_str
+# Use this list for its test
+.sub 'integer_keys_s'
+    .local pmc keys
+    keys = new ['ResizableStringArray']
+    push keys, 'version_major'
+    push keys, 'version_minor'
+    push keys, 'version_patch'
+    push keys, 'uuid_type'
+    .return(keys)
+.end
+
+
+.sub 'test_get_integer_keyed_str'
+    .local pmc pf, keys
+    .local int nkeys, i
+
+    keys = 'integer_keys'()
     nkeys = elements keys
 
     push_eh load_error
@@ -208,29 +240,52 @@
 .end
 
 
-# Packfile.set_integer_keyed_str
-.sub 'test_set_integer'
-    .local pmc pf
-    push_eh load_error
-    pf  = _pbc()
-    pop_eh
-    $S1 = 'version_major'
-    $I0 = pf[$S1]
-    $I1 = $I0
-    inc $I1
-    pf[$S1] = $I1
-    $I2 = pf[$S1]
-    $I3 = cmp $I0, $I2
-    $I3 = cmp $I3, 0
-    ok($I3, 'set_integer_keyed_str version bumped')
-    .return()
-load_error:
-    .get_results($P0)
+.sub 'test_set_integer_keyed_str'
+    .local pmc pf, keys, saved
+    .local int nkeys, i, value, check
+    .local string skey, msg
+    keys = 'integer_keys_s'()
+    nkeys = elements keys
+    pf = new ['Packfile']
+    saved = new ['FixedIntegerArray'], nkeys
+
+    # For each key get its value, set it modified and save the new value
+    # The modified value may be invalid, but we are not going to pack it,
+    # so it shouldn't fail here.
+    i = 0
+  set_next:
+    skey = keys[i]
+    value = pf[skey]
+    inc value
+    pf[skey] = value
+    saved[i] = value
+    inc i
+    if i < nkeys goto set_next
+
+    # Read new values and compare with the saved ones
+    i = 0
+  get_next:
+    skey = keys[i]
+    value = pf[skey]
+    check = saved[i]
+    msg = 'set_keyed_str_msg'(skey)
+    is(value, check, msg)
+    inc i
+    if i < nkeys goto get_next
+
+    i = 0
+    push_eh unknown_key
+    pf["foo"] = value
+    goto done
+  unknown_key:
+    i = 1
+  done:
     pop_eh
-    report_load_error($P0, 'set_integer_keyed_str version bumped')
+    is(i, 1, "set_integer_keyed_str handle unknown key properly")
     .return()
 .end
 
+
 # Packfile.get_directory
 .sub 'test_get_directory'
     .local pmc pf

Modified: branches/html_cleanup/t/pmc/parrotinterpreter.t
==============================================================================
--- branches/html_cleanup/t/pmc/parrotinterpreter.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/parrotinterpreter.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -17,13 +17,15 @@
 
 =cut
 
+.include 'except_types.pasm'
 
 .sub main :main
 .include 'test_more.pir'
 
-    plan(12)
+    plan(13)
     test_new()      # 1 test
     test_hll_map()  # 3 tests
+    test_hll_map_invalid()  # 1 tests
 
 # Need for testing
 .annotate 'foo', 'bar'
@@ -65,6 +67,26 @@
 # Switch back to root namespace
 .HLL 'parrot'
 
+.sub test_hll_map_invalid
+    .local pmc eh
+    .local int result
+    $P0 = get_class 'Integer'
+    $P1 = subclass $P0, 'MyInt'
+    $P2 = getinterp
+    eh = new ['ExceptionHandler']
+    set_label eh, catch
+    eh.'handle_types'(.EXCEPTION_INVALID_OPERATION)
+    result = 0
+    push_eh eh
+    $P2.'hll_map'($P0, $P1)
+    goto done
+  catch:
+    finalize eh
+    result = 1
+  done:
+    is(result, 1, 'hll_map outside an HLL throws')
+.end
+
 # Test accessors to various Interp fields
 .sub 'test_inspect'
     .local pmc interp

Modified: branches/html_cleanup/t/pmc/string.t
==============================================================================
--- branches/html_cleanup/t/pmc/string.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/string.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -19,7 +19,7 @@
 .sub main :main
     .include 'test_more.pir'
 
-    plan(120)
+    plan(121)
 
     set_or_get_strings()
     setting_integers()
@@ -586,6 +586,11 @@
 
   $I0 = $P0.'is_integer'('+1')
   ok( $I0, '... +1' )
+
+  $S0 = 'abc123abc'
+  $S1 = substr $S0, 3, 3
+  $I0 = $P0.'is_integer'($S1)
+  ok( $I0, '... substr' )
 .end
 
 .sub instantiate_str

Modified: branches/html_cleanup/t/pmc/stringbuilder.t
==============================================================================
--- branches/html_cleanup/t/pmc/stringbuilder.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/stringbuilder.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -20,8 +20,10 @@
 .sub 'main' :main
     .include 'test_more.pir'
 
-    test_create()               # 2 tests
+    test_create()               # 3 tests
+    test_init_pmc()
     test_push_string()
+    test_push_string_resize()
     test_push_pmc()             # 4 tests
     test_push_string_unicode()  # 1 test
     test_i_concatenate()        # 1 test
@@ -36,6 +38,7 @@
     emit_with_pos_and_named_args()
 
     test_unicode_conversion_tt1665()
+    test_encodings()
 
     done_testing()
 
@@ -53,6 +56,12 @@
     $S0 = sb
     is( $S0, '', '... with empty content')
 
+    .local pmc ar
+    ar = new ['FixedStringArray']
+    sb = new ['StringBuilder'], ar
+    $I0 = isnull sb
+    not $I0
+    ok( $I0, 'StringBuilder created from empty array' )
 .end
 
 .sub 'test_push_string'
@@ -69,9 +78,6 @@
 
     is( $S0, "foo", "... without clobbering first string")
 
-    $I0 = sb
-    is( $I0, 128, "... and capacity still 128" )
-
     $I0 = sb.'get_string_length'()
     is( $I0, 6,   "... and string length is correct")
 
@@ -83,9 +89,6 @@
     $S1 = sb
     is( $S0, $S1, "Push 128 chars string works")
 
-    $I0 = sb
-    is( $I0, 256, "... and capacity increased" )
-
     $S99 = repeat "x", 1000
     push sb, $S99
 
@@ -93,9 +96,6 @@
     $S1 = sb
     is( $S0, $S1, "Push 1000 chars string works")
 
-    $I0 = sb
-    is( $I0, 2048, "... and capacity increased" )
-
     $S99 = repeat "x", 12000
     push sb, $S99
 
@@ -103,14 +103,34 @@
     $S1 = sb
     is( $S0, $S1, "Push 10000 chars string works")
 
-    $I0 = sb
-    is( $I0, 16384, "... and capacity increased" )
+    null $S99
+    push sb, $S99
 
-    null $S0
-    push sb, $S0
-    $I0 = sb
-    is( $I0, 16384, "push a null string does nothing" )
+    $S1 = sb
+    is( $S0, $S1, "push a null string does nothing" )
+.end
 
+.sub 'test_push_string_resize'
+    # Try to cover the case of resizing a buffer while converting it to utf8
+    # Depends on internal details of StringBuffer, so it may need changes
+    # when that internals do.
+    .local pmc sb
+    sb = new ["StringBuilder"]
+    .local string s
+    .local int i, n
+    # Get the allocated capacity and almost fill it
+    n = sb
+    n -= 2
+    s = repeat iso-8859-1:"x", n
+    push sb, s
+    # push a string that needs reallocation and has incompatible encoding rep.
+    s = unicode:"yyyy"
+    push sb, s
+    # Check the expected string length. Not a rock solid check, but the
+    # purpose of this test is just code coverage, so is enough.
+    i = sb.'get_string_length'()
+    n = n + 4
+    is(i, n, 'test_push_string_resize')
 .end
 
 .sub 'test_push_pmc'
@@ -305,6 +325,47 @@
     ok( $S0, "Pushing unicode strings doesn't kill StringBuilder")
 .end
 
+.sub 'test_init_pmc'
+    .local pmc ar
+    ar = new ['ResizableStringArray']
+
+    push ar, "foo"
+    push ar, "bar"
+
+    $S99 = repeat "x", 12
+    push ar, $S99
+    $S1 = 'foobar' . $S99
+
+    $S99 = repeat "y", 13
+    push ar, $S99
+    $S1 = $S1 . $S99
+
+    $S99 = repeat "z", 14
+    push ar, $S99
+    $S1 = $S1 . $S99
+
+    null $S0
+    push ar, $S0
+
+    .local pmc sb
+    sb  = new ["StringBuilder"], ar
+    $S0 = sb
+    is( $S0, $S1, 'init_pmc() should join all passed strings' )
+.end
+
+.sub 'test_encodings'
+    .local pmc sb
+    sb  = new ["StringBuilder"]
+
+    push sb, "foo"
+    push sb, iso-8859-1:"\x{E4}\x{F6}\x{FC}"
+    push sb, utf8:unicode:"БДЖ"
+    push sb, "bar"
+
+    $S0 = sb
+    is( $S0, utf8:unicode:"fooäöüБДЖbar", 'push strings with different encodings' )
+.end
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/html_cleanup/t/pmc/stringhandle.t
==============================================================================
--- branches/html_cleanup/t/pmc/stringhandle.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/stringhandle.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -665,15 +665,11 @@
     .local int i
     sh = new ['StringHandle']
 
-    # See TT #1689
-    i = sh.'is_tty'()
-    say i
     i = sh.'isatty'()
     say i
 .end
 CODE
 0
-0
 OUTPUT
 
 pir_output_is( <<"CODE", <<"OUTPUT", "readall() - utf8 on closed stringhandle" );

Modified: branches/html_cleanup/t/pmc/stringiterator.t
==============================================================================
--- branches/html_cleanup/t/pmc/stringiterator.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/pmc/stringiterator.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -22,8 +22,9 @@
 .sub main :main
     .include 'test_more.pir'
 
-    plan(28)
+    plan(30)
 
+    test_get_pmc()
     test_clone()
     test_elements()
     iterate_forward() # 11 tests
@@ -34,6 +35,16 @@
 
 .end
 
+
+.sub 'test_get_pmc'
+    .local pmc s, it, sget
+    s = new ['String']
+    s = 'foobar'
+    it = iter s
+    sget = deref it
+    is(s, sget, 'deref StringIterator gives the iterated string')
+.end
+
 .sub 'test_clone'
     .local pmc s, it, itc
     .local int nit, nitc
@@ -219,7 +230,9 @@
     s = 'hi'
     it = iter s
     s1 = it[0]
-    is(s1, 'h', 'get_string_keyed_int')
+    is(s1, 'h', 'get_string_keyed_int - zero')
+    s1 = it[1]
+    is(s1, 'i', 'get_string_keyed_int - not zero')
 
     eh = new ['ExceptionHandler']
     eh.'handle_types'(.EXCEPTION_OUT_OF_BOUNDS)

Modified: branches/html_cleanup/t/src/extend.t
==============================================================================
--- branches/html_cleanup/t/src/extend.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/src/extend.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -232,23 +232,22 @@
     Parrot_PMC    testpmc, newpmc;
 
     /* Interpreter set-up */
-    if (!interp)
-        return 1;
+    if (interp) {
+        type    = Parrot_PMC_typenum(interp, "Integer");
+        testpmc = Parrot_PMC_new(interp, type);
 
-    type    = Parrot_PMC_typenum(interp, "Integer");
-    testpmc = Parrot_PMC_new(interp, type);
+        Parrot_PMC_set_integer_native(interp, testpmc, value);
 
-    Parrot_PMC_set_integer_native(interp, testpmc, value);
+        parrot_reg = 31;
+        Parrot_set_pmcreg(interp, parrot_reg, testpmc);
 
-    parrot_reg = 31;
-    Parrot_set_pmcreg(interp, parrot_reg, testpmc);
+        newpmc    = Parrot_get_pmcreg(interp, parrot_reg);
+        new_value = Parrot_PMC_get_integer(interp, newpmc);
 
-    newpmc    = Parrot_get_pmcreg(interp, parrot_reg);
-    new_value = Parrot_PMC_get_integer(interp, newpmc);
+        printf("%d\n", (int)new_value);
 
-    printf("%d\n", (int)new_value);
-
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 CODE
@@ -271,18 +270,17 @@
     Parrot_PMC    testpmc;
 
     /* Interpreter set-up */
-    if (!interp)
-        return 1;
+    if (interp) {
+        type    = Parrot_PMC_typenum(interp, "Float");
+        testpmc = Parrot_PMC_new(interp, type);
 
-    type    = Parrot_PMC_typenum(interp, "Float");
-    testpmc = Parrot_PMC_new(interp, type);
+        Parrot_PMC_set_number_native(interp, testpmc, value);
+        new_value = Parrot_PMC_get_number(interp, testpmc);
 
-    Parrot_PMC_set_number_native(interp, testpmc, value);
-    new_value = Parrot_PMC_get_number(interp, testpmc);
+        printf("%.7f\n", (double)new_value);
 
-    printf("%.7f\n", (double)new_value);
-
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 CODE
@@ -304,19 +302,18 @@
     Parrot_PMC    testpmc;
 
     /* Interpreter set-up */
-    if (!interp)
-        return 1;
+    if (interp) {
+        type    = Parrot_PMC_typenum(interp, "String");
+        testpmc = Parrot_PMC_new(interp, type);
 
-    type    = Parrot_PMC_typenum(interp, "String");
-    testpmc = Parrot_PMC_new(interp, type);
+        value     = Parrot_new_string(interp, "Pumpking", 8, "iso-8859-1", 0);
+        Parrot_PMC_set_string_native(interp, testpmc, value);
+        new_value = Parrot_PMC_get_string(interp, testpmc);
 
-    value     = Parrot_new_string(interp, "Pumpking", 8, "iso-8859-1", 0);
-    Parrot_PMC_set_string_native(interp, testpmc, value);
-    new_value = Parrot_PMC_get_string(interp, testpmc);
+        Parrot_eprintf(interp, "%S\n", new_value);
 
-    Parrot_eprintf(interp, "%S\n", new_value);
-
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 CODE
@@ -356,12 +353,12 @@
 main(int argc, const char *argv[])
 {
     Parrot_Interp interp = Parrot_new(NULL);
-    if (!interp)
-        return 1;
+    if (interp) {
 
-    Parrot_run_native(interp, the_test);
+        Parrot_run_native(interp, the_test);
 
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 
@@ -414,12 +411,11 @@
 main(int argc, const char *argv[])
 {
     Parrot_Interp interp = Parrot_new(NULL);
-    if (!interp)
-        return 1;
-
-    Parrot_run_native(interp, the_test);
+    if (interp) {
+        Parrot_run_native(interp, the_test);
 
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 
@@ -490,12 +486,11 @@
 main(int argc, const char *argv[])
 {
     Parrot_Interp interp = Parrot_new(NULL);
-    if (!interp)
-        return 1;
-
-    Parrot_run_native(interp, the_test);
+    if (interp) {
+        Parrot_run_native(interp, the_test);
 
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 
@@ -558,12 +553,11 @@
 main(int argc, const char *argv[])
 {
     Parrot_Interp interp = Parrot_new(NULL);
-    if (!interp)
-        return 1;
-
-    Parrot_run_native(interp, the_test);
+    if (interp) {
+        Parrot_run_native(interp, the_test);
 
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 
@@ -656,24 +650,16 @@
     const char * code[] = { ".sub foo\\nsay \\"Hello from foo!\\"\\n.end\\n" };
 
     Parrot_Interp interp = Parrot_new(NULL);
-    if (!interp) {
-        printf( "Hiss\\n" );
-        return 1;
-    }
+    if (interp) {
+        packfile = Parrot_pbc_read( interp, "$temp_pbc", 0 );
 
-    packfile = Parrot_pbc_read( interp, "$temp_pbc", 0 );
+        if (packfile) {
+            Parrot_pbc_load( interp, packfile );
+            Parrot_runcode( interp, 1, code );
+        }
 
-    if (!packfile) {
-        printf( "Boo\\n" );
-        return 1;
+        Parrot_destroy( interp );
     }
-
-    Parrot_pbc_load( interp, packfile );
-    Parrot_runcode( interp, 1, code );
-
-    Parrot_destroy( interp );
-
-    Parrot_exit(interp, 0);
     return 0;
 }
 CODE
@@ -695,25 +681,18 @@
     Parrot_PMC      sub;
     Parrot_String   code_type, error, foo_name;
 
-    if (!interp) {
-        printf( "Hiss\n" );
-        return 1;
-    }
-
-    code_type = Parrot_str_new_constant( interp, "PIR" );
-    retval    = Parrot_compile_string( interp, code_type, code, &error );
-
-    if (!retval) {
-        printf( "Boo\n" );
-        return 1;
+    if (interp) {
+        code_type = Parrot_str_new_constant( interp, "PIR" );
+        retval    = Parrot_compile_string( interp, code_type, code, &error );
+
+        if (retval) {
+            foo_name = Parrot_str_new_constant( interp, "foo" );
+            sub      = Parrot_ns_find_current_namespace_global( interp, foo_name );
+
+            Parrot_ext_call(interp, sub, "->");
+        }
+        Parrot_destroy(interp);
     }
-
-    foo_name = Parrot_str_new_constant( interp, "foo" );
-    sub      = Parrot_ns_find_current_namespace_global( interp, foo_name );
-
-    Parrot_ext_call(interp, sub, "->");
-
-    Parrot_exit(interp, 0);
     return 0;
 }
 CODE
@@ -733,19 +712,15 @@
     Parrot_PackFile pf;
     Parrot_Interp   interp = Parrot_new(NULL);
 
-    if (!interp) {
-        printf( "No interpreter\\n" );
-        return 1;
+    if (interp) {
+        pf = Parrot_pbc_read( interp, "$temp_pbc", 0 );
+        Parrot_pbc_load( interp, pf );
+
+        sub      = Parrot_ns_find_current_namespace_global( interp, Parrot_str_new_constant( interp, "add" ) );
+        Parrot_ext_call(interp, sub, "II->I", 100, 200, &result);
+        printf( "Result is %d.\\n", result );
+        Parrot_destroy(interp);
     }
-
-    pf = Parrot_pbc_read( interp, "$temp_pbc", 0 );
-    Parrot_pbc_load( interp, pf );
-
-    sub      = Parrot_ns_find_current_namespace_global( interp, Parrot_str_new_constant( interp, "add" ) );
-    Parrot_ext_call(interp, sub, "II->I", 100, 200, &result);
-    printf( "Result is %d.\\n", result );
-
-    Parrot_exit(interp, 0);
     return 0;
 }
 CODE
@@ -765,19 +740,15 @@
     Parrot_PackFile pf;
     Parrot_Interp   interp = Parrot_new(NULL);
 
-    if (!interp) {
-        printf( "No interpreter\\n" );
-        return 1;
+    if (interp) {
+        pf = Parrot_pbc_read( interp, "$temp_pbc", 0 );
+        Parrot_pbc_load( interp, pf );
+
+        sub      = Parrot_ns_find_current_namespace_global( interp, Parrot_str_new_constant( interp, "add" ) );
+        Parrot_ext_call( interp, sub, "II->I", 100, 200, &result );
+        printf( "Result is %d.\\n", result );
+        Parrot_destroy(interp);
     }
-
-    pf = Parrot_pbc_read( interp, "$temp_pbc", 0 );
-    Parrot_pbc_load( interp, pf );
-
-    sub      = Parrot_ns_find_current_namespace_global( interp, Parrot_str_new_constant( interp, "add" ) );
-    Parrot_ext_call( interp, sub, "II->I", 100, 200, &result );
-    printf( "Result is %d.\\n", result );
-
-    Parrot_exit(interp, 0);
     return 0;
 }
 CODE
@@ -820,14 +791,13 @@
         printf("Starting interp %d\n", i);
         fflush(stdout);
         interp = Parrot_new(NULL);
-        if (!interp)
-            return 1;
+        if (interp) {
+            Parrot_set_flag(interp, PARROT_DESTROY_FLAG);
 
-        Parrot_set_flag(interp, PARROT_DESTROY_FLAG);
-
-        printf("Destroying interp %d\n", i);
-        fflush(stdout);
-        interp_cleanup(interp, 0);
+            printf("Destroying interp %d\n", i);
+            fflush(stdout);
+            interp_cleanup(interp, 0);
+        }
     }
 
     return 0;

Modified: branches/html_cleanup/t/src/warnings.t
==============================================================================
--- branches/html_cleanup/t/src/warnings.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/src/warnings.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -39,12 +39,11 @@
     Parrot_Interp interp = Parrot_new(NULL);
     int error_val;
 
-    if (!interp)
-        return 1;
+    if (interp) {
+        print_pbc_location(interp);
 
-    print_pbc_location(interp);
-
-    Parrot_exit(interp, 0);
+        Parrot_destroy(interp);
+    }
     return 0;
 }
 CODE
@@ -62,35 +61,34 @@
     Parrot_Interp interp = Parrot_new(NULL);
     int error_val;
 
-    if (!interp)
-        return 1;
-
-    PARROT_WARNINGS_on(interp, PARROT_WARNINGS_ALL_FLAG);
+    if (interp) {
+        PARROT_WARNINGS_on(interp, PARROT_WARNINGS_ALL_FLAG);
 
-    error_val = Parrot_warn(interp, PARROT_WARNINGS_ALL_FLAG, "all");
-    Parrot_io_eprintf(interp, "%d\n", error_val);
+        error_val = Parrot_warn(interp, PARROT_WARNINGS_ALL_FLAG, "all");
+        Parrot_io_eprintf(interp, "%d\n", error_val);
 
-    /* warnings are on, this should return an error */
-    error_val = Parrot_warn(interp, PARROT_WARNINGS_NONE_FLAG, "none");
-    Parrot_io_eprintf(interp, "%d\n", error_val);
+        /* warnings are on, this should return an error */
+        error_val = Parrot_warn(interp, PARROT_WARNINGS_NONE_FLAG, "none");
+        Parrot_io_eprintf(interp, "%d\n", error_val);
 
-    error_val = Parrot_warn(interp, PARROT_WARNINGS_UNDEF_FLAG, "undef");
-    Parrot_io_eprintf(interp, "%d\n", error_val);
+        error_val = Parrot_warn(interp, PARROT_WARNINGS_UNDEF_FLAG, "undef");
+        Parrot_io_eprintf(interp, "%d\n", error_val);
 
-    error_val = Parrot_warn(interp, PARROT_WARNINGS_IO_FLAG, "io");
-    Parrot_io_eprintf(interp, "%d\n", error_val);
+        error_val = Parrot_warn(interp, PARROT_WARNINGS_IO_FLAG, "io");
+        Parrot_io_eprintf(interp, "%d\n", error_val);
 
-    error_val = Parrot_warn(interp, PARROT_WARNINGS_PLATFORM_FLAG, "platform");
-    Parrot_io_eprintf(interp, "%d\n", error_val);
+        error_val = Parrot_warn(interp, PARROT_WARNINGS_PLATFORM_FLAG, "platform");
+        Parrot_io_eprintf(interp, "%d\n", error_val);
 
-    error_val = Parrot_warn(interp, PARROT_WARNINGS_DYNEXT_FLAG, "dynext");
-    Parrot_io_eprintf(interp, "%d\n", error_val);
+        error_val = Parrot_warn(interp, PARROT_WARNINGS_DYNEXT_FLAG, "dynext");
+        Parrot_io_eprintf(interp, "%d\n", error_val);
 
-    error_val = Parrot_warn(interp, 0, "eek"); /* should return error */
-    Parrot_io_eprintf(interp, "%d\n", error_val);
+        error_val = Parrot_warn(interp, 0, "eek"); /* should return error */
+        Parrot_io_eprintf(interp, "%d\n", error_val);
 
-    Parrot_exit(interp, 0);
-    return 0;
+        Parrot_destroy(interp);
+   }
+   return 0;
 }
 CODE
 all

Modified: branches/html_cleanup/t/steps/auto/readline-01.t
==============================================================================
--- branches/html_cleanup/t/steps/auto/readline-01.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/steps/auto/readline-01.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -5,7 +5,7 @@
 
 use strict;
 use warnings;
-use Test::More tests =>  9;
+use Test::More tests => 15;
 use Carp;
 use Cwd;
 use File::Spec;
@@ -23,13 +23,14 @@
 
 my ($args, $step_list_ref) = process_options(
     {
-        argv => [ ],
+        argv => [ '--without-readline' ],
         mode => q{configure},
     }
 );
 
 my $conf = Parrot::Configure::Step::Test->new;
 $conf->include_config_results( $args );
+my $serialized = $conf->pcfreeze();
 
 my $pkg = q{auto::readline};
 
@@ -37,6 +38,26 @@
 $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{not requested},
+    "Got expected result for 'without-readline'");
+is($conf->data->get('HAS_READLINE'), 0,
+    "Got expected value for HAS_READLINE");
+
+$conf->replenish($serialized);
+
+($args, $step_list_ref) = process_options(
+    {
+        argv => [ ],
+        mode => q{configure},
+    }
+);
+
+$conf->add_steps($pkg);
+$conf->options->set( %{$args} );
+$step = test_step_constructor_and_description($conf);
+
 # Mock values for OS and C-compiler
 my ($osname, $cc);
 $osname = 'mswin32';

Deleted: branches/html_cleanup/t/steps/inter/charset-01.t
==============================================================================
--- branches/html_cleanup/t/steps/inter/charset-01.t	Wed Sep 22 03:35:47 2010	(r49231)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,114 +0,0 @@
-#! perl
-# Copyright (C) 2007, Parrot Foundation.
-# $Id$
-# inter/charset-01.t
-
-use strict;
-use warnings;
-use Test::More tests => 12;
-use Carp;
-use lib qw( lib t/configure/testlib );
-use_ok('config::inter::charset');
-use Parrot::Configure::Options qw( process_options );
-use Parrot::Configure::Step::Test;
-use Parrot::Configure::Test qw(
-    test_step_constructor_and_description
-);
-use Tie::Filehandle::Preempt::Stdin;
-
-########## ask ##########
-
-my ($args, $step_list_ref) = process_options(
-    {
-        argv => [],
-        mode => q{configure},
-    }
-);
-
-my $conf = Parrot::Configure::Step::Test->new;
-$conf->include_config_results( $args );
-
-my $pkg = q{inter::charset};
-
-$conf->add_steps($pkg);
-
-my $serialized = $conf->pcfreeze();
-
-$conf->options->set( %{$args} );
-my $step = test_step_constructor_and_description($conf);
-{
-    open STDOUT, '>', "/dev/null" or croak "Unable to open to myout";
-    my $ret = $step->runstep($conf);
-    close STDOUT or croak "Unable to close after myout";
-    ok( $ret, "runstep() returned true value" );
-}
-
-$conf->replenish($serialized);
-
-########## ask ##########
-
-($args, $step_list_ref) = process_options(
-    {
-        argv => [ q{--ask} ],
-        mode => q{configure},
-    }
-);
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-
-my ( @prompts, $object );
-
-$conf->options->set('intval' => 'alpha');
-$conf->options->set('floatval' => 'beta');
-$conf->options->set('opcode' => 'gamma');
- at prompts = qw( delta epsilon zeta );
-
-$object = tie *STDIN, 'Tie::Filehandle::Preempt::Stdin', @prompts;
-can_ok( 'Tie::Filehandle::Preempt::Stdin', ('READLINE') );
-isa_ok( $object, 'Tie::Filehandle::Preempt::Stdin' );
-
-{
-    open STDOUT, '>', "/dev/null" or croak "Unable to open to myout";
-    my $ret = $step->runstep($conf);
-    close STDOUT or croak "Unable to close after myout";
-    ok( $ret, "runstep() returned true value" );
-}
-
-undef $object;
-untie *STDIN;
- at prompts = ();
-
-pass("Completed all tests in $0");
-
-################### DOCUMENTATION ###################
-
-=head1 NAME
-
-inter/charset-01.t - test inter::charset
-
-=head1 SYNOPSIS
-
-    % prove t/steps/inter/charset-01.t
-
-=head1 DESCRIPTION
-
-The files in this directory test functionality used by F<Configure.pl>.
-
-The tests in this file test inter::charset.
-
-=head1 AUTHOR
-
-James E Keenan
-
-=head1 SEE ALSO
-
-config::inter::charset, F<Configure.pl>.
-
-=cut
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Deleted: branches/html_cleanup/t/steps/inter/encoding-01.t
==============================================================================
--- branches/html_cleanup/t/steps/inter/encoding-01.t	Wed Sep 22 03:35:47 2010	(r49231)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,110 +0,0 @@
-#! perl
-# Copyright (C) 2007, Parrot Foundation.
-# $Id$
-# inter/encoding-01.t
-
-use strict;
-use warnings;
-use Test::More tests => 12;
-use Carp;
-use lib qw( lib t/configure/testlib );
-use_ok('config::inter::encoding');
-use Parrot::Configure::Options qw( process_options );
-use Parrot::Configure::Step::Test;
-use Parrot::Configure::Test qw(
-    test_step_constructor_and_description
-);
-use Tie::Filehandle::Preempt::Stdin;
-
-########## no ask ##########
-
-my ($args, $step_list_ref) = process_options(
-    {
-        argv => [],
-        mode => q{configure},
-    }
-);
-
-my $conf = Parrot::Configure::Step::Test->new;
-$conf->include_config_results( $args );
-
-my $pkg = q{inter::encoding};
-
-$conf->add_steps($pkg);
-
-my $serialized = $conf->pcfreeze();
-
-$conf->options->set( %{$args} );
-my $step = test_step_constructor_and_description($conf);
-{
-    open STDOUT, '>', "/dev/null" or croak "Unable to open to myout";
-    my $ret = $step->runstep($conf);
-    close STDOUT or croak "Unable to close after myout";
-    ok( $ret, "runstep() returned true value" );
-}
-
-$conf->replenish($serialized);
-
-########## ask; $ENV{TEST_ENCODING} ##########
-
-$ENV{TEST_ENCODING} = 'fixed_8.c';
-do config::inter::encoding;
-($args, $step_list_ref) = process_options(
-    {
-        argv => [q{--ask}],
-        mode => q{configure},
-    }
-);
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-my ( @prompts, $prompt, $object );
-$prompt = $ENV{TEST_ENCODING};
-push @prompts, $prompt;
-$object = tie *STDIN, 'Tie::Filehandle::Preempt::Stdin', @prompts;
-can_ok( 'Tie::Filehandle::Preempt::Stdin', ('READLINE') );
-isa_ok( $object, 'Tie::Filehandle::Preempt::Stdin' );
-{
-    open STDOUT, '>', "/dev/null" or croak "Unable to open to myout";
-    my $ret = $step->runstep($conf);
-    close STDOUT or croak "Unable to close after myout";
-    ok( $ret, "runstep() returned true value" );
-}
-
-undef $object;
-untie *STDIN;
- at prompts = ();
-
-pass("Completed all tests in $0");
-
-################### DOCUMENTATION ###################
-
-=head1 NAME
-
-inter/encoding-01.t - test inter::encoding
-
-=head1 SYNOPSIS
-
-    % prove t/steps/inter/encoding-01.t
-
-=head1 DESCRIPTION
-
-The files in this directory test functionality used by F<Configure.pl>.
-
-The tests in this file test inter::encoding.
-
-=head1 AUTHOR
-
-James E Keenan
-
-=head1 SEE ALSO
-
-config::inter::encoding, F<Configure.pl>.
-
-=cut
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/html_cleanup/t/tools/parrot_debugger.t
==============================================================================
--- branches/html_cleanup/t/tools/parrot_debugger.t	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/t/tools/parrot_debugger.t	Wed Sep 22 03:35:47 2010	(r49232)
@@ -45,6 +45,8 @@
         plan skip_all => "parrot_debugger hasn't been built. Run make parrot_utils";
         exit(0);
     }
+    plan skip_all => "parrot_debugger changes have rendered these tests obsolete.";
+    exit(0);
 }
 
 my $tests = 0;
@@ -99,12 +101,15 @@
     \$I1 = 242
 .end
 PIR
+
 pdb_output_like( <<PASM, "pasm", "s", qr/current instr.: '\(null\)'/, 'show stack (pasm)');
     set I1, 242
 PASM
+
 pdb_output_like( <<PASM, "pasm", "info", qr/Total memory allocated =/, 'info (pasm)');
     set I1, 242
 PASM
+
 pdb_output_like( <<PASM, "pasm", "b", qr/Breakpoint 1 at.*pos 0/, 'set breakpoint');
     set I1, 242
 PASM

Modified: branches/html_cleanup/tools/build/parrot_config_c.pl
==============================================================================
--- branches/html_cleanup/tools/build/parrot_config_c.pl	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/tools/build/parrot_config_c.pl	Wed Sep 22 03:35:47 2010	(r49232)
@@ -5,9 +5,6 @@
 use warnings;
 use strict;
 
-my ($svnid) =
-    '$Id$' =~ /^\$[iI][dD]:\s(.*)\$$/;
-
 =head1 NAME
 
 tools/build/parrot_config_c.pl - Create src/parrot_config.c and variants
@@ -30,8 +27,6 @@
 
 =cut
 
-use strict;
-
 my ( $mini_parrot, $install_parrot );
 
 $mini_parrot    = 1 if @ARGV && $ARGV[0] =~ /mini/;

Modified: branches/html_cleanup/tools/dev/fetch_languages.pl
==============================================================================
--- branches/html_cleanup/tools/dev/fetch_languages.pl	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/tools/dev/fetch_languages.pl	Wed Sep 22 03:35:47 2010	(r49232)
@@ -231,7 +231,7 @@
     {
         name       => 'pir',
         scm        => 'GIT',
-        repository => 'http://github.com/bacek/pir.git'
+        repository => 'http://github.com/parrot/pir.git'
     },
 
     {

Modified: branches/html_cleanup/tools/dev/gen_charset_tables.pl
==============================================================================
--- branches/html_cleanup/tools/dev/gen_charset_tables.pl	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/tools/dev/gen_charset_tables.pl	Wed Sep 22 03:35:47 2010	(r49232)
@@ -23,7 +23,7 @@
     '$Id$' =~
     /^\$[iI][dD]:\s(.*) \$$/;
 my $fileid      = '$' . 'Id $';
-my $charset_dir = File::Spec->catdir(qw/ src charset /);
+my $charset_dir = File::Spec->catdir(qw/ src string encoding /);
 
 my $coda = <<'EOF';
 /*
@@ -110,7 +110,7 @@
 }
 
 #
-# create 'src/charset/tables.c'
+# create 'src/encoding/tables.c'
 #
 ###########################################################################
 my $c_file = File::Spec->catfile( $charset_dir, 'tables.c' );
@@ -129,7 +129,7 @@
 close STDOUT;
 
 #
-# create 'src/charset/tables.h'
+# create 'src/encoding/tables.h'
 #
 ###########################################################################
 my $h_file = File::Spec->catfile( $charset_dir, 'tables.h' );

Modified: branches/html_cleanup/tools/dev/headerizer.pl
==============================================================================
--- branches/html_cleanup/tools/dev/headerizer.pl	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/tools/dev/headerizer.pl	Wed Sep 22 03:35:47 2010	(r49232)
@@ -329,7 +329,11 @@
 
     # Walk the object files and find corresponding source (either .c or .pmc)
     for my $ofile (@ofiles) {
-        next if $ofile =~ m/^\Qsrc$PConfig{slash}ops\E/;
+
+        # Skip files in the src/ops/ subdirectory.
+
+        next if $ofile =~ m/^\Qsrc$PConfig{slash}ops\E/ || # if run by hand...
+                $ofile =~ m{^src/ops};                     # ... or by makefile
 
         $ofile =~ s/\\/\//g;
 

Modified: branches/html_cleanup/tools/dev/nci_thunk_gen.pir
==============================================================================
--- branches/html_cleanup/tools/dev/nci_thunk_gen.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/tools/dev/nci_thunk_gen.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -313,7 +313,7 @@
     str_file = concat str_file, '.str'
 
     .local string head
-    head = 'sprintf'(<<'HEAD', c_file, ext_defn, str_file)
+    head = 'sprintf'(<<'HEADSTART', c_file)
 /* ex: set ro ft=c:
  * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
  *
@@ -326,7 +326,13 @@
 /* %s
  *  Copyright (C) 2010, Parrot Foundation.
  *  SVN Info
- *     $Id$
+HEADSTART
+
+    # Avoid svn mangling here by hex encoding the dollar signs
+    head = concat head, " *     \x{24}Id: \x{24}\n"
+
+    .local string headtail
+    headtail = 'sprintf'(<<'HEAD', ext_defn, str_file)
  *  Overview:
  *     Native Call Interface routines. The code needed to build a
  *     parrot to C call frame is in here
@@ -355,6 +361,7 @@
    hackish, but that is just fine */
 
 HEAD
+    head = concat head, headtail
     .return (head)
 .end
 
@@ -860,7 +867,7 @@
            "temp_tmpl": "char *t_%i; STRING *ts_%i",
            "fill_params_tmpl": ", &ts_%i",
            "preamble_tmpl": "t_%i = STRING_IS_NULL(ts_%i) ? (char *)NULL : Parrot_str_to_cstring(interp, ts_%i);",
-           "postamble_tmpl": "if (t_%i) Parrot_str_free_cstring(t_%i);" },
+           "postamble_tmpl": "if (!STRING_IS_NULL(ts_%i)) Parrot_str_free_cstring(t_%i);" },
     "v": { "as_proto": "void",
            "return_type": "void *",
            "sig_char": "v",
@@ -889,7 +896,7 @@
            "temp_tmpl": "char *t_%i; STRING *ts_%i",
            "preamble_tmpl": "t_%i = STRING_IS_NULL(ts_%i) ? (char *) NULL : Parrot_str_to_cstring(interp, ts_%i);",
            "call_param_tmpl": "&t_%i",
-           "postamble_tmpl": "if (t_%i) Parrot_str_free_cstring(t_%i);" },
+           "postamble_tmpl": "if (!STRING_IS_NULL(ts_%i)) Parrot_str_free_cstring(t_%i);" },
     "2": { "as_proto": "short *",
            "sig_char": "P",
            "return_type": "short",

Modified: branches/html_cleanup/tools/dev/pbc_to_exe.pir
==============================================================================
--- branches/html_cleanup/tools/dev/pbc_to_exe.pir	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/tools/dev/pbc_to_exe.pir	Wed Sep 22 03:35:47 2010	(r49232)
@@ -578,10 +578,11 @@
     .param int    install
 
     $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']
@@ -615,6 +616,8 @@
     compile .= pathquote
     compile .= ' '
     compile .= ccflags
+    compile .= ' '
+    compile .= optimize
     compile .= ' -c '
     compile .= cfile
 

Modified: branches/html_cleanup/tools/release/release.json
==============================================================================
--- branches/html_cleanup/tools/release/release.json	Wed Sep 22 03:28:15 2010	(r49231)
+++ branches/html_cleanup/tools/release/release.json	Wed Sep 22 03:35:47 2010	(r49232)
@@ -1,9 +1,9 @@
 {
-    "release.version"  : "2.7.0",
-    "release.name"     : "Australian King",
+    "release.version"  : "2.8.0",
+    "release.name"     : "Tui Parakeet",
     "release.day"      : "Tuesday",
-    "release.date"     : "17 August 2010",
-    "release.nextdate" : "21 September 2010",
+    "release.date"     : "21 September 2010",
+    "release.nextdate" : "19 October 2010",
 
     "web.root"         : "http://parrot.org/",
     "web.source"       : "download",
@@ -11,11 +11,11 @@
     "web.repository"   : "https://svn.parrot.org/parrot/trunk/",
 
     "bugday.day"       : "Saturday",
-    "bugday.date"      : "18 September 2010",
+    "bugday.date"      : "16 October 2010",
 
     "wiki.root"        : "https://trac.parrot.org/parrot/wiki/",
-    "wiki.bugday"      : "bug_day_2010_09_18",
+    "wiki.bugday"      : "bug_day_2010_10_16",
 
-    "ftp.path"         : "ftp://ftp.parrot.org/pub/parrot/releases/devel/2.7.0/",
+    "ftp.path"         : "ftp://ftp.parrot.org/pub/parrot/releases/devel/2.8.0/",
     "subversion.root"  : "http://subversion.apache.org/"
 }


More information about the parrot-commits mailing list